pin-the-protocol
A verifying MCP gateway that pins approved tool manifests and skill files to content addresses, blocking tampered descriptions before they reach model context.
README
<p align="center"> <img src="docs/cover.svg" alt="SkillSeal — skills you can trust. One line, any agent." width="820"> </p>
<h1 align="center">SkillSeal 🦭</h1> <p align="center"><b>Install agent skills you can trust. One line. Any agent.</b></p>
<p align="center"> <img src="https://img.shields.io/badge/license-MIT-1d9bf0" alt="MIT license"> <img src="https://img.shields.io/badge/node-20%2B-1d9bf0" alt="Node 20 plus"> <img src="https://img.shields.io/badge/skills%20sealed-193-1d9bf0" alt="193 skills sealed"> <img src="https://img.shields.io/badge/storage-decentralized-1d9bf0" alt="Decentralized storage"> </p>
<p align="center"> A skill is instructions your agent loads straight into its context. SkillSeal turns one into a single line that proves what it is: the fingerprint of the contents, the publisher's key, and their signature. Paste the line and it checks every byte before anything is written, then installs where your agent already looks. No account. No registry to trust. </p>
<p align="center"> <a href="https://getskillseal.github.io/skillseal/hub/">Website</a> · <a href="https://getskillseal.github.io/skillseal/hub/seal.html">Seal a skill</a> · <a href="https://getskillseal.github.io/skillseal/docs/">Docs</a> · <a href="#how-it-fits-together">How it fits together</a> · <a href="#see-it-defend-an-attack">See it defend an attack</a> </p>
Install
npx skillseal add sk1qgq6pf8mykkwrqu2ttpynx43f57magyphegd66zrhcpfjz5mlufgaku50584ge6xhzw
That is the whole thing, about 60 characters. The line is the address of a signed manifest, so it carries the skill's fingerprint, its publisher's key, and their signature without spelling them out, and the install checks itself before it touches disk:
✓ token checksum is valid caught offline, before any download
✓ signed by 5a142b0c2d720f3d… who published these exact contents
✓ file list matches the token the index was not swapped
✓ all 4 files match their entries no file was altered
installed csv-stats → Claude Code / Claude Desktop
Alter one byte anywhere in the source and the install refuses, leaving nothing on disk. Mistype one character in the line and it is rejected with no network call. Because the fingerprint decides what is acceptable, the bytes can come from any bucket, gateway, or mirror, and none of them have to be trusted.
Prefer a global install:
npm install -g skillseal
skillseal add sk1…
Quick start
skillseal where # the agents found on this machine
skillseal add sk1… # verify a line, then install it
skillseal inspect sk1… # read a line, fully offline
skillseal publish ./my-skill --upload # print the line other people paste
SkillSeal installs as a plain Agent Skills
folder, so Claude Code, Claude Desktop, goose, Cursor, Codex, OpenCode,
OpenHands, Letta, Amp, Gemini CLI, and Copilot all read it with no plugin and no
integration. Browse a hub of sealed skills, each with its own line, at the
website or in
web/hub/index.html.
How it fits together
Three ideas carry the whole guarantee.
- The line is the proof. It packs the contents fingerprint, the publisher key, and an ed25519 signature into one paste. Verification happens on your machine, so approval is a hash rather than a name, and a changed skill is a different line you never approved.
- Storage is untrusted and swappable. The bytes live wherever is cheap: an S3 compatible bucket, an IPFS gateway, a plain mirror. Filecoin front doors like Akave O3 and Filebase work by changing only the endpoint. The address is the proof, so a corrupted object is caught on read no matter where it came from.
- The root of trust is content addressed. Fingerprints and the signed audit root are backed by a content addressed registry that verifies every blob against its own hash on write and signs a deterministic root over the namespace.
you ──paste a line──▶ skillseal ──fetch by address──▶ any store
│
│ checks the fingerprint, key, and signature
│ before a single byte is written
▼
a plain Agent Skills folder your agent already reads
Security
Approval is bound to content, not to a mutable name, so the class of attack where a skill or a tool is swapped after you approved it becomes a different address that is refused outright. The same guarantee covers an MCP server's tool descriptions through a verifying gateway, and the three attacks that broke an earlier naive design run on every build and must all stay defended. Full notes: docs/design/install-tokens.md.
See it defend an attack
git clone https://github.com/getskillseal/skillseal
cd skillseal
./demo/demo.sh
The demo runs a real MCP client against a real server, ships a poisoned update,
and shows the agent leak a planted secret with no protection, then blocks the
identical attack through the gateway with a printed diff. It goes on to verify a
signed fleet root, refuse a rewritten SKILL.md, and, when a bucket is
reachable, store a skill on decentralized storage and reject a corrupted object
on read. Every act writes machine checkable proof to ./evidence/, so a skeptic
can validate without trusting the terminal.
Requirements: Node 20 or newer, and a Rust toolchain or Docker to
build the trust store on first run. Clean up with ./demo/demo.sh clean.
Documentation
| I want to | Start here |
|---|---|
| Understand the install line | docs/design/install-tokens.md |
| Know who sealed a skill | docs/design/publisher-identity.md |
| Wire it into my agent | docs/compatibility.md |
| Encode a whole skill directory | docs/design/encoding-hermes-skills.md |
| Store skills on Filecoin | docs/design/storage-substrate.md |
| Let an agent fetch and run one | docs/design/agent-uses-skill.md |
| Pin and sign a whole catalogue | docs/design/pinning-a-catalogue.md |
Development
git clone https://github.com/getskillseal/skillseal
cd skillseal
npm install
./demo/demo.sh # the four acts, with proof in ./evidence/
node web/hub/build-catalog.mjs # rebuild the hub from encoded skills
cd web/site && npm start # the docs site, generated from every SKILL.md
The CLI lives in skillseal/ as a self contained package. The
web pages and docs site are static, and ship to GitHub Pages on every push to
main.
Repository layout
skillseal/ the CLI and library — the product (npm: skillseal)
skills-ref/ sample skills, each a folder with a SKILL.md
web/
hub/ the Sealed Skills browser (static)
site/ the docs site (static)
docs/ design notes and assets
demo/ a runnable security demo: a verifying gateway,
an agent that fetches and runs a sealed skill, and
the storage layer, with proof written to demo/evidence/
Built on
SkillSeal is a natural evolution of Agent Skills:
the same portable folder with a SKILL.md, plus a seal that proves it. It reads
and writes the format every agent already understands, so it is backward
compatible by construction. The content address and signed audit root are backed
by a content addressed registry. Thanks to Agent Skills and
goose for the folder format.
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.