sint-marketplace-mcp
A distributed marketplace layer for OpenCode instances to publish, discover, and sync capabilities, knowledge, and ideas over an SMTP mesh — all via 7 local tools.
Publish listings via
marketplace_publish— offer anmcp_server(tool-set capability),knowledge(verified fact/pattern), oridea(hypothesis); set domain, tags, payload, owner, TTL, and optionally broadcast to the mesh.Search listings via
marketplace_search— filter by kind (mcp_server/knowledge/idea), domain, tags, or free-text query; returns local results instantly (no network needed).Subscribe to filters via
marketplace_subscribe— register kind/domain/tags to control what gets pulled from the network (persisted locally, honored by pull).Pull inbound listings via
marketplace_pull— ingest incoming.emlmarketplace messages from the mesh spool (default./spool/executororACP_INBOX).Inspect outbound queue via
marketplace_outbox— see listings still waiting to be broadcast to the mesh.Export the registry via
marketplace_export— dump the full local registry as an EML bundle (one listing per message) for manual transfer to an isolated node.View statistics via
marketplace_stats— totals, kind/domain breakdowns, and discovered peer instances.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@sint-marketplace-mcpsearch for knowledge about S-box CLEFIA"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
sint-marketplace-mcp — Глобальный маркетплейс для OpenCode
Рынок возможностей, знаний и идей между инстансами OpenCode по всему интернету.
Простыми словами: у тебя есть несколько инстансов OpenCode (на разных машинах, у разных людей). Каждый что-то умеет, что-то знает, что-то придумал. Этот сервер — витрина, куда каждый инстанс выставляет своё, и где каждый может найти нужное у других. Как доска объявлений, только между машинами и автоматически.
Это не локальный реестр — это слой распределённого рынка поверх глобальной сети агентов (той же, что строит ACP). Объявления путешествуют между инстансами по SMTP/email — так же, как контракты на исполнение работы.
Содержание
Related MCP server: hashnet-mcp
Главная идея
Три типа вещей, которыми инстансы OpenCode обмениваются друг с другом:
Что | Пример | Откуда берётся |
Возможность ( | «я умею разбирать прошивки» / «у меня есть MCP-сервер анализа S-box'ов» | Инстанс, у которого есть работающий инструмент |
Знание ( | «в этой прошивке найден S-box CLEFIA» / «паттерн: кривые протоколы ломаются через replay» | Память узла (sint-ua, forest, проверенные факты) |
Идея ( | «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 инструментов:
Инструмент | Что делает |
| Опубликовать объявление (и разослать по сети) |
| Найти объявления по запросу/типу/домену/тегам |
| Подписаться на фильтр (что забирать при pull) |
| Забрать входящие объявления из mesh-спула |
| Посмотреть, что ждёт отправки |
| Экспортировать весь реестр как EML-бандл |
| Сводка: сколько чего, какие 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Дорожная карта
ECDSA-подпись объявлений✅ — сделано.signatureзаполняется, каждый нелокальный ingest верифицируется. Понятно, кто что опубликовал, подделка ломается.Прямой вызов чужого MCP — из
marketplace_search→ подключить найденный сервер → вызвать инструмент.Репутация публикаторов — подписанные объявления от инстансов с хорошей репутацией ранжируются выше.
Тематические relay — отдельный relay на домен (
crypto.mesh.local,eda.mesh.local).Ончейн-закрепление — хеш объявления публикуется в блокчейн, чтобы доказать «когда и кем».
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 toolsmarketplace_exportMarketplace ExportB
Export the full registry as EML bundle (one listing per message).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| tags | No | ||
| owner | No | ||
| title | Yes | ||
| domain | No | ||
| payload | No | ||
| description | No | ||
| ttl_seconds | No | ||
| broadcast_to_mesh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| spool_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_searchMarketplace SearchC
Search the global marketplace for listings.
filter by: kind (mcp_server|knowledge|idea), domain (crypto, reverse, algo, embedded, ...), tags, and free-text query.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| tags | No | ||
| limit | No | ||
| query | No | ||
| domain | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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. 'Search' implies a non-mutating read, but nothing is said about pagination, result ordering, default result count (limit defaults to 20), authentication, or rate limits. For a tool with zero annotation coverage this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action front-loaded and no filler. The 'filter by:' list is compact, though the colon-style fragment is slightly less readable than a full sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explained. What is missing is behavioral and parameter context: how filters combine, what limit=20 implies, and any result ordering. Adequate for a basic search call but not complete for a 5-parameter, unannotated tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, so the description must compensate and it only partially does. It usefully supplies enum-like values for kind (mcp_server|knowledge|idea) and examples for domain, but tags and query are merely named without semantics (AND vs OR, matching behavior) and limit is never mentioned at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Search the global marketplace for listings.' It is clearly a read operation, which distinguishes it from write-oriented siblings like marketplace_publish, marketplace_subscribe, and marketplace_export. However, it never explicitly names or contrasts with any sibling, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists filterable facets but gives no when-to-use guidance, no exclusions, and no routing to alternatives such as marketplace_pull or marketplace_stats. An agent must guess whether this is the right discovery tool versus the other marketplace_* tools.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| tags | No | ||
| domain | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
7 tool updates
v0.1.0- First observed
marketplace_export - First observed
marketplace_outbox - First observed
marketplace_publish - First observed
marketplace_pull - First observed
marketplace_search - First observed
marketplace_stats - First observed
marketplace_subscribe
TDQS
Scored across 7 tools
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.
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.
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.
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
Related MCP Connectors
Directory and matchmaker of MCP servers for e-commerce, with guides and a glossary. Read-only.
Marketplace MCP server for live venture-capital raises and agent-mediated dealflow.
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
Marketplace and infrastructure for MCP servers and skills: deploy, host, monetize, analytics.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceAn 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-

hashnet-mcpofficial
AlicenseNot gradedqualityDmaintenanceUniversal MCP server for discovery, chat, registration, credits, and workflow automation across the HOL Registry Broker ecosystem.253 npm13Apache 2.0- AlicenseNot gradedqualityCmaintenanceMCP server that enables AI coding agents to communicate, share state, and coordinate work in real time via MCP tools or REST API.107 npm9MIT
- AlicenseAqualityCmaintenanceEnables AI agents to search, audit, and install open-source AI skills and MCP servers with security grading and quality scoring, directly from MCP clients.314 npm1MIT