Skip to main content
Glama
Prismer-AI
by Prismer-AI

AIエージェントがツールを呼び出しました。その内容を証明できますか?

ほとんどのエージェントスタックは事後にアクションをログ記録しますが、実際に何が送信されたかを検証することはありません。リクエストがリプレイ、改ざん、または偽造された場合、実行側はそれを知る術がありません。

Signetはこれを解決します。各エージェントにEd25519 IDを付与し、すべてのツール呼び出しに署名し、ハッシュチェーン化された監査ログで何が起こったかを記録します。クライアントやサーバーは、信頼する前にリクエストを検証できます。署名に3行、検証に3行。オープンソースです。

Signetが役に立つと感じたら、このリポジトリにスターを付けてより多くのチームに広めてください。

以下のCLIフローから始めて署名の動作を確認し、不正なリクエストの拒否を確認するに進んで、署名なし、改ざん、期限切れ、または宛先不明のリクエストが実行前にサーバーでブロックされる様子をご覧ください。

なぜSignetなのか

Signetは、エージェントのアクションに対して軽量な信頼レイヤーを追加します:

  • 署名: すべてのツール呼び出しをエージェントの暗号鍵で署名

  • 監査: 追記専用のハッシュチェーン化されたローカルログで何が起こったかを記録

  • 検証: ネットワーク不要で、オフラインでアクションレシートを検証

  • 統合: Claude Code、Codex CLI、MCPクライアント/サーバー、Pythonフレームワーク、Vercel AI SDKと統合

Related MCP server: agent-services-mcp

30秒で試す

pip install signet-auth
from signet_auth import SigningAgent

agent = SigningAgent.create("my-agent", owner="team")
receipt = agent.sign("github_create_issue", params={"title": "fix bug"})

assert agent.verify(receipt)
print(receipt.id)

初めての方は、以下の4つのパスのいずれかから始めてください:

パスを選択

  • Claude Code: コーディングエージェントで最速の初回実行に最適。Claude Codeで /plugin install signet@claude-plugins-official を実行してください。5分で署名付きツール呼び出しと ~/.signet/audit/ にローカル監査ログが作成されます。

  • Codex CLI: CodexでのBashツール呼び出しの署名に最適。plugins/codex/~/.codex/plugins/signet にコピーし、1つの PostToolUse フックを追加してください。5分で同じ監査証跡を使用してCodexで署名付きBashアクションが実行可能になります。

  • MCPクライアント: MCPクライアントまたはトランスポートを制御している場合に最適。new SigningTransport(inner, secretKey, "my-agent") でトランスポートをラップしてください。5分で params._meta._signet にレシートを含む署名付き tools/call リクエストが作成されます。

  • MCPサーバー: 実行前に検証を行いたい場合に最適。ツールハンドラー内で verifyRequest(request, {...}) を呼び出してください。5分で実行境界において署名者、鮮度、ターゲットバインディング、ツール/パラメータのチェックが可能になります。

不正なリクエストの拒否を確認する

最短の実行境界デモを実行します:

cd examples/mcp-agent
npm run execution-boundary-demo

デモのソースについては、examples/mcp-agent/demo-execution-boundary.mjsを参照してください。

Signetが求められる場面

  • コーディングエージェント、MCPツール、またはCI自動化のための監査証跡が必要な場合

  • インシデント発生後に、どのアクションをどのアエージェントが要求したかを証明したい場合

  • ホストされたサービスに依存せず、オフラインで検証可能なレシートが必要な場合

  • スタックにプロキシやゲートウェイを追加せずに、署名付きツール呼び出しの証拠が欲しい場合

Signetとは何か、何ではないか

  • Signetはエージェントアクションの証明レイヤーです:署名、監査、検証を行います

  • SignetはSDK、プラグイン、MCPミドルウェアを使用して既存のエージェントスタックに適合するように設計されています

  • Signetはポリシーエンジン、ファイアウォール、またはアクションブロッカーではありません

  • Signetはゲートウェイの代替ではありません。予防および強制ツールを補完するものです

インストール

# CLI
cargo install signet-cli

# Python
pip install signet-auth

# TypeScript (MCP middleware)
npm install @signet-auth/core @signet-auth/mcp

# TypeScript (MCP server verification)
npm install @signet-auth/mcp-server

# TypeScript (Vercel AI SDK middleware)
npm install @signet-auth/vercel-ai

クイックスタート

Claude Codeプラグイン

