npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mcp-i/core

v1.2.0

Published

Core library for MCP-I — delegation, proof, and session primitives for Model Context Protocol Identity

Readme


AI agents call tools on your behalf. But today, there's no way to know who called, whether they were allowed to, or what actually happened. MCP-I fixes that.

  • Every server gets a cryptographic identity (DID) — no accounts, no API keys, no central registry
  • Every tool call gets a signed proof — a tamper-evident receipt the agent can't forge or deny
  • Protected tools require human consent — per-tool authorization via W3C Delegation Credentials
  • The AI never knows — identity, proofs, and consent happen transparently in the protocol layer
npm install @mcp-i/core

Migrate Any MCP Server in 2 Lines

Before — a standard MCP server with no identity or proofs:

import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';

const server = new McpServer({ name: 'my-server', version: '1.0.0' });

server.registerTool('greet', { description: 'Say hello' }, async (args) => ({
  content: [{ type: 'text', text: `Hello, ${args.name}!` }],
}));

After — every tool response now carries a signed cryptographic proof:

import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { withMCPI, NodeCryptoProvider } from '@mcp-i/core';  // +1 line

const server = new McpServer({ name: 'my-server', version: '1.0.0' });
await withMCPI(server, { crypto: new NodeCryptoProvider() }); // +1 line

server.registerTool('greet', { description: 'Say hello' }, async (args) => ({
  content: [{ type: 'text', text: `Hello, ${args.name}!` }],
}));

That's it. withMCPI auto-generates an Ed25519 identity, registers the _mcpi protocol tool, and wraps the transport so every tool response includes a detached JWS proof in _meta — invisible to the LLM, verifiable by anyone.

See the full working example: examples/context7-with-mcpi — a real MCP server (Context7) migrated with exactly 2 lines of code.


Protect Tools with Human Consent

Some tools shouldn't run without a human saying "yes." MCP-I adds per-tool authorization using W3C Verifiable Credentials:

const checkout = mcpi.wrapWithDelegation(
  'checkout',
  { scopeId: 'cart:write', consentUrl: 'https://example.com/consent' },
  mcpi.wrapWithProof('checkout', async (args) => ({
    content: [{ type: 'text', text: `Order placed: ${args.item}` }],
  })),
);

When an agent calls checkout without a delegation credential, it gets back a needs_authorization response with a consent URL. The human approves, a scoped credential is issued, and the agent retries — now authorized.

Try it yourself: examples/consent-basic walks through the full consent flow end-to-end.


See It in Action

git clone https://github.com/modelcontextprotocol-identity/mcp-i-core.git
cd mcp-i-core && npm install
bash scripts/demo.sh

This starts all example servers and opens MCP Inspector. Connect to any server, call a tool, and inspect the proof in _meta:

| Port | Example | What it demonstrates | |------|---------|---------------------| | 3001 | node-server | Proofs + restricted tools (low-level API) | | 3002 | consent-basic | Human consent flow with built-in UI | | 3003 | consent-full | Production consent UI (@kya-os/consent) | | 3004 | context7-with-mcpi | 2-line migration of a real MCP server |

Also available: outbound-delegation (gateway pattern), verify-proof (standalone verification), statuslist (revocation lifecycle).


What's Under the Hood

| Capability | How it works | |-----------|-------------| | Cryptographic identity | Ed25519 key pairs, did:key and did:web resolution | | Signed proofs | Detached JWS over JCS-canonicalized request/response hashes | | Delegation credentials | W3C Verifiable Credentials with scope constraints | | Revocation | StatusList2021 bitstring with cascading revocation | | Replay prevention | Nonce-based handshake with timestamp skew validation | | Extensible | Bring your own KMS, HSM, nonce cache (Redis, DynamoDB, KV), or DID method |


Links

License

MIT