Model Context Protocol server for the Ligate Chain attestation surface. Plug an AI agent into a running Ligate Chain in one line of config: Claude Desktop, Cursor, LangGraph, OpenAI Agents SDK, anything that speaks MCP.
Status: v0 scaffold. The four tools below are stubs that return placeholder responses. The real implementation wraps
@ligate-labs/sdkonce the wrapper surface stabilises. Tracked inligate-chain#23.
Four MCP tools, mapping 1:1 to the chain's attestation primitives:
| Tool | What it does |
|---|---|
record(schema_id, payload) |
Submits an attestation. The payload is hashed + signed; the chain returns an lat1... id. |
verify(attestation_id) |
Looks up an attestation, returns its payload + canonical signature status. |
query(filter) |
Lists attestations by agent / schema / time range. Reads through the indexer. |
schemas() |
Lists every schema registered on the chain, with metadata. |
Every MCP-compatible agent framework integrates Ligate with a one-line config rather than a custom REST client per framework. The chain stays small (point-lookup REST); agents get a typed, ergonomic surface; Ligate stops re-inventing the wheel per agent ecosystem.
Full product story + business model: see ligate-docs/mcp/CONCEPT.md in the docs repo.
pnpm install
pnpm build
pnpm startThen point an MCP client at the stdio transport. For Claude Desktop, drop this into ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"ligate": {
"command": "node",
"args": ["/path/to/ligate-mcp/dist/index.js"],
"env": {
"LIGATE_RPC": "https://rpc.ligate.io"
}
}
}
}Restart Claude Desktop. The four tools above will appear in any chat.
| Env var | Default | Purpose |
|---|---|---|
LIGATE_RPC |
https://rpc.ligate.io |
Chain REST endpoint. Point at a local devnet (http://127.0.0.1:12346) for testing. |
LIGATE_API |
https://api.ligate.io |
Indexer endpoint (powers query). |
LIGATE_AGENT_KEY |
(none) | Hex-encoded ed25519 private key used to sign record(...) calls. Required for write tools; absent = read-only mode. |
- TypeScript, ESM, no transpile-time surprises (
"type": "module"inpackage.json). prettier --check+tsc --noEmiton every PR (.github/workflows/ci.yml).- CLA bot on every external PR (
.github/workflows/cla.yml). mainis branch-protected: PRs only, status checks required, no force pushes.
Sign the CLA on your first PR (the bot prompts you). Beyond that, the usual: open a PR, link the issue, request review.
Apache-2.0 OR MIT (dual). See LICENSE-APACHE + LICENSE-MIT.