mcpField
N
nostr-ops-mcp

nostr-ops-mcp

ローカル
github.com/llmops-proソーシャルメディア019 週間前に更新

nostr-ops-mcp について

nostr-ops-mcpは、AIエージェント向けにNOSTRの投稿、検索、IDのエンコード、暗号化DMを提供するMCPサーバーです。イベント種別や宛先の許可リスト、レート制限、任意の確認、監査ログで書き込みを制御します。

主な機能

  1. 01NOSTRイベントの投稿と検索
  2. 02NIP-19のエンコードとデコード
  3. 03NIP-05 IDの検証
  4. 04暗号化DMの送受信
  5. 05書き込み許可リストとレート制限
  6. 06構造化監査ログ

活用シーン

  1. 01NOSTRノートの定期投稿
  2. 02イベント検索とプロフィール取得
  3. 03DMの監視と注文対応
  4. 04IDを使った投稿の制限

MCP 対応

MCPサーバーとして、NOSTRの署名、投稿、検索、エンコード、DM用ツールをMCPクライアントに提供します。許可リスト、レート制限、任意の確認、監査ログで書き込みを制御できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"llmops-pro-nostr-ops": {
"command": "npx",
"args": [
"-y",
"nostr-ops-mcp"
],
"env": {
"NOSTR_RELAYS": "<NOSTR_RELAYS>",
"NOSTR_NIP46_URI": "<NOSTR_NIP46_URI>",
"NOSTR_PRIVATE_KEY": "<NOSTR_PRIVATE_KEY>",
"NOSTR_ALLOWED_KINDS": "<NOSTR_ALLOWED_KINDS>"
}
}
}
}
起動コマンドnpx -y nostr-ops-mcp
設定が必要な環境変数
NOSTR_RELAYSComma-separated wss:// relay URLs
NOSTR_NIP46_URIシークレットNIP-46 bunker URI (preferred signer; keeps the nsec off this machine)
NOSTR_PRIVATE_KEYシークレットnsec private key (alternative to NOSTR_NIP46_URI; read-only mode if neither is set)
NOSTR_ALLOWED_KINDSComma-separated event kinds the server may publish (required when a signer is configured)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmnostr-ops-mcp0.2.3

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

nostr-ops-mcp

LLM エージェントのための NOSTR アイデンティティ。 NOSTR プロトコルの基本機能(署名、公開、クエリ、NIP-19 のエンコード/デコード、NIP-05 の検索、暗号化 DM)を、エージェントが呼び出せるツールとして提供する MCP サーバーです。Claude Desktop、Claude Code、Cursor、その他 MCP に対応したクライアントに追加できます。生の nsec ではなく、NIP-46 のバンカーキーをエージェントに渡します。kind の許可リストを設定し、管理可能な制限の範囲内でエージェントに代わりに投稿させることができます。

v0.1 — 読み取り、書き込み、DM の全機能に対応。 16 個のツールを、多層防御の安全機能で保護しています。kind の許可リスト(デフォルトですべて拒否)、受信者の許可リスト、レート制限、任意で有効化できる二段階確認、構造化監査ログを備えています。nsec(開発用)と NIP-46 バンカー(本番用)の両方をサポートします。


できること

  • npub で kind:1 のノートを投稿するボット — 日次サマリー、予約投稿、受信イベントへのプログラムによるリアクション。
  • NOSTR のセールスエージェント — marketplace-mcp と組み合わせ、同じアイデンティティで NIP-15 の出店情報と商品を公開します。
  • プロフィール管理 — kind:0 に対する nostr_publish_metadata(プロフィールの上書きは、古いリレーデータがなければ元に戻せないため、必ず確認が求められます)。
  • DM を活用したワークフロー — 受信 DM を監視し(nostr_list_dms)、注文を復号して nostr_send_dm で返信するストアフロントエージェント。デフォルトでは無効で、NOSTR_DM_TOOLS_ENABLED を設定すると有効になります。
  • サーバーをまたいだアイデンティティの共有 — 同じ NIP-46 バンカー URI を nostr-ops-mcp と marketplace-mcp で共有できます。1 つのキー、1 つのアイデンティティ、2 つの専門的なツール群です。

本番環境で使用できる理由の要となるのが、この安全機能群です。エージェントがあなたになりすまして投稿できるキーを持っている場合、制約がなければ数秒であなたの評判を損なう可能性があります。このサーバーは、署名を許可する kind、レート、任意の二段階確認を管理し、すべての呼び出しを構造化監査ログに記録します。


16 個のツール

