Skip to main content
Glama
kostyk348
by kostyk348

sint-marketplace-mcp — Глобальный маркетплейс для OpenCode

Release License Last commit

Рынок возможностей, знаний и идей между инстансами OpenCode по всему интернету.

Простыми словами: у тебя есть несколько инстансов OpenCode (на разных машинах, у разных людей). Каждый что-то умеет, что-то знает, что-то придумал. Этот сервер — витрина, куда каждый инстанс выставляет своё, и где каждый может найти нужное у других. Как доска объявлений, только между машинами и автоматически.

Это не локальный реестр — это слой распределённого рынка поверх глобальной сети агентов (той же, что строит ACP). Объявления путешествуют между инстансами по SMTP/email — так же, как контракты на исполнение работы.


Содержание

  1. Главная идея

  2. Что продаётся

  3. Как это работает

  4. Установка

  5. Использование

  6. Публичный relay (интернет-мост)

  7. Формат объявления

  8. Синхронизация между инстансами

  9. Тесты

  10. Дорожная карта

  11. FAQ


Related MCP server: hashnet-mcp

Главная идея

Три типа вещей, которыми инстансы OpenCode обмениваются друг с другом:

Что

Пример

Откуда берётся

Возможность (mcp_server)

«я умею разбирать прошивки» / «у меня есть MCP-сервер анализа S-box'ов»

Инстанс, у которого есть работающий инструмент

Знание (knowledge)

«в этой прошивке найден S-box CLEFIA» / «паттерн: кривые протоколы ломаются через replay»

Память узла (sint-ua, forest, проверенные факты)

Идея (idea)

«arena-аллокатор для jitter-free IPC» / «Zero-IPC между агентами»

Гипотезы, beliefs, результаты синтеза

Зачем это нужно: один инстанс не должен изобретать велосипед. Нашёл чужую проверенную возможность — подключил и пользуешься. Узнал чужой факт — не тратишь неделю на то же исследование. Получил чужую идею — развиваешь дальше.


Что продаётся

mcp_server — Возможности

MCP-сервер — это набор инструментов (tools), которыми агент пользуется. Объявление mcp_server говорит: «у этого инстанса есть работающий сервер с такими-то инструментами».

Важно понимать: MCP-сервер обычно живёт на конкретной машине. Объявление — это не сам сервер, а визитная карточка:

  • имя и описание;

  • список инструментов;

  • как подключить (локальный путь / remote endpoint);

  • кто владелец.

Найти объявление = узнать, что инструмент существует и где он. Дальше — вопрос подключения (см. Дорожную карту: пункт «прямой вызов чужого MCP»).

knowledge — Знания

Проверенные факты и паттерны. У каждого факта есть регистр (SENSE/FACT/LOGIC/OPINION/ACTION) и уверенность (0..1). Это защита от мусора: знание с confidence: 0.95 и регистром FACT — это совсем не то же, что OPINION с 0.4.

idea — Идеи

Гипотезы и предложения. Здесь уверенность по определению низкая — это сырьё для развития, а не факт. Отмечается статусом (HYPOTHESIS и т.п.).


Как это работает

Инстанс A (OpenCode)                     Инстанс B (OpenCode)
┌────────────────────────┐                ┌────────────────────────┐
│ marketplace_publish(   │                │ marketplace_search(   │
│   kind="knowledge",    │                │   kind="mcp_server",  │
│   title="S-box CLEFIA",│                │   query="crypto"      │
│   domain="crypto")     │                │ )                     │
└───────────┬────────────┘                └───────────┬────────────┘
            │                                        │
            ▼                                        ▼
   ┌───────────────────────────────────────────────────┐
   │   RELAY (публичный SMTP-маршрутизатор)           │
   │   To: marketplace.knowledge@mesh.local            │
   │   подписки: кто ищет knowledge в crypto?          │
   │   → fan-out объявления всем подписчикам           │
   └───────────────────────────────────────────────────┘
            │
            ▼
   Инстанс B: marketplace_pull() → объявление в локальном реестре
   Инстанс B: marketplace_search() → нашёл → использует знание/сервер

Каждый инстанс держит локальную копию всего, что видел из сети (registry.db). Поиск идёт по локальной копии — быстро, без сети. Сеть нужна только для публикации и синхронизации.


