pin-the-protocol

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.

Category
Visit Server

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

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured