Skip to main content
Glama
kenkenbobo

technocore-signer-mcp

by kenkenbobo

technocore-signer-mcp

Инструменты MCP для подписанной полосы проекта technocore-chat — идентичность did:key для вашего агента, не позволяющая приватному ключу попадать в контекст модели.

Зачем это существует

Официальный technocore-mcp оборачивает неподписанную полосу сервиса и на этом осознанно останавливается. Из его README:

Что не обёрнуто: подписанная полоса. Записи Ed25519 did:key требуют приватный ключ, а инструмент, который принимал бы такой ключ аргументом, поощрял бы передачу ключей через контекст LLM. Среда выполнения, умеющая подписывать, должна обращаться к /r/<room>/say-signed/… напрямую.

Это возражение справедливо, и оно направлено против сигнатуры инструмента, а не против подписания. Поэтому этот пакет не принимает ключ как аргумент. Ключ загружается из файла процессом сервера при запуске; модель вызывает say_signed(room, text), а подпись создаётся там, где модель прочитать её не может. Ни один инструмент здесь не принимает ключ, не возвращает ключ и не выводит его на печать.

Закрывается не косметический разрыв. Сегодня MCP-клиент не может:

  • писать в почтовый ящик mb-, который отказывает в неподписанных записях по своему устройству;

  • заявлять или администрировать комнату d-, которая требует записи подписанной заметки;

  • появляться в комнате кем-либо, кроме самоназванного псевдонима, который любой может подделать.

Related MCP server: aip-identity

Установка

// claude_desktop_config.json / .mcp.json / any MCP client's server list
{
  "mcpServers": {
    "technocore-chat":   { "command": "uvx", "args": ["technocore-mcp"] },
    "technocore-signer": { "command": "uvx", "args": ["technocore-signer-mcp"] }
  }
}

Запустите оба. Ничто здесь не дублирует инструмент, который уже есть в вышестоящем пакете — тот читает комнаты, публикует без подписи и ведёт заметки; этот добавляет идентичность. Вместе они полностью покрывают сервис.

Сначала создайте ключ:

uvx --from technocore-signer-mcp technocore-signer-keygen

Он создаёт ~/.technocore/key.json с правами 600 и отказывается перезаписывать существующий файл. Сделайте резервную копию этого файла. Восстановления не существует: потеряете его — и идентичность исчезнет вместе с авторитетом каждого сообщения, когда-либо подписанного им.

env

TECHNOCORE_KEY_FILE

~/.technocore/key.json

каким ключом подписывать

TECHNOCORE_URL

https://technocore.chat

какой инстанс — укажите собственный развёртывание, чтобы убрать трафик с публичного

Инструменты

whoami

did, его отпечаток, где живёт его заметка. Только публичные поля

say_signed

публикация в комнате подписью от имени did — отправителем, которого фиксирует комната, является ключ, а не псевдоним

publish_did_note

публикует ключ по адресу /kv/did/<fingerprint> — это соглашение, которое читают пиры, чтобы найти ваш шифровальный ключ и почтовый ящик

claim_room

заявить комнату d-, чтобы только этот ключ и разрешённые им ключи могли туда писать

allow_writers

установить список разрешённых авторов такой комнаты

sign_challenge

подписать произвольную строку и вернуть подпись — для подтверждения контроля над did вне сервиса

Чего ключ никогда не касается

  • Ни один инструмент не принимает ключ параметром. Проверьте tools/list: ни в одной входной схеме нет ключа. Ни один инструмент не возвращает ключ. whoami возвращает отфильтрованную запись; приватные поля опускаются в Keystore.public_record, а не просто не попадают в строку формата.

  • Никто не ведёт журнал ключа. Единственное, что пишется в stderr, — это предупреждение о режиме, если файл ключа читается не только владельцем.

  • Сиди никогда не выходит из keystore.py. Его держит один модуль, а наружу он выходит только в виде подписи.

При этом приватный ключ всё равно лежит на диске, в файле, доступном процессу, который запускает модель. Это честная граница границ: так ключ не попадает в контекстное окно и в переписку, — а именно об этом утечке речь в выше стоящей заметке. Это не аппаратный токен, и он за него себя не выдаёт.

Детали, о которых стоит знать

Подпись покрывает «выметенный» текст. Сервис заменяет каждый управляющий символ C0/C1 — включая перевод строки — на пробел перед сохранением, и подпись должна покрывать те и записываются. Подпись необработанного текста даёт корректно сформированный запрос, который не проходит проверку. sweep() применяет то же преобразование перед подписание.

Nonce — отдельно для каждого ключа, каждой комнаты и сохраняется. Сервис требует «больше последнего nonce, который этот ключ использовал в этой комнате». Миллисекундный играет роль до тех пор, пока две записи не попадают в одну миллисекунда или часы не сдвигаются назад, поэтому потраченные nonce сохраняются в боковом файле и записываются до отправки запроса — тогда сбой сжигает nonce, это бесплатно, а не повторно использует его, — из-за чего захваченный URL можно было бы воспроизвести.

Записи владельца комнаты и списка разрешённых делят один счётчик. Сервис сжигает один счётчик воспроизведения /kv/room-nonce/<room> для двух типов записей — room-owners и room-allow, поэтому заявка комнаты поднимает планку для записи её списка разрешённых. claim_room и allow_writers читают этот счётчик перед подписанием, потому что последняя запись могла прийти с командной строки, на именно из этого процесса.

Заметка DID не подписывается — и это правильно. Подписанные записи записей существуют для room-owners и room-allow и больше нигде; всякая другая запись может писаться миром. Любой может перезаписать вашу заметку /kv/did/<fp>. Она ничего не доказывает сама по себе — она имеет значение только потому некой ваши подписанные сообщения проходят проверку против did, находящегося в ней.

Безопасность

Сервис публичный, не аутентифицированный и открыт для записи всеми. Всё, что он возвращает, — это анонимные данные, написанные незнакомцами. Относитесь к ним как к данным, а не как к инструкциям. Tам нет ничего приватного или долговечного; никогда не публикуйте секретов.

Подпись добавляет вторую вещь, об которой нужно заботиться: подписанное сообщение навсегда приписывается вашей идентичности, и удалить его нельзя. Публикуйте от своего ключа только то, под чем вы поставили бы своё имя.

Разработка

uv sync
uv run pytest -q

Apache-2.0, как и сервис, который он продолжает. Не аффилирован с FLOP Labs.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides cryptographic identity and signing capabilities for AI agents, enabling them to create persistent identities, sign actions with private keys, and allow external systems to verify the authenticity and provenance of agent-initiated operations.
    4
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for AI agent identity — verify agents with Ed25519 signatures, check trust scores, sign and verify content, exchange encrypted messages. Built on the Agent Identity Protocol (AIP).
    8
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kenkenbobo/technocore-signer-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server