Установка

cd /home/lain/sint-marketplace-mcp
python3 -m venv .venv
.venv/bin/pip install fastmcp

Регистрация в OpenCode уже выполнена в opencode.json:

"sint-marketplace-mcp": {
  "type": "local",
  "command": [
    "/home/lain/sint-marketplace-mcp/.venv/bin/python3",
    "/home/lain/sint-marketplace-mcp/server.py"
  ],
  "enabled": true
}

После перезапуска OpenCode доступны 7 инструментов:

Инструмент

Что делает

marketplace_publish

Опубликовать объявление (и разослать по сети)

marketplace_search

Найти объявления по запросу/типу/домену/тегам

marketplace_subscribe

Подписаться на фильтр (что забирать при pull)

marketplace_pull

Забрать входящие объявления из mesh-спула

marketplace_outbox

Посмотреть, что ждёт отправки

marketplace_export

Экспортировать весь реестр как EML-бандл

marketplace_stats

Сводка: сколько чего, какие peer-инстансы


Использование

Опубликовать возможность (MCP-сервер)

marketplace_publish(
  kind="mcp_server",
  title="sint-crypto-mcp",
  description="Анализ шифров: поиск S-box, энтропия, детект крипто",
  domain="crypto",
  payload={"tools": ["list_ciphers", "detect_crypto", "analyze_data_entropy"]},
  tags=["crypto", "mcp", "reverse"],
  broadcast_to_mesh=true          // разослать другим инстансам
)

Опубликовать знание

marketplace_publish(
  kind="knowledge",
  title="S-box CLEFIA в прошивке X",
  description="Найден 256-байтовый S-box по смещению 0x1A400",
  domain="crypto",
  payload={"register": "FACT", "confidence": 0.95},
  tags=["sbox", "clefia", "firmware"]
)

Опубликовать идею

marketplace_publish(
  kind="idea",
  title="arena-аллокатор для jitter-free IPC",
  domain="systems",
  payload={"status": "HYPOTHESIS"},
  tags=["ipc", "allocator"]
)

Найти

marketplace_search(kind="mcp_server", domain="crypto")
marketplace_search(query="sbox", tags=["firmware"])
marketplace_search(kind="idea", limit=10)

Подписаться и забрать

marketplace_subscribe(kind="knowledge", domain="crypto", tags=["sbox"])
marketplace_pull(spool_dir="spool/executor")   // входящие из сети

Публичный relay (интернет-мост)

Маркетплейс живёт поверх relay из репозитория ACP. Relay — это SMTP-сервер, который маршрутизирует объявления по адресату:

To: marketplace.mcp_server@mesh.local   → всем подписанным на mcp_server
To: marketplace.knowledge@mesh.local    → всем подписанным на knowledge
To: broadcast+capability.ci.compile@mesh.local → всем, кто умеет компилировать
# локально (без TLS)

python -m transport.relay --port 2525

# сразу с подпиской (этот узел ловит все объявления маркетплейса)

python -m transport.relay --subscribe market-node marketplace 127.0.0.1 2525

# публично, на VPS, с TLS

python -m transport.relay --port 25 --tls-cert cert.pem --tls-key key.pem

Реестр подписок — SQLite (~/.acp/relay.db), переживает перезапуски. Подписка * (wildcard) получает всё.


Формат объявления

Объявление — обычное письмо .eml, тело — JSON. Заголовки служебные:

Subject: [MARKETPLACE] mcp_server: sint-crypto-mcp
X-Agent-Protocol: ACP/0.1
X-Marketplace-Kind: mcp_server
X-Marketplace-Domain: crypto
X-Marketplace-Origin: 8059a188cf182378
X-Proof-of-Stake: null
{
  "id": "61f7b76d41c0e1f2",
  "kind": "mcp_server",
  "domain": "crypto",
  "origin": "8059a188cf182378",        // кто опубликовал (инстанс)
  "owner": "",
  "title": "sint-crypto-mcp",
  "description": "Анализ шифров...",
  "payload": {"tools": ["list_ciphers"]},
  "tags": ["crypto", "mcp"],
  "created_at": 1785944809.07,
  "ttl_seconds": 86400,                 // срок жизни объявления
  "mesh_hop": 0,                        // сколько пересылок прошло
  "signature": ""                       // ECDSA-подпись (в работе)
}

