Try Live
Add Docs
Rankings
Pricing
Docs
Install
Install
Docs
Pricing
More...
More...
Try Live
Rankings
Enterprise
Create API Key
Add Docs
webmcp.land
https://github.com/eser/webmcp.land
Admin
webmcp.land is an AI-enabled service registry platform that allows organizations to register and
...
Tokens:
105,854
Snippets:
715
Trust Score:
10
Update:
1 month ago
Context
Skills
Chat
Benchmark
65.4
Suggestions
Latest
Show doc for...
Code
Info
Show Results
Context Summary (auto-generated)
Raw
Copy
Link
# webmcp.land webmcp.land is an AI-enabled service registry and discovery platform for MCP (Model Context Protocol) and WebMCP services. Organizations and developers register their MCP/WebMCP endpoints, and the platform automatically discovers their tools, methods, and capabilities — making them searchable by use case. Built with vinext (Vite-based App Router), React 19, TypeScript, PostgreSQL with Drizzle ORM, and Better Auth for authentication. The platform serves as a central hub where users can search for MCP services by describing what they want to accomplish (e.g., "reserving a flight ticket"), and webmcp.land surfaces relevant services with their booking tools and capabilities. It supports AI-powered semantic search using OpenAI embeddings, webhook integrations, comments, voting, version history, and can be self-hosted with custom branding and authentication providers. ## REST API ### List Resources Retrieves a paginated list of public MCP/WebMCP resources with support for filtering by server type, category, tags, and search query. ```bash # List all resources (paginated) curl "https://webmcp.land/api/resources?page=1&perPage=24" # Filter by server type curl "https://webmcp.land/api/resources?serverType=MCP" curl "https://webmcp.land/api/resources?serverType=WEBMCP" # Filter by category curl "https://webmcp.land/api/resources?category=cat_abc123" # Filter by tag (supports multiple comma-separated tags) curl "https://webmcp.land/api/resources?tag=ai,automation" # Search by keyword curl "https://webmcp.land/api/resources?q=flight%20booking" # Sort options: newest (default), oldest, upvotes curl "https://webmcp.land/api/resources?sort=upvotes" # Combined filters curl "https://webmcp.land/api/resources?serverType=MCP&tag=ai&q=data&sort=upvotes&page=1&perPage=10" # Response format: # { # "resources": [ # { # "id": "abc123", # "title": "Flight Booking MCP", # "slug": "flight-booking-mcp", # "description": "MCP service for booking flights", # "endpointUrl": "https://api.airline.com/mcp", # "serverType": "MCP", # "status": "ACTIVE", # "capabilities": {...}, # "methods": {...}, # "useCases": ["book flights", "check availability"], # "author": { "id": "user1", "name": "Airline Corp", "username": "airline", "verified": true }, # "category": { "id": "cat1", "name": "Travel", "slug": "travel" }, # "tags": [{ "tag": { "id": "tag1", "name": "Travel", "slug": "travel", "color": "#6366f1" }}], # "voteCount": 42, # "_count": { "votes": 42, "outgoingConnections": 2, "incomingConnections": 1 }, # "createdAt": "2024-01-15T10:30:00.000Z" # } # ], # "total": 150, # "page": 1, # "perPage": 24, # "totalPages": 7 # } ``` ### Get Single Resource Retrieves detailed information about a specific resource including author, category, tags, version history, and vote status. ```bash # Get resource by ID curl "https://webmcp.land/api/resources/abc123" # Response format: # { # "id": "abc123", # "title": "Flight Booking MCP", # "slug": "flight-booking-mcp", # "description": "MCP service for booking flights and checking availability", # "endpointUrl": "https://api.airline.com/mcp", # "serverType": "MCP", # "status": "ACTIVE", # "capabilities": { # "prompts": { "listChanged": false }, # "tools": {} # }, # "methods": { # "book_flight": { "description": "Book a flight" }, # "search_flights": { "description": "Search available flights" } # }, # "useCases": ["book flights", "check availability", "manage reservations"], # "viewCount": 1234, # "isFeatured": false, # "author": { # "id": "user1", # "name": "Airline Corp", # "username": "airline", # "avatar": "https://...", # "verified": true # }, # "category": { # "id": "cat1", # "name": "Travel", # "slug": "travel", # "parent": null # }, # "tags": [ # { "resourceId": "abc123", "tagId": "tag1", "tag": { "id": "tag1", "name": "Travel", "slug": "travel", "color": "#6366f1" }} # ], # "versions": [ # { "id": "v1", "version": 2, "description": "Added cancellation support", "changeNote": "Resource updated", "createdAt": "2024-02-01T..." }, # { "id": "v0", "version": 1, "description": "Initial version", "changeNote": "Initial version", "createdAt": "2024-01-15T..." } # ], # "voteCount": 42, # "_count": { "votes": 42 }, # "hasVoted": false, # "createdAt": "2024-01-15T10:30:00.000Z", # "updatedAt": "2024-02-01T15:00:00.000Z" # } ``` ### Create Resource Creates a new MCP/WebMCP resource. Requires authentication. Includes rate limiting (30 seconds between resources) and daily limits for flagged users. ```bash # Create a new resource (requires authentication cookie/session) curl -X POST "https://webmcp.land/api/resources" \ -H "Content-Type: application/json" \ -H "Cookie: session=..." \ -d '{ "title": "Weather Data MCP", "description": "Real-time weather data and forecasts via MCP", "endpointUrl": "https://api.weather.com/mcp", "serverType": "MCP", "capabilities": { "prompts": { "listChanged": false }, "tools": {} }, "methods": { "get_weather": { "description": "Get current weather for a location" }, "get_forecast": { "description": "Get 7-day forecast" } }, "useCases": ["weather forecasts", "climate data", "outdoor planning"], "categoryId": "cat_weather123", "tagIds": ["tag_api123", "tag_data456"], "isPrivate": false }' # Response: Returns the created resource with author, category, and tags # { # "id": "new123", # "title": "Weather Data MCP", # "slug": "weather-data-mcp", # ... # } # Error responses: # 401: { "error": "unauthorized", "message": "You must be logged in" } # 400: { "error": "validation_error", "message": "Invalid input", "details": [...] } # 409: { "error": "duplicate_resource", "message": "You already have a resource with the same title or endpoint URL", "existingResourceId": "..." } # 429: { "error": "rate_limit", "message": "Please wait 30 seconds before creating another resource" } ``` ### Update Resource Updates an existing resource. Only the resource owner or admins can update. Creates a new version if description changes. ```bash # Update resource (requires authentication) curl -X PATCH "https://webmcp.land/api/resources/abc123" \ -H "Content-Type: application/json" \ -H "Cookie: session=..." \ -d '{ "title": "Weather Data MCP Pro", "description": "Enhanced real-time weather data with historical analysis", "status": "ACTIVE", "capabilities": { "prompts": { "listChanged": true }, "tools": { "enhanced": true } }, "tagIds": ["tag_api123", "tag_premium789"], "categoryId": "cat_weather123" }' # Response: Returns the updated resource # Note: Changing title regenerates slug; changing description creates new version ``` ### Delete Resource Soft-deletes a resource (sets deletedAt timestamp). Only the resource owner or admins can delete. ```bash # Delete resource (soft delete) curl -X DELETE "https://webmcp.land/api/resources/abc123" \ -H "Cookie: session=..." # Response: # { "success": true, "message": "Resource soft deleted" } # Error responses: # 401: { "error": "unauthorized", "message": "You must be logged in" } # 403: { "error": "forbidden", "message": "You can only delete your own resources" } # 404: { "error": "not_found", "message": "Resource not found" } ``` ### Search Resources Quick search for resources by title. Supports comma-separated keywords and owner-only filtering. ```bash # Basic search (minimum 2 characters) curl "https://webmcp.land/api/resources/search?q=weather&limit=10" # Search with multiple keywords (comma-separated) curl "https://webmcp.land/api/resources/search?q=weather,forecast,api" # Search only your own resources (requires authentication) curl "https://webmcp.land/api/resources/search?q=my%20service&ownerOnly=true" \ -H "Cookie: session=..." # Response: # { # "resources": [ # { "id": "abc123", "title": "Weather Data MCP", "slug": "weather-data-mcp", "author": { "username": "weatherco" } } # ] # } ``` ### AI Semantic Search Performs AI-powered semantic search using OpenAI embeddings. Requires OPENAI_API_KEY to be configured. ```bash # Semantic search for resources curl "https://webmcp.land/api/search/ai?q=I%20need%20to%20book%20a%20flight%20to%20Paris&limit=20" # Response: # { # "results": [ # { # "id": "abc123", # "title": "Flight Booking MCP", # "description": "...", # "similarity": 0.89 # } # ], # "query": "I need to book a flight to Paris", # "count": 5 # } # Error if AI search not enabled: # { "error": "AI Search is not enabled" } ``` ### Vote on Resource Upvote or remove upvote from a resource. Requires authentication. ```bash # Upvote a resource curl -X POST "https://webmcp.land/api/resources/abc123/vote" \ -H "Cookie: session=..." # Response: # { "voted": true, "voteCount": 43 } # Remove upvote curl -X DELETE "https://webmcp.land/api/resources/abc123/vote" \ -H "Cookie: session=..." # Response: # { "voted": false, "voteCount": 42 } # Error if already voted: # { "error": "already_voted", "message": "You have already upvoted this resource" } ``` ### Resource Comments Get, create, and manage comments on resources. Supports threaded replies. ```bash # Get all comments for a resource curl "https://webmcp.land/api/resources/abc123/comments" # Response: # { # "comments": [ # { # "id": "comment1", # "content": "Great MCP service!", # "createdAt": "2024-01-20T...", # "author": { "id": "user1", "name": "John", "username": "john", "role": "USER" }, # "score": 5, # "userVote": 0, # "replyCount": 2, # "parentId": null # } # ] # } # Create a comment curl -X POST "https://webmcp.land/api/resources/abc123/comments" \ -H "Content-Type: application/json" \ -H "Cookie: session=..." \ -d '{ "content": "This is really helpful for my project!" }' # Reply to a comment curl -X POST "https://webmcp.land/api/resources/abc123/comments" \ -H "Content-Type: application/json" \ -H "Cookie: session=..." \ -d '{ "content": "Thanks! Let me know if you need help.", "parentId": "comment1" }' ``` ### Category Subscriptions Subscribe to categories to get notifications about new resources. ```bash # Subscribe to a category curl -X POST "https://webmcp.land/api/categories/cat123/subscribe" \ -H "Cookie: session=..." # Response: # { "subscribed": true, "category": { "id": "cat123", "name": "AI Tools", "slug": "ai-tools" } } # Unsubscribe from a category curl -X DELETE "https://webmcp.land/api/categories/cat123/subscribe" \ -H "Cookie: session=..." # Response: # { "subscribed": false } ``` ### API Key Management Generate and manage API keys for MCP server authentication. ```bash # Get current API key status curl "https://webmcp.land/api/user/api-key" \ -H "Cookie: session=..." # Response: # { "hasApiKey": true, "apiKey": "wm_abc123...", "resourcesPublicByDefault": false } # Generate new API key curl -X POST "https://webmcp.land/api/user/api-key" \ -H "Cookie: session=..." # Response: # { "apiKey": "wm_newkey456..." } # Delete API key curl -X DELETE "https://webmcp.land/api/user/api-key" \ -H "Cookie: session=..." # Response: # { "success": true } # Update default visibility for new resources curl -X PATCH "https://webmcp.land/api/user/api-key" \ -H "Content-Type: application/json" \ -H "Cookie: session=..." \ -d '{ "resourcesPublicByDefault": true }' ``` ### Health Check Check the health status of the API and database connection. ```bash curl "https://webmcp.land/api/health" # Healthy response: # { # "status": "healthy", # "timestamp": "2024-01-15T10:30:00.000Z", # "database": "connected" # } # Unhealthy response (503): # { # "status": "unhealthy", # "timestamp": "2024-01-15T10:30:00.000Z", # "database": "disconnected", # "error": "Connection refused" # } ``` ## MCP Server Integration webmcp.land exposes an MCP (Model Context Protocol) server that allows AI tools like Claude, ChatGPT, and other MCP clients to search and discover services programmatically. ### MCP Server Configuration Configure webmcp.land as an MCP server in your AI tool's configuration file. ```json // Remote MCP server (recommended) { "mcpServers": { "webmcp.land": { "url": "https://webmcp.land/api/mcp" } } } // Local MCP server via CLI { "mcpServers": { "webmcp.land": { "command": "npx", "args": ["-y", "webmcp.land", "mcp"] } } } // With filtering options { "mcpServers": { "webmcp.land": { "url": "https://webmcp.land/api/mcp?categories=ai-tools,automation&tags=api,data" } } } // With API key authentication (for saving resources) { "mcpServers": { "webmcp.land": { "url": "https://webmcp.land/api/mcp?api_key=wm_your_api_key_here" } } } ``` ### MCP Server Info Get information about the MCP server capabilities. ```bash curl "https://webmcp.land/api/mcp" # Response: # { # "name": "webmcp-land", # "version": "1.0.0", # "description": "MCP server for webmcp.land - Search and discover MCP/WebMCP services", # "protocol": "Model Context Protocol (MCP)", # "capabilities": { "tools": true, "prompts": true }, # "tools": [ # { "name": "search_resources", "description": "Search for MCP/WebMCP services by keyword." }, # { "name": "get_resource", "description": "Get a resource by ID." }, # { "name": "save_resource", "description": "Save a new MCP/WebMCP service resource (requires API key)." } # ], # "prompts": { # "description": "All public resources are available as MCP prompts.", # "usage": "Access via slash commands in MCP clients" # }, # "endpoint": "/api/mcp" # } ``` ### MCP Tool: search_resources Search for MCP/WebMCP services using the MCP protocol. Returns matching resources with full details. ```json // MCP request to search resources { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "search_resources", "arguments": { "query": "flight booking", "limit": 10, "serverType": "MCP", "category": "travel", "tag": "api" } } } // Response: { "jsonrpc": "2.0", "id": 1, "result": { "content": [{ "type": "text", "text": "{\"query\":\"flight booking\",\"count\":3,\"resources\":[{\"id\":\"abc123\",\"slug\":\"flight-booking-mcp\",\"title\":\"Flight Booking MCP\",\"description\":\"Book flights via MCP\",\"endpointUrl\":\"https://api.airline.com/mcp\",\"serverType\":\"MCP\",\"status\":\"ACTIVE\",\"capabilities\":{...},\"methods\":{...},\"useCases\":[...],\"author\":\"Airline Corp\",\"category\":\"Travel\",\"tags\":[\"Travel\",\"API\"],\"votes\":42,\"createdAt\":\"2024-01-15T...\"}]}" }] } } ``` ### MCP Tool: get_resource Get detailed information about a specific resource by ID. ```json // MCP request to get a resource { "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "get_resource", "arguments": { "id": "abc123" } } } // Response includes full resource details with link: { "jsonrpc": "2.0", "id": 2, "result": { "content": [{ "type": "text", "text": "{\"id\":\"abc123\",\"slug\":\"flight-booking-mcp\",\"title\":\"Flight Booking MCP\",\"description\":\"...\",\"endpointUrl\":\"https://...\",\"serverType\":\"MCP\",\"status\":\"ACTIVE\",\"capabilities\":{...},\"methods\":{...},\"useCases\":[...],\"author\":\"Airline Corp\",\"category\":\"Travel\",\"tags\":[\"Travel\"],\"link\":\"https://webmcp.land/resources/abc123_flight-booking-mcp\"}" }] } } ``` ### MCP Tool: save_resource Save a new resource to webmcp.land via MCP. Requires API key authentication. ```json // MCP request to save a resource (requires api_key in URL or header) { "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "save_resource", "arguments": { "title": "My Custom MCP Service", "endpointUrl": "https://myservice.com/mcp", "serverType": "MCP", "description": "Custom MCP service for task automation", "capabilities": { "tools": {} }, "methods": { "automate": { "description": "Automate tasks" } }, "useCases": ["task automation", "workflow"], "tags": ["automation", "productivity"], "category": "productivity", "isPrivate": false } } } // Success response: { "jsonrpc": "2.0", "id": 3, "result": { "content": [{ "type": "text", "text": "{\"success\":true,\"resource\":{\"id\":\"new456\",\"slug\":\"my-custom-mcp-service\",\"title\":\"My Custom MCP Service\",\"isPrivate\":false,\"tags\":[\"automation\",\"productivity\"],\"category\":\"Productivity\",\"link\":\"https://webmcp.land/resources/new456_my-custom-mcp-service\"}}" }] } } // Error without authentication: { "jsonrpc": "2.0", "id": 3, "result": { "content": [{ "type": "text", "text": "{\"error\":\"Authentication required. Please provide an API key.\"}" }], "isError": true } } ``` ### MCP Prompts All public resources are exposed as MCP prompts, allowing direct access via slash commands in MCP clients. ```json // List available prompts (paginated) { "jsonrpc": "2.0", "id": 4, "method": "prompts/list", "params": { "cursor": "1" } } // Response: { "jsonrpc": "2.0", "id": 4, "result": { "prompts": [ { "name": "flight-booking-mcp", "title": "Flight Booking MCP", "description": "MCP service at https://api.airline.com/mcp", "arguments": [] } ], "nextCursor": "2" } } // Get a specific prompt/resource { "jsonrpc": "2.0", "id": 5, "method": "prompts/get", "params": { "name": "flight-booking-mcp" } } // Response: { "jsonrpc": "2.0", "id": 5, "result": { "description": "Flight Booking MCP", "messages": [{ "role": "user", "content": { "type": "text", "text": "{\"title\":\"Flight Booking MCP\",\"endpointUrl\":\"https://api.airline.com/mcp\",\"serverType\":\"MCP\",\"status\":\"ACTIVE\",\"description\":\"Book flights via MCP\"}" } }] } } ``` ## CLI Tool The webmcp.land CLI provides an interactive terminal interface for browsing resources and scaffolding new instances. ### CLI Installation and Usage Install and run the CLI to browse MCP services interactively or create new instances. ```bash # Run interactive TUI (Terminal User Interface) npx webmcp.land # Navigation commands in TUI: # ↑/↓ or j/k Navigate list # Enter Select resource # / Search resources # n/p Next/Previous page # r Run resource (open in ChatGPT, Claude, etc.) # c Copy resource content (with variable filling) # C Copy raw content # o Open in browser # b Go back # q Quit # Create a new webmcp.land instance npx webmcp.land new my-registry cd my-registry # Start MCP server mode (for AI tools) npx webmcp.land mcp ``` ## Self-Hosting ### Quick Setup Deploy your own private MCP service registry with custom branding and authentication. ```bash # Clone and setup git clone https://github.com/eser/webmcp.land.git cd webmcp.land pnpm install # Run interactive setup wizard pnpm run setup # Or use the CLI to scaffold a new instance npx webmcp.land new my-registry cd my-registry # Configure environment variables (.env) DATABASE_URL="postgresql://user:pass@localhost:5432/webmcp" OPENAI_API_KEY="sk-..." # Optional, for AI search GITHUB_CLIENT_ID="..." # Optional, for GitHub auth GITHUB_CLIENT_SECRET="..." GOOGLE_CLIENT_ID="..." # Optional, for Google auth GOOGLE_CLIENT_SECRET="..." # Initialize database pnpm run db:push # Create tables pnpm run db:seed # Seed with demo data (50 sample resources) # Start development server pnpm run dev # localhost:3000 # Production build pnpm run build pnpm run start # Default admin credentials after seeding: # Email: admin@webmcp.land # Password: password123 ``` ### Configuration (webmcp.config.ts) Customize branding, theme, authentication, and features for your instance. ```typescript import { defineConfig } from "@/lib/config"; export default defineConfig({ // Branding - customize for white-label branding: { name: "My MCP Registry", logo: "/my-logo.svg", logoDark: "/my-logo-dark.svg", favicon: "/favicon.ico", description: "My private MCP service registry", }, // Theme - design system configuration theme: { radius: "sm", // "none" | "sm" | "md" | "lg" variant: "default", // "flat" | "default" | "brutal" density: "default", // "compact" | "default" | "comfortable" colors: { primary: "#6366f1", // Indigo (hex or oklch) }, }, // Authentication providers auth: { providers: ["credentials", "github", "google", "azure", "apple"], allowRegistration: true, // Allow public signup (credentials only) }, // Internationalization i18n: { locales: ["en", "es", "fr", "de", "zh", "ja"], defaultLocale: "en", }, // Feature toggles features: { privateResources: true, // Allow private resources changeRequests: true, // Enable version control categories: true, // Enable categories tags: true, // Enable tags aiSearch: true, // AI semantic search (needs OPENAI_API_KEY) discovery: true, // MCP endpoint discovery mcp: true, // MCP features + API key generation comments: true, // Comments on resources }, // Homepage customization homepage: { useCloneBranding: true, // Hide webmcp.land branding achievements: { enabled: false }, sponsors: { enabled: false, items: [] }, }, }); ``` ### Docker Deployment Deploy webmcp.land using Docker for production environments. ```bash # Using docker-compose docker compose up -d # Or build manually docker build -t webmcp-land . docker run -d \ -p 3000:3000 \ -e DATABASE_URL="postgresql://..." \ -e OPENAI_API_KEY="sk-..." \ webmcp-land # Docker compose configuration (compose.yml): # services: # app: # build: . # ports: # - "3000:3000" # environment: # - DATABASE_URL=postgresql://postgres:postgres@db:5432/webmcp # depends_on: # - db # db: # image: postgres:16 # volumes: # - pgdata:/var/lib/postgresql/data # environment: # - POSTGRES_DB=webmcp # - POSTGRES_USER=postgres # - POSTGRES_PASSWORD=postgres ``` ## Database Schema ### Core Tables and Types The database uses PostgreSQL with Drizzle ORM. Key entities include resources, users, categories, tags, and their relationships. ```typescript // Resource types type ResourceType = "MCP" | "WEBMCP"; type ResourceStatus = "PENDING" | "ACTIVE" | "UNREACHABLE" | "SUSPENDED"; // Resource schema interface Resource { id: string; title: string; slug: string | null; description: string | null; endpointUrl: string; serverType: ResourceType; status: ResourceStatus; capabilities: Record<string, unknown> | null; // MCP capabilities methods: Record<string, unknown> | null; // MCP methods/tools useCases: string[] | null; // Searchable use cases isPrivate: boolean; viewCount: number; authorId: string; categoryId: string | null; embedding: number[] | null; // OpenAI embedding for semantic search isFeatured: boolean; createdAt: Date; updatedAt: Date; deletedAt: Date | null; // Soft delete } // User schema interface User { id: string; email: string; username: string; name: string | null; avatar: string | null; role: "ADMIN" | "USER"; verified: boolean; apiKey: string | null; // For MCP authentication resourcesPublicByDefault: boolean; // Default visibility for new resources flagged: boolean; // Rate-limited user } // Category schema (hierarchical) interface Category { id: string; name: string; slug: string; description: string | null; icon: string | null; order: number; pinned: boolean; parentId: string | null; // For subcategories } // Tag schema interface Tag { id: string; name: string; slug: string; color: string; // Hex color } // Resource connections (for workflow chains) interface ResourceConnection { id: string; sourceId: string; targetId: string; label: string; // "related" for AI suggestions, custom labels for flows order: number; } ``` ## Summary webmcp.land is a comprehensive platform for discovering and managing MCP (Model Context Protocol) services. The primary use cases include: registering and sharing MCP endpoints with the community, searching for services by use case using AI-powered semantic search, integrating the registry into AI workflows via the MCP server endpoint, and self-hosting private registries for organizations with custom branding and authentication. Integration patterns follow the MCP standard, allowing seamless connection with AI tools like Claude Desktop, ChatGPT plugins, and custom AI agents. The REST API provides full CRUD operations for resources with proper authentication, rate limiting, and webhooks for external integrations. For programmatic access from AI tools, configure the MCP server endpoint (`https://webmcp.land/api/mcp`) in your tool's MCP configuration, optionally with an API key for write operations. The platform supports filtering by categories, tags, and users, making it suitable for both public registries and private organizational deployments.