MCP Server + Private Registry
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Server + Private RegistryFetch the content from https://api.github.com/repos/modelcontextprotocol/sdk"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Server + Private Registry
A TypeScript project with two components:
MCP Server — a
fetch_urltool that lets AI clients make HTTP requestsPrivate MCP Registry — a REST API implementing the official MCP Registry OpenAPI spec for hosting your own server metadata
Setup
Requires conda and Node.js 22 (provided via the conda environment).
conda env create -f environment.yml
conda activate mcp
npm install
npm run buildMCP Server
A simple MCP server exposing one tool: fetch_url.
Tool: fetch_url
Parameter | Type | Required | Description |
| string (URL) | Yes | The URL to fetch |
|
| No | HTTP method (default: GET) |
| object | No | Key-value request headers |
| string | No | Request body (POST only) |
Run:
npm startTest with MCP Inspector:
npx @modelcontextprotocol/inspector node dist/index.js
# Open http://localhost:6274Add to Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"fetch": {
"command": "node",
"args": ["/path/to/mcp/dist/index.js"]
}
}
}Note: Logs go to stderr — never stdout — to avoid corrupting the stdio JSON-RPC channel.
Private MCP Registry
A Hono-based HTTP server implementing the MCP Registry OpenAPI spec. Stores server metadata in a local SQLite database (via Node.js 22's built-in node:sqlite).
Environment Variables
Variable | Required | Description |
| Yes | Secret used to sign/verify JWT tokens |
| No | HTTP port (default: |
| No | SQLite file path (default: |
Quick Start
# 1. Generate an admin token (save this securely)
REGISTRY_JWT_SECRET=your-secret npm run generate-token
# 2. Start the registry
REGISTRY_JWT_SECRET=your-secret npm run registryAPI Endpoints
Method | Path | Auth | Description |
GET |
| No | Health check |
GET |
| No | List/search servers |
GET |
| No | List all versions of a server |
GET |
| No | Get a specific version ( |
POST |
| JWT | Publish or update a server |
PUT |
| JWT | Upsert a specific version |
DELETE |
| JWT | Delete a version |
Query params for GET /v0.1/servers: search, cursor, limit, updated_since
Example Usage
TOKEN="<your-generated-token>"
# Publish a server
curl -X POST http://localhost:3000/v0.1/publish \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "io.example/fetch-server",
"version": "1.0.0",
"description": "HTTP fetch MCP server",
"repository": "https://github.com/example/fetch-server"
}'
# List all servers
curl http://localhost:3000/v0.1/servers
# Get latest version (/ in name must be URL-encoded as %2F)
curl "http://localhost:3000/v0.1/servers/io.example%2Ffetch-server/versions/latest"
# Search
curl "http://localhost:3000/v0.1/servers?search=fetch"
# Delete a version
curl -X DELETE \
-H "Authorization: Bearer $TOKEN" \
"http://localhost:3000/v0.1/servers/io.example%2Ffetch-server/versions/1.0.0"Server Name Format
Server names follow reverse-DNS convention: io.github.username/server-name or com.example/server-name. When used in URL path parameters, the / must be encoded as %2F.
Project Structure
src/
├── index.ts # MCP server entry point
└── registry/
├── index.ts # Registry HTTP server entry point
├── db.ts # SQLite schema and query helpers
├── auth.ts # JWT Bearer middleware
├── types.ts # TypeScript types (OpenAPI spec)
├── generate-token.ts # Admin JWT generator
└── routes/
├── servers.ts # GET endpoints
└── publish.ts # POST / PUT / DELETE endpoints
plans/
└── PLAN.md # Implementation planTech Stack
Runtime: Node.js 22 (via conda)
Language: TypeScript 5
MCP SDK:
@modelcontextprotocol/sdkHTTP Framework: Hono
Database:
node:sqlite(Node.js 22 built-in, experimental)Auth:
jose(JWT HS256)
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Superman/mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server