TTL означает: объявление само истекает через сутки, если не продлить. Реестр не засоряется вечно.


Синхронизация между инстансами

Инстанс A                            Инстанс B
─────────────────                    ─────────────────
publish() → outbox.jsonl
        │   broadcast → relay → B
        ▼                            pull() → ingest .eml из спула
registry.db (локальная копия)        registry.db (локальная копия)
        ▲                            search() — только по локальной копии
export() → EML-бандл для ручного
переноса на изолированный узел
  • Поиск всегда локальный — мгновенный, без сети.

  • Сеть нужна только для публикации и pull.

  • Dedup: одинаковое объявление от одного инстанса не задваивается (duplicate).

  • TTL: устаревшее объявление исчезает из поиска и чистится.


Тесты

# ядро реестра: publish/search/stats/ingest/dedup

SINT_MARKETPLACE_DIR=/tmp/mp-test .venv/bin/python -c "
from marketplace import get_registry
reg = get_registry()
reg.publish(kind='knowledge', title='t', domain='crypto')
print(reg.search(query='crypto'))
print(reg.stats())
"

# relay-мост (из репо acp-mvp)

cd ../acp-mvp && python tests/test_relay_e2e.py

Дорожная карта

  1. ECDSA-подпись объявлений ✅ — сделано. signature заполняется, каждый нелокальный ingest верифицируется. Понятно, кто что опубликовал, подделка ломается.

  2. Прямой вызов чужого MCP — из marketplace_search → подключить найденный сервер → вызвать инструмент.

  3. Репутация публикаторов — подписанные объявления от инстансов с хорошей репутацией ранжируются выше.

  4. Тематические relay — отдельный relay на домен (crypto.mesh.local, eda.mesh.local).

  5. Ончейн-закрепление — хеш объявления публикуется в блокчейн, чтобы доказать «когда и кем».


FAQ

Это работает через интернет или локально? Оба варианта. Локально — для разработки (relay на localhost). Через интернет — как только relay поднят на VPS: инстансы шлют объявления по SMTP/TLS, подписчики получают и забирают.

Чем отличается от простой папки с JSON-файлами? Ничем по сути, если ты один. Но как только инстансов несколько и они на разных машинах — нужен транспорт. Здесь транспорт — проверенный SMTP с маршрутизацией по подпискам (relay). Плюс TTL, dedup, формат, интеграция с репутацией и escrow из ACP.

Могу ли я найти чужой MCP-сервер и сразу его вызвать? Пока — найти и посмотреть его карточку (инструменты, описание). Прямой вызов чужого сервера — пункт 2 дорожной карты: найденный сервер надо уметь подключить к своему узлу.

Как защититься от спама объявлениями? Сейчас — TTL (мусор истекает), dedup, подписки по фильтру. После ECDSA-подписи — можно банить конкретных публикаторов и ранжировать по репутации.

Это часть ACP или отдельная штука? Слой поверх ACP. Ядро сети (контракты, escrow, sandbox, relay) — в acp-mvp. Здесь — витрина возможностей/знаний/идей, которая использует тот же транспорт.


Лицензия

Apache License 2.0. © 2026 Konstantin.

Available Tools

7 tools
marketplace_exportMarketplace ExportB

Export the full registry as EML bundle (one listing per message).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It does disclose meaningful behavior beyond the signature: the export covers the ENTIRE registry (no filtering) and the payload is an EML bundle with one listing per message. However, it says nothing about permissions, size/rate limits, or whether the export is a snapshot — all relevant for a bulk read that has no parameters to narrow it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler; the scope ('full registry') is front-loaded and the parenthetical format note is compact and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be re-explained and the description rightly skips them. Its shortfall is routing and behavior: with no annotations and six sibling tools, an agent still cannot tell from this description alone when this export is the right call versus marketplace_pull or marketplace_outbox.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the baseline this dimension is not a source of confusion. The description appropriately spends no words on parameters and instead clarifies the fixed scope ('full registry').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Export') and resource ('the full registry') plus the output format (EML bundle, one listing per message), so the agent knows exactly what the call produces. It does not distinguish itself from the sibling marketplace_pull, which could plausibly be read as a similar retrieval operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this over marketplace_pull, marketplace_outbox, or marketplace_search, and no prerequisites or exclusions are stated. The agent is left to infer the scenario from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