Claude Codeでのすべてのツール呼び出しを、設定不要で自動署名します:

# Option A: From the official Anthropic plugin marketplace
/plugin install signet@claude-plugins-official

# Option B: Add Signet as a marketplace source, then install
/plugin marketplace add Prismer-AI/signet
/plugin install signet@signet

すべてのツール呼び出しはEd25519で署名され、~/.signet/audit/ のハッシュチェーン化された監査証跡に記録されます。

その他のインストール方法:

# From Git
claude plugin add --from https://github.com/Prismer-AI/signet

# Via signet CLI
signet claude install

Codexプラグイン

Codex CLIでのすべてのBashツール呼び出しを自動署名します:

git clone https://github.com/Prismer-AI/signet.git
cp -r signet/plugins/codex ~/.codex/plugins/signet

次に、~/.codex/hooks.json にフックを追加します:

{
  "hooks": {
    "PostToolUse": [{
      "matcher": "Bash",
      "hooks": [{
        "type": "command",
        "command": "node \"$HOME/.codex/plugins/signet/bin/sign.cjs\"",
        "timeout": 5
      }]
    }]
  }
}

または、オンデマンド署名ツールとしてMCPサーバーを使用します:

codex mcp add signet -- npx @signet-auth/mcp-tools

CLI

# Generate an agent identity
signet identity generate --name my-agent

# Sign an action
signet sign --key my-agent --tool "github_create_issue" \
  --params '{"title":"fix bug"}' --target mcp://github.local

# Verify a receipt
signet verify receipt.json --pubkey my-agent

# Audit recent actions
signet audit --since 24h

# Verify log integrity
signet verify --chain

MCPクライアント統合 (TypeScript)

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
import { generateKeypair } from "@signet-auth/core";
import { SigningTransport } from "@signet-auth/mcp";

// Generate an agent identity
const { secretKey } = generateKeypair();

// Wrap any MCP transport -- all tool calls are now signed
const inner = new StdioClientTransport({ command: "my-mcp-server" });
const transport = new SigningTransport(inner, secretKey, "my-agent");

const client = new Client({ name: "my-agent", version: "1.0" }, {});
await client.connect(transport);

// Every callTool() is now cryptographically signed
const result = await client.callTool({
  name: "echo",
  arguments: { message: "Hello!" },
});

すべての tools/call リクエストには、params._meta._signet に注入された署名付きレシートが含まれます。

MCPサーバー検証

MCPサーバーも制御している場合は、実行前にリクエストを検証します:

import { verifyRequest } from "@signet-auth/mcp-server";

server.setRequestHandler(CallToolRequestSchema, async (request) => {
  const verified = verifyRequest(request, {
    trustedKeys: ["ed25519:..."],
    maxAge: 300,
  });
  if (!verified.ok) return { content: [{ type: "text", text: verified.error }], isError: true };
  console.log(`Verified: ${verified.signerName}`);
  // process tool call...
});

Vercel AI SDK統合

import { generateText } from "ai";
import { generateKeypair } from "@signet-auth/core";
import { createSignetCallbacks } from "@signet-auth/vercel-ai";

const { secretKey } = generateKeypair();
const callbacks = createSignetCallbacks(secretKey, "my-agent");

const result = await generateText({
  model: openai("gpt-4"),
  tools: { myTool },
  ...callbacks,
  prompt: "...",
});

// Every tool call is now signed
console.log(callbacks.receipts);

リファレンスMCPサーバー

このリポジトリには、@signet-auth/mcp-server を使用したサーバーサイド検証を示す最小限のMCPリファレンスサーバーも含まれています。

cd examples/mcp-agent
npm ci
npm run verifier-server

利用可能なツール:

  • inspect_current_requestparams._meta._signet が含まれている場合、現在のMCPツール呼び出しを検証します

  • verify_receipt — 公開鍵に対して生のSignetレシートを検証します

  • verify_request_payload — 合成されたMCP tools/call ペイロードをオフラインで検証します

