Skip to main content
Glama
sint-marketplace-mcp
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).

Inputs: no named parameters. Returns: result

marketplace_outboxMarketplace OutboxA

List listings queued for mesh broadcast (unsent).

Inputs: no named parameters. Returns: result

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.

Inputs: kind (required), title (required), tags, owner, +5 more. Returns: object

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).

Inputs: spool_dir. Returns: object

marketplace_statsMarketplace StatsB

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

Inputs: no named parameters. Returns: object

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.

Inputs: kind (required), tags, domain. Returns: object

Tool Schema Changelog

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

Loading tool schema changelog…

    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 recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      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.
      246 npm
      9
      MIT