contextvm-sdk 0.1.0

Rust SDK for the ContextVM protocol — MCP over Nostr
Documentation
---
title: CEP-24 Server Reviews
description: Standard server reviews using kind 1111 comments on kind 11316 announcements
---

# Server Reviews

**Status:** Draft
**Author:** @contextvm-org
**Type:** Standards Track

## Abstract

This CEP standardizes server reviews by using NIP-22 comments (`kind:1111`) as review events attached to ContextVM server announcements (`kind:11316`).

By reusing NIP-22 comment semantics, reviews become interoperable across clients and relays without requiring a ContextVM-specific review event kind.

## Motivation

ContextVM needs a discovery-friendly, ecosystem-compatible way to publish and retrieve server feedback.

Using NIP-22 comments enables:

- shared review discovery across clients
- threaded discussion and replies
- compatibility with existing moderation and anti-spam patterns

The target object for reviews is the server announcement identity (`a` coordinate for `kind:11316`), optionally anchored to the current announcement event (`e`) for better UX and context.

## Specification

### Review Event Kind

Servers and clients MUST use NIP-22 comments (`kind:1111`) for review events.

### Top-Level Comment on a Server

Top-level server reviews SHOULD include both uppercase and lowercase tags as used in NIP-22 ecosystems for broad compatibility.

```json
{
  "kind": 1111,
  "content": "Great server!",
  "tags": [
    ["A", "11316:<server-pubkey>:", "<relay-hint>"],
    ["K", "11316"],
    ["P", "<server-pubkey>", "<relay-hint>"],
    ["a", "11316:<server-pubkey>:", "<relay-hint>"],
    ["e", "<current-announcement-event-id>", "<relay-hint>", "<server-pubkey>"],
    ["k", "11316"],
    ["p", "<server-pubkey>", "<relay-hint>"]
  ]
}
```

Tag intent:

- `A` / `a`: addressable target (`11316:<server-pubkey>:`)
- `K` / `k`: target kind context (`11316` for top-level server review)
- `P` / `p`: target author context (server pubkey)
- optional `e`: explicit anchor to the latest known announcement event for timeline context

### Reply to a Comment

Replies MUST reference the parent comment event with lowercase `e`, `k` (set to `1111`), and `p` tags representing the parent comment context, while keeping the uppercase `A`, `K` (set to `11316`), and `P` tags pointed to the root server announcement.

```json
{
  "kind": 1111,
  "content": "I agree!",
  "tags": [
    ["A", "11316:<server-pubkey>:", "<relay-hint>"],
    ["K", "11316"],
    ["P", "<server-pubkey>", "<relay-hint>"],
    [
      "e",
      "<parent-comment-event-id>",
      "<relay-hint>",
      "<parent-author-pubkey>"
    ],
    ["k", "1111"],
    ["p", "<parent-author-pubkey>", "<relay-hint>"]
  ]
}
```

_Note: Dual-tagging of `A` and `a` is only applicable to top-level comments where the root and parent are the same. For replies, the parent is a comment event, so the reply MUST use an `e` tag for the parent reference and an `A` tag for the root announcement._

### Discovery Filter

Clients discovering reviews for a specific server SHOULD query with:

```json
{
  "kinds": [1111],
  "#K": ["11316"],
  "#A": ["11316:<server-pubkey>:"]
}
```

## Backward Compatibility

This CEP is additive:

- no new ContextVM-specific review kind is introduced
- clients that already support NIP-22 comments can adopt this targeting convention incrementally
- servers without review support continue to operate unchanged

## Reference Implementation

A reference implementation for server review UI and data fetching can be found in the [ContextVM site repository](https://github.com/ContextVM/contextvm-site).

## Dependencies

- [CEP-6: Public Server Announcements]/spec/ceps/cep-6