読み取り専用 — ローカル(ネットワーク不要、署名者不要)
ツール用途
nostr_decodeNIP-19 文字列(npub / nsec / note / nevent / naddr / nprofile)を解析します。nsec のデコードは NOSTR_ALLOW_NSEC_DECODE=true の場合に限り許可されます。
nostr_encode生のフィールドから NIP-19 文字列を作成します。nsec のエンコードには意図的に対応していません。
読み取り専用 — ネットワーク(クエリ/プロフィール/nip05 には署名者不要)
ツール用途
nostr_get_pubkey署名者の公開鍵と npub を返します。署名者が設定されていない場合は、明確なエラーを返します。
nostr_list_relays設定済みリレープールと、各リレーの接続状態を返します。
nostr_query_events中核となるツールです。NIP-01 フィルター:kinds、authors、e_tag / p_tag / d_tag / t_tag のタグフィルター(内部では NIP-01 の #e / #p / #d / #t に対応づけられます。ホスト型 API スキーマとの互換性のため v0.2.0 で名称を変更)、since / until / limit。
nostr_get_profile公開鍵または npub を指定して kind:0 のメタデータを取得し、解析します。解析済みの JSON コンテンツ(name、about、picture、nip05、lud16 など)を返します。
nostr_verify_nip05/.well-known/nostr.json 経由で name@domain を公開鍵に解決します。検証モード用の expected_pubkey を指定できます。
書き込み(署名者が必要。KindAllowlist、RateLimiter、任意の確認による制限あり)
ツール用途
nostr_publish_event基本となる書き込みツールです。kind / content / tags を渡します。
nostr_publish_text_notekind:1 用の便利なツールです。返信/メンション/ハッシュタグのショートカットから NIP-10 タグを自動で組み立てます。
nostr_publish_metadatakind:0 のプロフィール用です。プロフィールの上書きは取り扱いに慎重さを要するため、NOSTR_REQUIRE_CONFIRM の設定にかかわらず、必ず二段階確認を求めます。
nostr_publish_addressable_eventkind 30000〜39999(置き換え可能)用です。d タグを自動設定します。ブリッジの marketplace-mcp は NIP-15 にこれを使用します。
nostr_delete_eventNIP-09 の kind:5 によるソフト削除です。ベストエフォートで実行され、リレーが無視する場合があります。
nostr_confirm_publishトークンで制限された投稿を実行します。トークンは 1 回限りで、安全性チェックのパイプラインも再実行されます。
DM(高リスク:デフォルトでは無効。NOSTR_DM_TOOLS_ENABLED=true で有効化)
ツール目的
nostr_send_dmデフォルトで NIP-44 暗号化を使用する NIP-04(kind:4)DMです。レガシー互換性のため、NIP-04 もサポートしています。NOSTR_DM_ALLOWLIST で制限されます。
nostr_list_dms相手とのスレッドを取得して復号します。イベントごとに NIP-44 と NIP-04 を自動判定します。
nostr_decrypt_dm単一の暗号文を復号します(別の場所からすでにイベントを取得している場合に使用します)。

NIP-17 のシール済み/ギフトラップ DM はまだサポートされていません。噂イベントとギフトラップによって複雑さが大幅に増すため、今後の v0.2 に延期されています。


要件

  • Node 20+
  • NOSTR 署名者 — 強く推奨: Amber(Android)、nsec.app(Web)、またはその他の NIP-46 実装による NIP-46 バンカー URI。レガシー方式: .env 内の生の nsec。ディスク上に nsec が検出されると、サーバーは起動時に stderr へ警告を記録します。

インストール

# From npm (once published)
npx -y nostr-ops-mcp

# From source
git clone <repo>
cd nostr-ops-mcp
corepack enable pnpm
pnpm install
pnpm build

設定

cp .env.example .env
# edit .env: set NOSTR_NIP46_URI (recommended) OR NOSTR_PRIVATE_KEY
#           set NOSTR_RELAYS (comma-separated wss://)
#           set NOSTR_ALLOWED_KINDS (required when a signer is configured)

サーバーは、このバイナリ自身のディレクトリ(dist/ と同じ場所)から .env を自動的に読み込みます。複数の MCP サーバーを同じ Claude Code セッションで実行したときに環境変数が競合しないよう、意図的に cwd からは読み込みません。

必須
変数目的
NOSTR_RELAYSカンマ区切りの wss:// リレー。空の場合、サーバーは起動を拒否します。
NOSTR_ALLOWED_KINDSサーバーによる署名を許可するイベント種別番号のカンマ区切りリスト。署名者を設定する場合は必須です。例:テキストノートと NIP-15 マーケットプレイスの場合は 1,30017,30018。デフォルトでは、kind:0(プロフィール)と kind:5(削除)は省かれます。どちらも誤用されやすいためです。
署名者 — 最大 1 つまで指定
変数目的
NOSTR_NIP46_URIAmber/nsec.app/Alby Account/その他の NIP-46 バンカーから取得した bunker://<pubkey>?relay=...&secret=...。推奨です。
NOSTR_PRIVATE_KEY生の nsec1...。開発用/レガシー用のみです。サーバーは起動時に警告します。
任意の安全設定
変数デフォルト目的
NOSTR_READ_ONLYfalse読み取り専用を強制し、すべての書き込みツールを無効にします。
NOSTR_DM_TOOLS_ENABLEDfalsesend_dm/list_dms/decrypt_dm をオプトインで有効にします。
NOSTR_DM_ALLOWLIST未設定DM の宛先として許可する 16 進数の公開鍵。空の場合、NOSTR_DM_TOOLS_ENABLED のみで制御します。
NOSTR_REQUIRE_CONFIRMfalse2 段階確認を有効にします。書き込みツールがトークンを返し、nostr_confirm_publish が実行します。
NOSTR_MAX_EVENTS_PER_MINUTE10書き込みに対する直近 60 秒間のレート制限です。
NOSTR_MAX_DMS_PER_MINUTE5DM に対する同様のレート制限です。
NOSTR_ALLOW_NSEC_DECODEfalsenostr_decode が生の秘密鍵データを返すことを許可します。本当に必要な場合を除き、有効にしないでください。
NOSTR_LOG_PATH./nostr-mcp.logサーバーログのパスです。
NOSTR_AUDIT_PATH./nostr-mcp-audit.log構造化監査ログです(ツール呼び出しごとに JSON を 1 行記録します)。

MCP クライアントに接続

Claude Code(プロジェクト単位)
claude mcp add nostr-ops -s project node "$(pwd)/dist/index.js"
Claude Desktop/Cursor/その他のクライアント
{
  "mcpServers": {
    "nostr-ops": {
      "command": "npx",
      "args": ["-y", "nostr-ops-mcp"],
      "env": {}
    }
  }
}

サーバーは自身の .env を読み込むため、クライアント設定の env ブロックは空のままにしてください。コミットするファイルにはシークレットを含めないでください。


安全モデル

すべての書き込みツールは、次の順序でパイプラインを実行します。

  1. NOSTR_READ_ONLY ゲート — 即座に拒否します。
  2. 署名者の有無 — nsec も NIP-46 URI も設定されていない場合は拒否します。
  3. KindAllowlist — イベントの kind が NOSTR_ALLOWED_KINDS に含まれていない場合は拒否します。
  4. RateLimiter — 直近 60 秒間の events バケットが上限に達している場合は拒否します。
  5. 確認ゲート — NOSTR_REQUIRE_CONFIRM=true の場合(または publish_metadata のように常に確認が必要なツールの場合)、署名する代わりに 16 バイトの 16 進数トークンを返します。
  6. 署名と公開 — NDK 経由で実行します。署名者とのハンドシェイクは初回使用時に遅延実行されます(bunker とのハンドシェイクが非同期である NIP-46 では特に重要です)。
  7. 監査ログ — 試行ごとに追記専用の JSON 行を記録します(成功/ブロック/エラー)。

DM ツールには、さらに 3 つのチェックが加わります。NOSTR_DM_TOOLS_ENABLED、DmAllowlist(受信者ごと)、および独立した dms レートバケットです。

安全性の最後の砦は署名者です。 NIP-46 を使用している場合、bunker はあらゆる署名リクエストを拒否できます。これが最も強力な安全境界です。このサーバーのチェックは、その上に重ねる多重の保護策です。

呼び出しが実際に成功したことを確認する
tail -n 5 nostr-mcp-audit.log

公開成功時:{"ts":"...","tool":"nostr_publish_text_note","outcome":"ok","result":{"event_id":"...","relays_accepted":[...]}}。ブロック時やエラー時の行も同様の構造です。監査ログは意図的に追記専用です。運用上の衛生管理の一環として、定期的にローテーションしてください。


テスト

pnpm typecheck   # tsc --noEmit
pnpm test        # 13 vitest cases (KindAllowlist, RateLimiter, nip19 roundtrip)
pnpm build       # dist/index.js (~58 KB ESM bundle)

ライブリレーを使ったエンドツーエンドテストでは、使い捨ての nsec と公開リレーをいくつか(damus.io、nos.lol)設定し、簡単なループを実行します。nostr_publish_text_note → nostr_query_events の順に呼び出し、ノートが往復できたことを確認します。nostr_send_dm → nostr_list_dms のループでは、DM の経路を検証できます(自分宛てに DM を送れば、クローズドループで確認できます)。


関連サーバー

  • nwc-mcp — NWC 経由の Lightning ウォレットです。これらを組み合わせると、sats を使う NOSTR エージェントを構築できます。
  • marketplace-mcp — NIP-15 マーケットプレイスでの公開(Shopstr 互換)を行います。このサーバーと同じ署名者設定を使用します。

ライセンス

MIT — LICENSE を参照してください。

お問い合わせ/問題の報告

LLMOps.Pro が開発しました。

  • NOSTR: npub1hdg932jvwc3jdvkqywgqv0ue4nn60exrf92asy8mtazt3hjg7d2s2yw0nw — フォロー、DM、zap をお願いします。
  • Lightning アドレス: [email protected] — サポートへの zap や、「役に立った」というチップはこちらへ。
  • バグ報告/機能リクエスト: GitHub の issue を作成してください(リンクは後日追加予定です)。
  • セキュリティ上の問題: 公開 issue を作成する前に、NOSTR の DM で非公開に報告してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。