signet
Ihr KI-Agent hat gerade ein Tool aufgerufen. Können Sie beweisen, was er getan hat?
Die meisten Agenten-Stacks protokollieren Aktionen im Nachhinein, überprüfen aber nie, was tatsächlich gesendet wurde. Wenn eine Anfrage wiederholt, manipuliert oder gefälscht wird, hat die Ausführungsseite keine Möglichkeit, dies zu erkennen.
Signet behebt dies: Jeder Agent erhält eine Ed25519-Identität, jeder Tool-Aufruf wird signiert, ein Hash-verkettetes Audit-Log zeichnet auf, was passiert ist, und Clients oder Server können die Anfrage überprüfen, bevor sie ihr vertrauen. 3 Zeilen zum Signieren. 3 Zeilen zum Überprüfen. Open Source.
Wenn Signet für Sie nützlich ist, geben Sie diesem Repo einen Stern, damit mehr Teams es finden können.
Beginnen Sie mit dem CLI-Ablauf unten, um das Signieren in Aktion zu sehen, und springen Sie dann zu Siehe, wie fehlerhafte Anfragen abgelehnt werden, um zu beobachten, wie der Server unsignierte, manipulierte, veraltete oder falsch adressierte Anfragen blockiert, bevor sie ausgeführt werden.
Warum Signet
Signet fügt eine leichtgewichtige Vertrauensebene für Agenten-Aktionen hinzu:
Signieren Sie jeden Tool-Aufruf mit dem kryptografischen Schlüssel des Agenten
Auditieren Sie, was passiert ist, mit einem nur anhängbaren, Hash-verketteten lokalen Log
Überprüfen Sie jeden Aktionsbeleg offline, kein Netzwerk erforderlich
Integrieren Sie es mit Claude Code, Codex CLI, MCP-Clients und -Servern, Python-Frameworks und dem Vercel AI SDK
Related MCP server: agent-services-mcp
Probieren Sie es in 30 Sekunden aus
pip install signet-authfrom 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)Wenn Sie neu sind, beginnen Sie mit einem dieser vier Pfade:
Wählen Sie Ihren Pfad
Claude Code: Am besten für den schnellsten ersten Lauf in einem Coding-Agenten. Führen Sie
/plugin install signet@claude-plugins-officialin Claude Code aus. In 5 Minuten haben Sie signierte Tool-Aufrufe und ein lokales Audit-Log unter~/.signet/audit/.Codex CLI: Am besten zum Signieren von Bash-Tool-Aufrufen in Codex. Kopieren Sie
plugins/codex/nach~/.codex/plugins/signetund fügen Sie einenPostToolUse-Hook hinzu. In 5 Minuten haben Sie signierte Bash-Aktionen in Codex unter Verwendung desselben Audit-Pfads.MCP-Clients: Am besten, wenn Sie einen MCP-Client oder Transport kontrollieren. Umschließen Sie Ihren Transport mit
new SigningTransport(inner, secretKey, "my-agent"). In 5 Minuten haben Sie signiertetools/call-Anfragen mit Belegen inparams._meta._signet.MCP-Server: Am besten, wenn Sie eine Überprüfung vor der Ausführung wünschen. Rufen Sie
verifyRequest(request, {...})in Ihrem Tool-Handler auf. In 5 Minuten haben Sie Signierer-, Aktualitäts-, Zielbindungs- sowie Tool-/Parameter-Prüfungen an der Ausführungsgrenze.
Siehe, wie fehlerhafte Anfragen abgelehnt werden
Führen Sie die kürzeste Demo zur Ausführungsgrenze aus:
cd examples/mcp-agent
npm run execution-boundary-demoSiehe examples/mcp-agent/demo-execution-boundary.mjs für den Demo-Quellcode.
Wann Teams zu Signet greifen
Sie benötigen einen Audit-Pfad für Coding-Agenten, MCP-Tools oder CI-Automatisierung
Sie möchten nach einem Vorfall beweisen, welcher Agent eine Aktion angefordert hat
Sie benötigen Belege, die offline überprüft werden können, ohne von einem gehosteten Dienst abhängig zu sein
Sie möchten Beweise für signierte Tool-Aufrufe, ohne einen Proxy oder ein Gateway zu Ihrem Stack hinzuzufügen
Was Signet ist und was nicht
Signet ist eine Attestierungsebene für Agenten-Aktionen: signieren, auditieren und verifizieren
Signet ist darauf ausgelegt, mit SDKs, Plugins und MCP-Middleware in bestehende Agenten-Stacks zu passen
Signet ist kein Policy-Engine, Firewall oder Aktionsblocker
Signet ist kein Ersatz für Gateways; es ergänzt Präventions- und Durchsetzungstools
Installation
# 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-aiSchnellstart
Claude Code Plugin
Signieren Sie jeden Tool-Aufruf in Claude Code automatisch ohne Konfiguration:
# 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@signetJeder Tool-Aufruf wird mit Ed25519 signiert und in einem Hash-verketteten Audit-Pfad unter ~/.signet/audit/ protokolliert.
Alternative Installationsmethoden:
# From Git
claude plugin add --from https://github.com/Prismer-AI/signet
# Via signet CLI
signet claude installCodex Plugin
Signieren Sie jeden Bash-Tool-Aufruf in der Codex CLI automatisch:
git clone https://github.com/Prismer-AI/signet.git
cp -r signet/plugins/codex ~/.codex/plugins/signetFügen Sie dann den Hook zu ~/.codex/hooks.json hinzu:
{
"hooks": {
"PostToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "node \"$HOME/.codex/plugins/signet/bin/sign.cjs\"",
"timeout": 5
}]
}]
}
}Oder verwenden Sie den MCP-Server für On-Demand-Signier-Tools:
codex mcp add signet -- npx @signet-auth/mcp-toolsCLI
# 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 --chainMCP-Client-Integration (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!" },
});Jede tools/call-Anfrage erhält einen signierten Beleg, der in params._meta._signet eingefügt wird.
MCP-Server-Überprüfung
Wenn Sie auch den MCP-Server kontrollieren, überprüfen Sie Anfragen vor der Ausführung:
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-Integration
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);Referenz-MCP-Server
Dieses Repo enthält auch einen minimalen MCP-Referenzserver, der die serverseitige Überprüfung mit @signet-auth/mcp-server demonstriert.
cd examples/mcp-agent
npm ci
npm run verifier-serverVerfügbare Tools:
inspect_current_request— überprüft den aktuellen MCP-Tool-Aufruf, wenn erparams._meta._signetenthältverify_receipt— überprüft einen rohen Signet-Beleg anhand eines öffentlichen Schlüsselsverify_request_payload— überprüft ein synthetisches MCPtools/call-Payload offline
Umgebungsvariablen:
SIGNET_TRUSTED_KEYS— durch Kommas getrennteed25519:<base64>öffentliche SchlüsselSIGNET_REQUIRE_SIGNATURE—trueoderfalse(Standardfalse)SIGNET_MAX_AGE— maximales Belegalter in Sekunden (Standard300)SIGNET_EXPECTED_TARGET— optionales erwartetesreceipt.action.target
Eigenständiger MCP-Signierserver
@signet-auth/mcp-tools stellt Signet-Signierung, -Überprüfung und -Inhalts-Hashing als MCP-Tools bereit – einbindbar in jeden MCP-kompatiblen Client:
npx @signet-auth/mcp-toolsVerfügbare Tools: signet_generate_keypair, signet_sign, signet_verify, signet_content_hash.
Python (LangChain / CrewAI / AutoGen + 6 weitere)
pip install signet-authfrom 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-Integration
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 AsyncSignetCallbackHandlerCrewAI-Integration
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-Integration
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-Integration
LangGraph verwendet das Callback-System von LangChain – derselbe Handler funktioniert direkt:
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-Integration
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-Integration
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-Integration
from signet_auth import SigningAgent
from signet_auth.google_adk import SignetPlugin
agent = SigningAgent("my-agent")
plugin = SignetPlugin(agent)
# Pass as callback to ADK agentSmolagents-Integration
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-Integration
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=[...],
)Hinweis: Tool-Aufruf-Argumente sind in der Hook-API noch nicht verfügbar (Issue #939). Nur der Tool-Name wird signiert.
Low-Level-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)Bilateraler Beleg (Server-Co-Signierung)
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 receiptFunktionsweise
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)Nur agentenseitig. MCP-Server müssen sich nicht ändern.
Aktionsbeleg
Jeder Tool-Aufruf erzeugt einen signierten Beleg:
{
"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..."
}Die Signatur deckt den gesamten Belegkörper (Aktion + Signierer + Zeitstempel + Nonce) unter Verwendung von RFC 8785 (JCS) kanonischem JSON ab. Das Ändern eines beliebigen Feldes macht die Signatur ungültig.
CLI-Befehle
Befehl | Beschreibung |
| Ed25519-Identität generieren (standardmäßig verschlüsselt) |
| Ohne Verschlüsselung generieren (für CI) |
| Alle Identitäten auflisten |
| Öffentlichen Schlüssel als JSON exportieren |
| Eine Aktion signieren |
| Nur Parameter-Hash speichern (nicht die rohen Parameter) |
Available Tools
4 toolssignet_content_hashA
Compute SHA-256 hash of canonical JSON (RFC 8785 JCS). Accepts any JSON value.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | JSON content to hash (object, array, string, number, boolean, or null) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| secret_key | No | Base64 secret key (optional if SIGNET_SECRET_KEY env is set) | |
| tool | Yes | Tool name being called | |
| params | No | Tool parameters (any JSON value) | |
| signer_name | Yes | Agent name | |
| signer_owner | No | Agent owner (optional) | |
| target | No | Target MCP server URI |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| receipt_json | Yes | Receipt JSON string | |
| public_key | Yes | Public key (base64 or ed25519:base64) |
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
v0.10.0- Added
signet_content_hash - Added
signet_generate_keypair - Added
signet_sign - Added
signet_verify
TDQS
Scored across 4 tools
Each tool performs a distinct cryptographic operation: hashing, key generation, signing, and verification. No overlap in purpose reduces ambiguity.
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.
Four tools is well-scoped for a cryptographic signing server. Each tool is essential, covering the core workflow without bloat.
The tool set covers the full signing lifecycle: input representation (hash), key generation, signing, and verification. No obvious gaps for the stated purpose.
Maintenance
Related MCP Connectors
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Tamper-evident proof creation and verification for AI agents via MCP, A2A, and REST.
Production-grade cryptography toolkit with 31 MCP tools for classical, PQC, and KMS workflows.
Self-hosted MCP server: 26 deterministic dev, security, and EVM tools.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP 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).8MIT
- AlicenseAqualityFmaintenanceA 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.555 npmMIT

touchstone-mcpofficial
AlicenseNot gradedqualityCmaintenanceLocal MCP server that signs and records agent actions into a tamper-evident log using Ed25519 keys for frictionless integration with Touchstone.24 npmApache 2.0- AlicenseNot gradedqualityCmaintenanceA sovereign, MIT-licensed MCP server for professional-service workflows, providing offline-capable, Ed25519-signed tools for autonomous agents and human developers.MIT