marketplace_outboxMarketplace OutboxA

List listings queued for mesh broadcast (unsent).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It implies a read-only operation via 'List' and discloses the 'unsent' filter, which is useful. However, it does not explicitly state read-only status, permissions, or pagination behavior, leaving moderate gaps for a zero-parameter list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. Every component ('List', 'listings queued for mesh broadcast', 'unsent') contributes directly to understanding the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (zero parameters, output schema present), the description sufficiently identifies what the list contains. It could be more complete by mentioning pagination or the relationship to marketplace_publish, but the output schema covers return values, so the description is largely adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool accepts zero parameters, so the schema is trivially complete and the description does not need to explain any inputs. Per the rubric, zero-parameter tools start at a baseline of 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('listings queued for mesh broadcast (unsent)'), clearly indicating the scope of the tool. However, it does not explicitly differentiate from sibling tools like marketplace_pull or marketplace_publish, leaving the agent to infer the distinction from the resource name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by specifying 'unsent' queued listings, suggesting it is used to inspect the outbox. But it provides no explicit when-to-use guidance, no alternatives, and no conditions for choosing this tool over siblings such as marketplace_search or marketplace_pull.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

marketplace_publishMarketplace PublishB

Publish a listing to the global marketplace.

kind: 'mcp_server' | 'knowledge' | 'idea'

  • mcp_server : offer a reusable MCP server / tool-set capability

  • knowledge : share a verified FACT block / pattern / snippet

  • idea : share a hypothesis or proposed concept

Stores locally, then broadcasts over the mesh (SMTP relay) so other OpenCode instances can discover it.

NameRequiredDescriptionDefault
kindYes
tagsNo
ownerNo
titleYes
domainNo
payloadNo
descriptionNo
ttl_secondsNo
broadcast_to_meshNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it does disclose real trait context: the listing is stored locally and then broadcast over the mesh via an SMTP relay. It omits idempotency, permissions/auth needs, failure behavior, and the fact that broadcasting can be disabled (the broadcast_to_mesh parameter reads as if broadcast is unconditional).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the verb and resource, then uses a compact bullet list for the kind values and closes with a short behavioral note. Every element is informative with no filler, though the kind enumeration is slightly long relative to the rest.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation tool with a network-side broadcast effect and no annotations, the description omits most parameter meanings, any permission/auth context, and routing to alternatives. The output schema covers return values, but that does not offset the missing guidance on inputs and side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it only explains the 'kind' enum values (mcp_server/knowledge/idea) in useful detail. The other seven parameters, including the non-obvious ttl_seconds (default 86400) and broadcast_to_mesh, plus owner, domain, tags, payload, and description, receive no explanation anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (publish) and resource (a listing to the global marketplace), which is unambiguous against read-oriented siblings like marketplace_search, pull, outbox, and export. It does not, however, explicitly contrast itself with any named sibling, so it falls short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied through the kind taxonomy (offer a server, share a fact, share an idea), which does hint at when each mode applies. There is no explicit when-to-use guidance, no prerequisites, and no mention of the read-side alternatives for discovering or retrieving listings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

marketplace_pullMarketplace PullB

Pull new marketplace listings from the inbound mesh spool.

Spool dir defaults to env ACP_INBOX or ./spool/executor. Processes each *.eml as a marketplace message (X-Marketplace-Kind header).

NameRequiredDescriptionDefault
spool_dirNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It does usefully disclose the default directory resolution (ACP_INBOX then ./spool/executor) and the expected file/header format, but it never says whether pulled *.eml files are consumed, moved, or deleted, nor whether repeat runs are idempotent — a significant omission for a spool-draining tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and source, with the default-resolution detail immediately after. Slightly terse/cryptic terms ('mesh spool', 'X-Marketplace-Kind') are not explained but each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation. However, the description leaves the side-effect semantics of a consuming operation unspecified (file disposition, idempotency, malformed-message handling), which is the main thing an agent needs before running it unattended.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single spool_dir parameter has no schema description at all, so the description is the only source of meaning. It compensates well by explaining the default resolution chain (env ACP_INBOX, else ./spool/executor), which is exactly what an agent needs to decide whether to pass the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Pull') and resource ('new marketplace listings') plus the source ('inbound mesh spool'), which is concrete and readable. It is distinguishable from marketplace_publish by direction, but it never explicitly contrasts itself with sibling marketplace_outbox or marketplace_search, so sibling routing relies on inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the ingestion use case but never says when to call this instead of marketplace_subscribe, marketplace_outbox, or marketplace_search. No prerequisites, no exclusions, no alternative named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