環境変数:

  • SIGNET_TRUSTED_KEYS — カンマ区切りの ed25519:<base64> 公開鍵

  • SIGNET_REQUIRE_SIGNATUREtrue または false (デフォルトは false)

  • SIGNET_MAX_AGE — レシートの最大有効期間(秒単位、デフォルトは 300

  • SIGNET_EXPECTED_TARGET — オプションの期待される receipt.action.target

スタンドアロンMCP署名サーバー

@signet-auth/mcp-tools は、Signetの署名、検証、コンテンツハッシュ計算をMCPツールとして公開します。MCP互換クライアントにプラグインしてください:

npx @signet-auth/mcp-tools

利用可能なツール:signet_generate_keypair, signet_sign, signet_verify, signet_content_hash

Python (LangChain / CrewAI / AutoGen + 他6種)

pip install signet-auth
from signet_auth import SigningAgent

# Create an agent identity (saved to ~/.signet/keys/)
agent = SigningAgent.create("my-agent", owner="willamhou")

# Sign any tool call -- receipt is auto-appended to audit log
receipt = agent.sign("github_create_issue", params={"title": "fix bug"})

# Verify
assert agent.verify(receipt)

# Query audit log
for record in agent.audit_query(since="24h"):
    print(f"{record.receipt.ts} {record.receipt.action.tool}")

LangChain統合

from signet_auth import SigningAgent
from signet_auth.langchain import SignetCallbackHandler

agent = SigningAgent("my-agent")
handler = SignetCallbackHandler(agent)

# Every tool call is now signed + audited
chain.invoke(input, config={"callbacks": [handler]})

# Async chains supported too
from signet_auth.langchain import AsyncSignetCallbackHandler

CrewAI統合

from signet_auth import SigningAgent
from signet_auth.crewai import install_hooks

agent = SigningAgent("my-agent")
install_hooks(agent)

# All CrewAI tool calls are now globally signed
crew.kickoff()

AutoGen統合

from signet_auth import SigningAgent
from signet_auth.autogen import signed_tool, sign_tools

agent = SigningAgent("my-agent")

# Wrap a single tool
wrapped = signed_tool(tool, agent)

# Or wrap all tools at once
wrapped_tools = sign_tools([tool1, tool2], agent)

LangGraph統合

LangGraphはLangChainのコールバックシステムを使用するため、同じハンドラーが直接機能します:

from signet_auth import SigningAgent
from signet_auth.langgraph import SignetCallbackHandler

agent = SigningAgent("my-agent")
handler = SignetCallbackHandler(agent)

result = graph.invoke(input, config={"callbacks": [handler]})

LlamaIndex統合

from signet_auth import SigningAgent
from signet_auth.llamaindex import install_handler

agent = SigningAgent("my-agent")
handler = install_handler(agent)

# All tool call events are now signed
index = ... # your LlamaIndex setup
response = index.as_query_engine().query("What is Signet?")

# Access receipts
print(handler.receipts)

Pydantic AI統合

from signet_auth import SigningAgent
from signet_auth.pydantic_ai_integration import SignetMiddleware

agent = SigningAgent("my-agent")
middleware = SignetMiddleware(agent)

@middleware.wrap
def my_tool(query: str) -> str:
    return f"result: {query}"

Google ADK統合

from signet_auth import SigningAgent
from signet_auth.google_adk import SignetPlugin

agent = SigningAgent("my-agent")
plugin = SignetPlugin(agent)

# Pass as callback to ADK agent

Smolagents統合

from signet_auth import SigningAgent
from signet_auth.smolagents import signet_step_callback

agent = SigningAgent("my-agent")
callback = signet_step_callback(agent)

bot = CodeAgent(tools=[...], model=model, step_callbacks=[callback])

OpenAI Agents SDK統合

from signet_auth import SigningAgent
from signet_auth.openai_agents import SignetAgentHooks

agent = SigningAgent("my-agent")

oai_agent = Agent(
    name="assistant",
    hooks=SignetAgentHooks(agent),
    tools=[...],
)

注: ツール呼び出しの引数は、フックAPIではまだ利用できません (issue #939)。ツール名のみが署名されます。

低レベルAPI

from signet_auth import generate_keypair, sign, verify, Action

kp = generate_keypair()
action = Action("github_create_issue", params={"title": "fix bug"})
receipt = sign(kp.secret_key, action, "my-agent", "willamhou")
assert verify(receipt, kp.public_key)

双方向レシート (サーバー共同署名)

from signet_auth import generate_keypair, sign, sign_bilateral, verify_bilateral, Action

# Agent signs the tool call
agent_kp = generate_keypair()
action = Action("github_create_issue", params={"title": "fix bug"})
agent_receipt = sign(agent_kp.secret_key, action, "my-agent")

# Server co-signs with the response
server_kp = generate_keypair()
bilateral = sign_bilateral(
    server_kp.secret_key, agent_receipt,
    {"content": [{"type": "text", "text": "issue #42 created"}]},
    "github-server",
)
assert verify_bilateral(bilateral, server_kp.public_key)
assert bilateral.v == 3  # v3 = bilateral receipt

仕組み

Your Agent
    |
    v
SigningTransport (wraps any MCP transport)
    |
    +---> Signs each tool call (Ed25519)
    +---> Appends Action Receipt to local audit log (hash-chained)
    +---> Forwards request to MCP server (unchanged)

エージェント側のみ。MCPサーバーを変更する必要はありません。

アクションレシート

すべてのツール呼び出しは署名付きレシートを生成します:

{
  "v": 1,
  "id": "rec_e7039e7e7714e84f...",
  "action": {
    "tool": "github_create_issue",
    "params": {"title": "fix bug"},
    "params_hash": "sha256:b878192252cb...",
    "target": "mcp://github.local",
    "transport": "stdio"
  },
  "signer": {
    "pubkey": "ed25519:0CRkURt/tc6r...",
    "name": "demo-bot",
    "owner": "willamhou"
  },
  "ts": "2026-03-29T23:24:03.309Z",
  "nonce": "rnd_dcd4e135799393...",
  "sig": "ed25519:6KUohbnSmehP..."
}

署名は、RFC 8785 (JCS) 正規化JSONを使用して、レシート本体全体(アクション + 署名者 + タイムスタンプ + ノンス)をカバーします。フィールドを1つでも変更すると署名は無効になります。

CLIコマンド

コマンド

説明

signet identity generate --name <n>

Ed25519 IDを生成(デフォルトで暗号化)

signet identity generate --unencrypted

暗号化なしで生成(CI用)

signet identity list

すべてのIDを一覧表示

signet identity export --name <n>

公開鍵をJSONとしてエクスポート

signet sign --key <n> --tool <t> --params <json> --target <uri>

アクションに署名

signet sign --hash-only

パラメータハッシュのみを保存(生のパラメータは保存しない)

signet sign --output <file>

stdoutではなくファイルにレシートを書き込み

signet sign --no-log

監査ログへの追記をスキップ

signet verify <receipt.json> --pubkey <name>

レシートの署名を検証

signet verify --chain

監査ログのハッシュチェーンの整合性を検証

signet audit

最近のアクションを一覧表示

signet audit --since <duration>

時間でフィルタリング(例: 24h, 7d)

`signet audit --tool <

Available Tools

4 tools
signet_content_hashA

Compute SHA-256 hash of canonical JSON (RFC 8785 JCS). Accepts any JSON value.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesJSON content to hash (object, array, string, number, boolean, or null)

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It transparently states the computation (SHA-256 hash) and the canonicalization method (RFC 8785 JCS). It discloses no side effects or permissions needed, which is acceptable for a pure computation tool. However, it could mention that the output is a hex-encoded string.

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 extremely concise, consisting of two sentences. It front-loads the action ('Compute SHA-256 hash') and the specification ('RFC 8785 JCS'). Every word contributes meaningfully without redundancy.

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 low complexity (1 parameter, no nested objects, no output schema), the description is mostly complete. It covers the input and the core operation. However, it could mention that the return value is a hex-encoded hash string, as this is not obvious from the description alone.

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

Parameters3/5

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

The input schema has 100% description coverage, so the baseline is 3. The description adds 'any JSON value' which is already in the schema's parameter description. No additional semantics are provided beyond what the schema already conveys.

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

Purpose5/5

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

The description clearly states 'Compute SHA-256 hash of canonical JSON (RFC 8785 JCS). Accepts any JSON value.' It specifies the algorithm (SHA-256), the canonicalization standard (JCS), and the accepted input types. This distinctly sets it apart from sibling tools like signet_sign and signet_verify.

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?

While the tool's purpose is clear, the description does not provide guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or contexts where hashing is preferred over signing/verification. Usage is implied but not explicitly guided.

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

signet_generate_keypairA

Generate a new Ed25519 keypair. Returns only the public key. Use Signet CLI to manage secret keys securely.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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

Discloses that the secret key is not returned and points to CLI for secure management, providing critical behavioral context beyond the schema. No annotations present, so description carries full burden.

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?

Two concise sentences with no redundancy, front-loading the key action and outcome.

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?

Covers purpose and output limitation. Lacks detail on public key format or usage, but adequate for a simple key generation tool with no output schema.

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?

No parameters exist in schema; description adds no parameter info but baseline is 4 for zero-parameter tools. Sufficient for the tool's simplicity.

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

Purpose5/5

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

Clearly states 'Generate a new Ed25519 keypair' and specifies it returns only the public key, distinguishing it from siblings like sign, verify, and content_hash.

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

Usage Guidelines4/5

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

Explicitly advises using Signet CLI for secret key management, giving implicit guidance on when not to use this tool. Lacks explicit alternatives but context is clear.

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

signet_signA

Sign an action (tool call) with an Ed25519 key, producing a cryptographic receipt. Uses SIGNET_SECRET_KEY env var if set, otherwise requires secret_key argument.

ParametersJSON Schema
NameRequiredDescriptionDefault
secret_keyNoBase64 secret key (optional if SIGNET_SECRET_KEY env is set)
toolYesTool name being called
paramsNoTool parameters (any JSON value)
signer_nameYesAgent name
signer_ownerNoAgent owner (optional)
targetNoTarget MCP server URI

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description must cover behavioral traits. It mentions key sources but omits edge cases (e.g., both env and arg provided), error behavior, and the receipt format, leaving significant gaps.

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?

Single sentence, front-loaded with verb and resource, no wasted words.

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?

With 6 parameters and no output schema, the description explains the signing action but omits the return value (cryptographic receipt structure), which is needed for a complete understanding.

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 100% (baseline 3). The description adds value by explaining the secret_key's optionality via env var fallback, which is not fully captured in the schema description alone.

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

Purpose5/5

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

The description uses a specific verb 'Sign' and resource 'action (tool call)' with Ed25519 key, clearly distinguishing it from sibling tools like verification or key generation.

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 explains two key sourcing methods (env var vs argument) but lacks explicit guidance on when to use signing versus other tools or prerequisites like key availability.

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

signet_verifyA

Verify a Signet receipt signature. Returns {valid: true/false}. Accepts both bare base64 and ed25519:-prefixed public keys.

ParametersJSON Schema
NameRequiredDescriptionDefault
receipt_jsonYesReceipt JSON string
public_keyYesPublic key (base64 or ed25519:base64)

TDQS

A4.2/5.0
Behavior4/5

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

Despite lacking annotations, the description discloses the return format and key format flexibility, providing sufficient behavioral context for a read-only verification operation.

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 succinct, with two sentences that front-load the primary purpose and add key detail without unnecessary words.

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?

For a simple verification tool with no output schema, the description covers the return structure and key parameter details, making it sufficiently complete for agent use.

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 input schema has 100% description coverage for both parameters, and the description adds value by explaining the accepted public key formats (bare base64 or ed25519:base64), enriching the schema's simple type definition.

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

Purpose5/5

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

The description clearly states the tool verifies a Signet receipt signature, explicitly lists the return value as {valid: true/false}, and specifies accepted key formats, distinguishing it from sibling tools that deal with content hashing, key generation, and signing.

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 for verifying signatures but does not provide explicit guidance on when to use this tool vs siblings, nor does it mention prerequisites or error conditions.

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. 4 tool updatesv0.10.0
    • Addedsignet_content_hash
    • Addedsignet_generate_keypair
    • Addedsignet_sign
    • Addedsignet_verify

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool performs a distinct cryptographic operation: hashing, key generation, signing, and verification. No overlap in purpose reduces ambiguity.

Naming Consistency4/5

Tools follow a 'signet_' prefix pattern. Most use verb_noun (generate_keypair, sign, verify), but 'content_hash' is noun_noun. Minor inconsistency but still clear.

Tool Count5/5

Four tools is well-scoped for a cryptographic signing server. Each tool is essential, covering the core workflow without bloat.

Completeness5/5

The tool set covers the full signing lifecycle: input representation (hash), key generation, signing, and verification. No obvious gaps for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • 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
  • A
    license
    A
    quality
    F
    maintenance
    A thin MCP server that wraps provenance-receipts and quality-gate services as tools, enabling AI agents to certify content origin and score quality via Ed25519-signed receipts.
    5
    55 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Local MCP server that signs and records agent actions into a tamper-evident log using Ed25519 keys for frictionless integration with Touchstone.
    24 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    A sovereign, MIT-licensed MCP server for professional-service workflows, providing offline-capable, Ed25519-signed tools for autonomous agents and human developers.
    MIT