skills-templates/mcp-registry/SKILL.md
Official MCP Registry for discovering and publishing Model Context Protocol servers - the app store for MCP servers
npx skillsauth add enuno/claude-command-and-control mcp-registryInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
The MCP Registry provides MCP clients with a list of MCP servers, functioning like an app store for MCP servers. It enables discoverability and integration of Model Context Protocol servers across the ecosystem.
The Registry API is at v0.1 (API Freeze) - no breaking changes while validating real-world implementations. General availability planned after feedback period.
Live API Documentation: https://registry.modelcontextprotocol.io/docs
# macOS (Homebrew)
brew install modelcontextprotocol/tap/mcp-publisher
# Or download pre-built binaries from GitHub releases
# https://github.com/modelcontextprotocol/registry/releases
# Generate server.json template
mcp-publisher init
# Validate without publishing
mcp-publisher validate
# GitHub OAuth (interactive)
mcp-publisher login github
# GitHub Actions OIDC (automated)
mcp-publisher login github-oidc
# DNS verification
mcp-publisher login dns --domain example.com --private-key-file key.pem
# HTTP verification
mcp-publisher login http --domain example.com --private-key-file key.pem
mcp-publisher publish
| Command | Description |
|---------|-------------|
| init | Create server.json template (auto-detects project metadata) |
| login | Authenticate with the registry |
| logout | Clear saved authentication |
| publish | Publish server.json to the registry |
| validate | Validate server.json without publishing |
| --version | Display version, commit hash, and build timestamp |
{
"$schema": "https://registry.modelcontextprotocol.io/schemas/server.json",
"name": "io.github.username/server-name",
"title": "My MCP Server",
"description": "A useful MCP server for...",
"version": "1.0.0",
"repository": "https://github.com/username/server-name",
"website": "https://example.com",
"icon": "https://example.com/icon.png",
"packages": [...],
"remotes": [...]
}
| Auth Method | Name Pattern | Example |
|-------------|--------------|---------|
| GitHub | io.github.username/* | io.github.alice/weather-server |
| GitHub Org | io.github.orgname/* | io.github.anthropic/everything |
| Domain | com.example.*/* | io.modelcontextprotocol/everything |
Constraints:
^[a-zA-Z0-9.-]+/[a-zA-Z0-9._-]+${
"packages": [{
"registryType": "npm",
"name": "@username/my-server",
"version": "1.0.0",
"runtime": "node",
"runtimeArgs": ["--experimental-fetch"]
}]
}
Verification: Add mcpName to package.json matching server name.
{
"name": "@username/my-server",
"mcpName": "io.github.username/my-server"
}
{
"packages": [{
"registryType": "pypi",
"name": "my-mcp-server",
"version": "1.0.0",
"runtime": "python"
}]
}
Verification: Add to README (can be hidden in comment):
mcp-name: io.github.username/my-server
{
"packages": [{
"registryType": "nuget",
"name": "MyMcpServer",
"version": "1.0.0",
"runtime": "dotnet"
}]
}
Verification: Same as PyPI - mcp-name in README.
{
"packages": [{
"registryType": "oci",
"identifier": "ghcr.io/username/my-server:1.0.0"
}]
}
Supported Registries:
Verification: Add Dockerfile label:
LABEL io.modelcontextprotocol.server.name="io.github.username/my-server"
{
"packages": [{
"registryType": "mcpb",
"identifier": "https://github.com/username/server/releases/download/v1.0.0/server-mcp-linux-amd64",
"fileSha256": "abc123..."
}]
}
Requirements:
{
"remotes": [{
"type": "streamable-http",
"url": "https://api.example.com/mcp"
}]
}
{
"remotes": [{
"type": "sse",
"url": "https://api.example.com/mcp/sse"
}]
}
Support dynamic configuration for multi-tenant deployments:
{
"remotes": [{
"type": "streamable-http",
"url": "https://api.example.com/{tenant_id}/mcp",
"variables": {
"tenant_id": {
"description": "Your organization's tenant identifier",
"isRequired": true
}
}
}]
}
Variable Properties:
description - Explains the variable's purposeisRequired - Marks mandatory fieldsdefault - Provides fallback valueschoices - Offers predefined optionsisSecret - Indicates sensitive dataConfigure authentication headers for clients:
{
"remotes": [{
"type": "streamable-http",
"url": "https://api.example.com/mcp",
"headers": [{
"name": "Authorization",
"description": "Bearer token for API access",
"isRequired": true,
"isSecret": true
}]
}]
}
Combine remote and local packages in same server.json:
{
"packages": [{
"registryType": "npm",
"name": "@example/server"
}],
"remotes": [{
"type": "streamable-http",
"url": "https://api.example.com/mcp"
}]
}
Interactive browser-based authentication:
mcp-publisher login github
# Opens browser for GitHub authorization
# Enter device code when prompted
For automated publishing from GitHub Actions:
mcp-publisher login github-oidc
Requires id-token: write permission in workflow.
Domain ownership via TXT record:
_mcp-registry.example.com TXT "v=MCPv1; k=ed25519; p=${PUBLIC_KEY}"
mcp-publisher login dns --domain example.com --private-key-file key.pem
Domain ownership via well-known file:
https://example.com/.well-known/mcp-registry-auth:
v=MCPv1; k=ed25519; p=${PUBLIC_KEY}
mcp-publisher login http --domain example.com --private-key-file key.pem
^, ~, >=, *)| Format | Example |
|--------|---------|
| Semantic | 1.0.0 |
| Prerelease | 2.1.3-alpha, 1.0.0-beta.1 |
| Date-based | 2025.11.25 |
| Prefixed | v1.0 |
1.2.3-1) for metadata-only updatesname: Publish MCP Server
on:
push:
tags:
- 'v*'
jobs:
publish:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: npm ci
- name: Build and test
run: |
npm run build
npm test
- name: Publish to npm
run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Install mcp-publisher
run: |
curl -L https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher-linux-amd64 -o mcp-publisher
chmod +x mcp-publisher
- name: Publish to MCP Registry
run: |
./mcp-publisher login github-oidc
./mcp-publisher publish
- name: Publish to MCP Registry
run: |
./mcp-publisher login github --token ${{ secrets.MCP_GITHUB_TOKEN }}
./mcp-publisher publish
Required scopes: read:org, read:user
- name: Publish to MCP Registry
run: |
echo "${{ secrets.MCP_PRIVATE_KEY }}" > key.pem
./mcp-publisher login dns --domain example.com --private-key-file key.pem
./mcp-publisher publish
rm key.pem
git tag v1.0.0
git push origin v1.0.0
GET https://registry.modelcontextprotocol.io/api/v0/servers
GET https://registry.modelcontextprotocol.io/api/v0/servers/{name}
GET https://registry.modelcontextprotocol.io/api/v0/servers?q=weather
{
"servers": [{
"name": "io.github.username/weather-server",
"title": "Weather Server",
"description": "Get weather data from any location",
"version": "1.0.0",
"packages": [...],
"remotes": [...],
"meta": {
"io.modelcontextprotocol.registry": {
"status": "published",
"publishedAt": "2025-01-15T12:00:00Z",
"updatedAt": "2025-01-15T12:00:00Z",
"isLatest": true
}
}
}],
"meta": {
"cursor": "abc123",
"count": 100
}
}
# Clone repository
git clone https://github.com/modelcontextprotocol/registry.git
cd registry
# Start development environment
make dev-compose
# Registry available at localhost:8080
# Database resets on restart
# Build publisher CLI
make publisher
./bin/mcp-publisher --help
Available at GitHub Container Registry:
// package.json
{
"name": "@username/my-mcp-server",
"version": "1.0.0",
"mcpName": "io.github.username/my-server"
}
npm run build
npm publish
mcp-publisher init
Edit generated file:
{
"$schema": "https://registry.modelcontextprotocol.io/schemas/server.json",
"name": "io.github.username/my-server",
"title": "My Server",
"description": "Useful MCP server",
"version": "1.0.0",
"repository": "https://github.com/username/my-server",
"packages": [{
"registryType": "npm",
"name": "@username/my-mcp-server",
"version": "1.0.0",
"runtime": "node"
}]
}
mcp-publisher login github
mcp-publisher publish
curl "https://registry.modelcontextprotocol.io/api/v0/servers/io.github.username/my-server"
| Issue | Solution |
|-------|----------|
| Token expired | Re-run mcp-publisher login |
| Namespace mismatch | Ensure server name matches your GitHub username/org |
| OIDC permission denied | Add id-token: write to workflow |
| Issue | Solution |
|-------|----------|
| Missing mcpName | Add mcpName to package.json matching server name |
| Invalid version | Use semantic versioning without range indicators |
| Name format error | Use reverse-DNS format with single slash |
| Issue | Solution | |-------|----------| | Package not found | Ensure npm/PyPI package is published first | | Verification failed | Check mcpName/mcp-name matches exactly | | Already published | Increment version number |
tools
MemPalace local-first AI memory system. Use when setting up persistent memory for Claude Code sessions, mining project files or conversation transcripts, querying past context, configuring MCP tools, managing the knowledge graph, or troubleshooting palace operations.
tools
LangSmith Python SDK — trace, evaluate, and monitor LLM applications. Covers @traceable decorator, trace context manager, Client API, evaluate() / aevaluate(), comparative evaluation, custom evaluators, dataset management, prompt caching, ASGI middleware, and pytest plugin.
development
LangGraph (Python) — build stateful, controllable agent graphs with checkpointing, streaming, persistence, interrupts, fault tolerance, and durable execution. Covers both Graph API (StateGraph) and Functional API (@entrypoint/@task).
development
LangGraph Graph API (Python) — build explicit DAG agent workflows with StateGraph, typed state, nodes, edges, Command routing, Send fan-out, checkpointers, interrupts, and streaming. Use when you need explicit control flow and graph topology.