marketplace_statsMarketplace StatsB

Marketplace statistics: totals, kinds, domains, peer instances.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about side effects, permissions, or rate limits. The name implies a read-only aggregation, but that is inference, not disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded fragment with no filler and no redundancy. It is terse to the point of being list-like rather than explanatory, which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters, no nested objects, and an output schema present, there is little the description must cover beyond identifying the operation. It is adequate for a simple stats endpoint, though it adds no behavioral context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which is the baseline-4 case. The description lists return categories rather than inputs, so there is nothing further it could usefully say about parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource ('Marketplace statistics') and enumerates the categories returned (totals, kinds, domains, peer instances), so the agent knows the domain. However, it is a noun phrase with no verb and makes no explicit contrast against siblings like marketplace_search or marketplace_export, which an agent might confuse for other read/retrieval operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this tool, no prerequisites, and no alternatives suggested. The agent must infer that this is the aggregation/inspection tool from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

marketplace_subscribeMarketplace SubscribeC

Register a subscription filter.

For MVP this persists the filter locally and is honored by marketplace_pull; production wiring to the relay fan-out is next.

NameRequiredDescriptionDefault
kindYes
tagsNo
domainNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations the description carries the full burden, and it does add genuinely useful honesty: the filter is persisted locally for MVP and relay fan-out is not yet wired. It still omits idempotency, replacement semantics, auth requirements, and whether duplicate filters accumulate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the action front-loaded and zero filler. The implementation-status sentence earns its place by disclosing a real behavioral limitation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, but with no annotations and 0% schema coverage the definition leaves the required 'kind' parameter and the filter's structure entirely undefined. For a subscription tool that gates downstream marketplace_pull behavior, this is under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for three parameters (kind, tags, domain), and the description adds nothing at all about them. The required 'kind' parameter is completely opaque — no allowed values, no explanation of how tags and domain interact with it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Register a subscription filter') and ties it to a sibling that consumes it ('honored by marketplace_pull'). It is clearly distinguishable from marketplace_publish or marketplace_search, though it never explains what a 'filter' is in this domain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use versus when-not guidance and no alternatives are named; the only hint is that marketplace_pull honors the filter. An agent learns the lifecycle context but not the condition under which subscribing is the right call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedmarketplace_export
    • First observedmarketplace_outbox
    • First observedmarketplace_publish
    • First observedmarketplace_pull
    • First observedmarketplace_search
    • First observedmarketplace_stats
    • First observedmarketplace_subscribe

TDQS

B3.3/5.0

Scored across 7 tools

Disambiguation4/5

Each tool targets a distinct marketplace operation: publish, search, subscribe, stats, pull, outbox, and export are clearly separable. Minor potential confusion between marketplace_pull (inbound spool) and marketplace_search (query), and between marketplace_publish and marketplace_outbox, but descriptions clarify the directionality.

Naming Consistency4/5

All tools share the marketplace_ prefix with snake_case, giving a strong predictable pattern. Slight deviation in that stats and outbox are nouns rather than verbs (publish/search/subscribe/pull/export), but this is minor and still readable.

Tool Count5/5

Seven tools is well-scoped for a marketplace server, with each tool covering a distinct facet (publish, discover, subscribe, monitor, ingest, queue, export). No filler or redundancy.

Completeness3/5

Covers the publish/search/subscribe/export lifecycle reasonably, but lacks update/unpublish/delete and a get-single-listing detail operation, leaving no way to modify or remove a published listing. Subscribe is also noted as MVP-only and not yet honored by the relay.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that enables direct AI-to-AI communication through a bulletin board system featuring semantic search, thread management, and cryptographic identity verification. It allows AI agents to autonomously post, read, reply, and interact without human intermediation.
    2
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that enables AI coding agents to communicate, share state, and coordinate work in real time via MCP tools or REST API.
    107 npm
    9
    MIT