MetaMCP
A self-hostable middleware to manage all your MCPs through a GUI and a local proxy, supporting multiple clients and workspaces.
π MetaMCP (MCP Aggregator, Orchestrator, Middleware, Gateway in one docker)
π’ Update: [From the author: apologize for some recent maintainence delay, but will at least keep merging PRs, more background here]
MetaMCP is a MCP proxy that lets you dynamically aggregate MCP servers into a unified MCP server, and apply middlewares. MetaMCP itself is a MCP server so it can be easily plugged into ANY MCP clients.
For more details, consider visiting our documentation site: https://docs.metamcp.com
English | δΈζ
π Table of Contents
- π― Use Cases
- π Concepts
- π Quick Start
- π MCP Protocol Compatibility
- π Connect to MetaMCP
- βοΈ Cold Start Problem and Custom Dockerfile
- π§Ύ Log Levels
- π Authentication
- π¦ Traffic Management
- π OpenID Connect (OIDC) Provider Support
- βοΈ Registration Controls
- π Custom Deployment and SSE conf for Nginx
- ποΈ Architecture
- πΊοΈ Roadmap
- π i18n
- π€ Contributing
- π License
- π Credits
π― Use Cases
- π·οΈ Group MCP servers into namespaces, host them as meta-MCPs, and assign public endpoints (SSE or Streamable HTTP), with auth. One-click to switch a namespace for an endpoint.
- π― Pick tools you only need when remixing MCP servers. Apply other pluggable middleware around observability, security, etc. (coming soon)
- π Use as enhanced MCP inspector with saved server configs, and inspect your MetaMCP endpoints in house to see if it works or not.
- π Use as Elasticsearch for MCP tool selection (coming soon)
Generally developers can use MetaMCP as infrastructure to host dynamically composed MCP servers through a unified endpoint, and build agents on top of it.
Quick demo video: https://youtu.be/Cf6jVd2saAs

π Concepts
π₯οΈ MCP Server
A MCP server configuration that tells MetaMCP how to start a MCP server.
"HackerNews": {
"type": "STDIO",
"command": "uvx",
"args": ["mcp-hn"]
}
π Environment Variables & Secrets (STDIO MCP Servers)
For STDIO MCP servers, MetaMCP supports three ways to handle environment variables and secrets:
1. Raw Values - Direct string values (not recommended for secrets):
API_KEY=your-actual-api-key-here
DEBUG=true
2. Environment Variable References - Use ${ENV_VAR_NAME} syntax:
API_KEY=${OPENAI_API_KEY}
DATABASE_URL=${DB_CONNECTION_STRING}
3. Auto-matching - If the expected environment variable name in your tool matches the container's environment variable, you can omit it entirely. MetaMCP will automatically pass through matching environment variables.
π Security Note: Environment variable references (
${VAR_NAME}) are resolved from the MetaMCP container's environment at runtime. This keeps actual secret values out of your configuration and git repository.
βοΈ Development Note: For local development with
pnpm run dev:docker, ensure your environment variables are listed inturbo.jsonunderglobalEnvto be passed to the development processes. This is not required for production Docker deployments.
π·οΈ MetaMCP Namespace
- Group one or more MCP servers into a namespace
- Enable/disable MCP servers or at tool level
- Apply middlewares to MCP requests and responses
- Override tool names/titles/descriptions per namespace and attach custom MCP annotations (e.g.
{ "annotations": { "readOnlyHint": false } })
π MetaMCP Endpoint
- Create endpoints and assign namespace to endpoints
- Multiple MCP servers in the namespace will be aggregated and emitted as a MetaMCP endpoint
- Choose between API-Key Auth (in header or query param) or standard OAuth in MCP Spec 2025-06-18
- Host through SSE or Streamable HTTP transports in MCP and OpenAPI endpoints for clients like Open WebUI
βοΈ Middleware
- Intercepts and transforms MCP requests and responses at namespace level
- Built-in example: "Filter inactive tools" - optimizes tool context for LLMs
- Future ideas: tool logging, error traces, validation, scanning
π Inspector
Similar to the official MCP inspector, but with saved server configs - MetaMCP automatically creates configurations so you can debug MetaMCP endpoints immediately.
βοΈ Tool Overrides & Annotations
- Open a namespace β Tools tab to see every tool coming from connected MCP servers.
- Each saved tool can be expanded and edited inline: update the display name/title/description or provide a JSON blob with namespace-specific annotations (for example
{ "annotations": { "readOnlyHint": false } }). - Badges in the table ("Overridden", "Annotations") show which tools currently have custom metadata. Hover them to read a tooltip describing what was overridden.
- Annotation overrides are merged with whatever the upstream MCP server returns, so you can safely add custom UI hints without losing provider metadata.
π Quick Start
π³ Run with Docker Compose (Recommended)
Clone repo, prepare .env, and start with docker compose:
git clone https://github.com/metatool-ai/metamcp.git
cd metamcp
cp example.env .env
docker compose up -d
If you modify APP_URL env vars, make sure you only access from the APP_URL, because MetaMCP enforces CORS policy on the URL, so no other URL is accessible.
Note that the pg volume name may collide with your other pg dockers, which is global, consider rename it in docker-compose.yml:
volumes:
metamcp_postgres_data:
driver: local
π¦ Build development environment with Dev Containers (VSCode/Cursor)
You can use the VSCode/Cursor extension to build the development environment in a container.
It only requires that you have an environment running Docker or a similar alternative (the docker/docker compose command is required), and no other dependent components need to be installed on your host machine.
- First, clone the MetaMCP source code, open project in Visual Studio Code.
git clone https://github.com/metatool-ai/metamcp.git
cd metamcp
code .
- Switch to Dev Containers. Open the VSCode Command Palette, and execute
Dev Containers: Reopen in Container.
VSCode will open the Dev Containers project in a new window, where it will build the runtime and install the toolchain according to the Dockerfile before starting the connection and finally installing the MetaMCP dependencies.
note This process requires a reliable network connection, and it will access Docker Hub, GitHub, and some other sites. You will need to ensure the network connection yourself, otherwise the container build may fail.
Wait some minutes, depending on the internet connection or computer performance, it may take from a few minutes to tens of minutes, you can click on the Progress Bar in the bottom right corner to view a live log where you will be able to check unusual stuck.
After finished, you can run pnpm dev to start the development server.
π» Local Development
Still recommend running postgres through docker for easy setup:
pnpm install
pnpm dev
π MCP Protocol Compatibility
- β Tools, Resources, and Prompts supported
- β OAuth-enabled MCP servers tested for 03-26 version
If you have questions, feel free to leave GitHub issues or PRs.
π Connect to MetaMCP
π E.g., Cursor via mcp.json
Example mcp.json
{
"mcpServers": {
"MetaMCP": {
"url": "http://localhost:12008/metamcp/<YOUR_ENDPOINT_NAME>/sse"
}
}
}
π₯οΈ Connecting Claude Desktop and Other STDIO-only Clients
Since MetaMCP endpoints are remote only (SSE, Streamable HTTP, OpenAPI), clients that only support stdio servers (like Claude Desktop) need a local proxy to connect.
Note: While mcp-remote is sometimes suggested for this purpose, it's designed for OAuth-based authentication and doesn't work with MetaMCP's API key authentication. Based on testing, mcp-proxy is the recommended solution.
Here's a working configuration for Claude Desktop using mcp-proxy:
Using Streamable HTTP
{
"mcpServers": {
"MetaMCP": {
"command": "uvx",
"args": [
"mcp-proxy",
"--transport",
"streamablehttp",
"http://localhost:12008/metamcp/<YOUR_ENDPOINT_NAME>/mcp"
],
"env": {
"API_ACCESS_TOKEN": "<YOUR_API_KEY_HERE>"
}
}
}
}
Using SSE
{
"mcpServers": {
"ehn": {
"command": "uvx",
"args": [
"mcp-proxy",
"http://localhost:12008/metamcp/<YOUR_ENDPOINT_NAME>/sse"
],
"env": {
"API_ACCESS_TOKEN": "<YOUR_API_KEY_HERE>"
}
}
}
}
Important notes:
- Replace
<YOUR_ENDPOINT_NAME>with your actual endpoint name - Replace
<YOUR_API_KEY_HERE>with your MetaMCP API key (format:sk_mt_...)
For more details and alternative approaches, see issue #76.
π§ API Key Auth Troubleshooting
?api_key=param api key auth doesn't work for SSE. It only works for Streamable HTTP and OpenAPI.- Best practice is to use the API key in
Authorization: Bearer <API_KEY>header. - Try disable auth temporarily when you face connection issues to see if it is an auth issue.
βοΈ Cold Start Problem and Custom Dockerfile
- MetaMCP pre-allocate idle sessions for each configured MCP servers and MetaMCPs. The default idle session for each is 1 and that can help reduce cold start time.
- If your MCP requires dependencies other than
uvxornpx, you need to customize the Dockerfile to install dependencies on your own. - Check invalidation.md for a seq diagram about how idle session invalidates during updates.
π οΈ Solution: Customize the Dockerfile to add dependencies or pre-install packages to reduce cold start time.
π§Ύ Log Levels
MetaMCPβs backend writes logs to files and optionally mirrors selected levels to the console. Control console mirroring with the LOG_LEVEL environment variable.
-
Files
app.log: receivesDEBUG,INFO, andWARNerror.log: receivesERROR
-
Console mirroring (
LOG_LEVEL)all: mirrorDEBUG,INFO,WARN,ERRORto consoleinfo: mirror onlyINFOto consoleerrors-only: mirrorWARNandERRORto consolenone: no console output
-
Defaults and examples
- Default (when unset or invalid):
errors-only .envexample:LOG_LEVEL='errors-only' # 'all', 'info', 'errors-only', 'none'docker-compose.dev.ymluses:LOG_LEVEL: ${LOG_LEVEL:-all}
- Default (when unset or invalid):
π Authentication
- π‘οΈ Better Auth for frontend & backend (TRPC procedures)
- πͺ Session cookies enforce secure internal MCP proxy connections
- π API key authentication for external access via
Authorization: Bearer <api-key>header - πͺͺ MCP OAuth: Exposed endpoints have options to use standard OAuth in MCP Spec 2025-06-18, easy to connect.
- π’ Multi-tenancy: Designed for organizations to deploy on their own machines. Supports both private and public access scopes. Users can create MCPs, namespaces, endpoints, and API keys for themselves or for everyone. Public API keys cannot access private MetaMCPs.
- βοΈ Separate Registration Controls: Administrators can independently control UI registration and SSO/OAuth registration through the settings page, allowing for flexible enterprise deployment scenarios.
π¦ Traffic Management
π§ MCP Rate Limit
The MCP Rate Limit feature allows you to set the maximum requests a MCP tool (a endpoint) will accept in a given time window. There are two different strategies to set limits that you can use separately or together:
Endpoint rate-limiting (Rate Limiting): applies simultaneously to all clients using the endpoint, sharing a unique counter.User rate-limiting (Client Rate Limiting): sets a counter to each individual user.
Both types can coexist and they complement each other, and store the counters in-memory. On a cluster, each machine sees and counts only its passing traffic.
Endpoint rate-limiting
The endpoint rate limit acts on the number of simultaneous transactions an endpoint can process. This type of limit protects the service for all customers.
When the users connected to an endpoint together exceed the rate-limiting, MetaMCP starts to reject connections with a status code 503 Service Unavailable.
Endpoint rate-limiting options
Max Rate: Defines how many requests will you accept from all users together at any given instant. When the gateway starts, the bucket is full. As requests from users come, the remaining tokens in the bucket decrease. At the same time, the rate-limiting refills the bucket at the desired rate until its maximum capacity is reached.Max Rate Seconds: Time period in which the maximum rates operate in seconds. For instance, if you set an max rate seconds of 60s and a rate-limiting of 5, you are allowing 5 requests every sixty seconds.
User rate-limiting
The client or user rate limit applies one counter to each individual user and endpoint. When a single user connected to an endpoint exceeds their client-max-rate, MetaMCP starts rejecting connections with a status code 429 Too Many Requests
User rate-limiting options
Client Max Rate: Number of tokens you add to the Token Bucket for each individual user (user quota) in the time interval you want (Client Max Rate Seconds). The remaining tokens in the bucket are the requests a specific user can do.Client Max Rate Seconds: Time period in which the maximum rates operate in seconds. For instance, if you set an every of 60s and a rate of 5, you are allowing 5 requests every sixty seconds.Client Max Rate Strategy: Sets the strategy you will use to set client counters. Choose ip when the restrictions apply to the clientβs IP address, or set it to header when there is a header that identifies a user uniquely. That header must be defined with the key entry.Client Max Rate Strategy Key: It is the header name containing the user identification (e.g., Authorization on tokens, or X-Original-Forwarded-For for IPs).
π OpenID Connect (OIDC) Provider Support
MetaMCP supports OpenID Connect authentication for enterprise SSO integration. This allows organizations to use their existing identity providers (Auth0, Keycloak, Azure AD, etc.) for authentication.
π οΈ Configuration
Add the following environment variables to your .env file:
# Required
OIDC_CLIENT_ID=your-oidc-client-id
OIDC_CLIENT_SECRET=your-oidc-client-secret
OIDC_DISCOVERY_URL=https://your-provider.com/.well-known/openid-configuration
# Optional customization
OIDC_PROVIDER_ID=oidc
OIDC_SCOPES=openid email profile
OIDC_PKCE=true
π’ Supported Providers
MetaMCP has been tested with popular OIDC providers:
- Auth0:
https://your-domain.auth0.com/.well-known/openid-configuration - Keycloak:
https://your-keycloak.com/realms/your-realm/.well-known/openid-configuration - Azure AD:
https://login.microsoftonline.com/your-tenant-id/v2.0/.well-known/openid-configuration - Google:
https://accounts.google.com/.well-known/openid-configuration - Okta:
https://your-domain.okta.com/.well-known/openid-configuration
π Security Features
- π PKCE (Proof Key for Code Exchange) enabled by default
- π‘οΈ Authorization Code Flow with automatic user creation
- π Auto-discovery of OIDC endpoints
- πͺ Seamless session management with existing auth system
π± Usage
Once configured, users will see a "Sign in with OIDC" button on the login page alongside the email/password form. The authentication flow automatically creates new users on first login.
For more detailed configuration examples and troubleshooting, see CONTRIBUTING.md.
βοΈ Registration Controls
MetaMCP provides separate controls for different registration methods, allowing administrators to fine-tune user access policies for enterprise deployments.
ποΈ Available Controls
- UI Registration: Controls whether users can create accounts via the registration form
- SSO Registration: Controls whether users can create accounts via SSO/OAuth providers (OIDC, etc.)
π’ Enterprise Use Cases
This separation enables common enterprise scenarios:
- Block UI registration, allow SSO: Prevent manual signups while allowing corporate SSO users
- Block SSO registration, allow UI: Allow manual signups while restricting SSO access
- Block both: Completely disable new user registration
- Allow both: Default behavior for open deployments
π οΈ Configuration
Access the Settings page in the MetaMCP admin interface to configure these controls:
- Navigate to Settings β Authentication Settings
- Toggle "Disable UI Registration" to control form-based signups
- Toggle "Disable SSO Registration" to control OAuth/OIDC signups
Both controls work independently, giving you full flexibility over your registration policy.
π Custom Deployment and SSE conf for Nginx
If you want to deploy it to a online service or a VPS, a instance of at least 2GB-4GB of memory is required. And the larger size, the better performance.
Since MCP leverages SSE for long connection, if you are using reverse proxy like nginx, please refer to an example setup nginx.conf.example
ποΈ Architecture
- Frontend: Next.js
- Backend: Express.js with tRPC, hosting MCPs through TS SDK and internal proxy
- Auth: Better Auth
- Structure: Standalone monorepo with Turborepo and Docker publishing
π Sequence Diagram
Note: Prompts and resources follow similar patterns to tools.
sequenceDiagram
participant MCPClient as MCP Client (e.g., Claude Desktop)
participant MetaMCP as MetaMCP Server
participant MCPServers as Installed MCP Servers
MCPClient ->> MetaMCP: Request list tools
loop For each listed MCP Server
MetaMCP ->> MCPServers: Request list_tools
MCPServers ->> MetaMCP: Return list of tools
end
MetaMCP ->> MetaMCP: Aggregate tool lists & apply middleware
MetaMCP ->> MCPClient: Return aggregated list of tools
MCPClient ->> MetaMCP: Call tool
MetaMCP ->> MCPServers: call_tool to target MCP Server
MCPServers ->> MetaMCP: Return tool response
MetaMCP ->> MCPClient: Return tool response
πΊοΈ Roadmap
Potential next steps:
- π Headless Admin API access
- π Dynamically apply search rules on MetaMCP endpoints
- π οΈ More middlewares
- π¬ Chat/Agent Playground
- π§ͺ Testing & Evaluation for MCP tool selection optimization
- β‘ Dynamically generate MCP servers
π i18n
See README-i18n.md
Currently en and zh locale are supported, but welcome contributions.
π€ Contributing
We welcome contributions! See details at CONTRIBUTING.md
π License
MIT
Would appreciate if you mentioned with back links if your projects use the code.
π Credits
Some code inspired by:
Not directly used the code by took ideas from
Related Servers
Alpha Vantage MCP Server
sponsorAccess financial market data: realtime & historical stock, ETF, options, forex, crypto, commodities, fundamentals, technical indicators, & more
Pinelabs MCP Server
The Pine Labs Online MCP Server implements the Model Context Protocol (MCP) to enable seamless integration between Pine Labsβ online payment APIs and AI tools. It allows AI assistants to perform Pine Labs Online API operations, empowering developers to build intelligent, AI-driven payment applications with ease.
Currents
Enable AI Agents to fix Playwright test failures reported to Currents.
Moondream
A vision language model for image analysis, including captioning, VQA, and object detection.
MCP Mermaid Server
Generate and analyze Mermaid diagrams.
BCMS MCP
Give me a one - two sentence description of the BCMS MCP # MCP The BCMS Model Context Protocol (MCP) integration enables AI assistants like Claude, Cursor, and other MCP-compatible tools to interact directly with your BCMS content. This allows you to create, read, and update content entries, manage media files, and explore your content structureβall through natural language conversations with AI. ## What is MCP? The [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) is an open standard developed by Anthropic that allows AI applications to securely connect to external data sources and tools. With BCMS MCP support, you can leverage AI assistants to: - Query and explore your content structure - Create new content entries with AI-generated content - Update existing entries - Manage your media library - Get intelligent suggestions based on your content model --- ## Getting Started ### Prerequisites 1. A BCMS account with an active instance 2. An MCP key with appropriate permissions 3. An MCP-compatible client (Claude Desktop, Cursor, or any MCP client) ### Step 1: Create an MCP Key 1. Navigate to your BCMS dashboard 2. Go to Settings β MCP 3. Click Create MCP Key 4. Configure the permissions for templates you want the AI to access:GET: Read entries 5. POST: Create entries 6. PUT: Update entries 7. DELETE: Delete entries Note: Right now, MCP only supports creating, reading and updating content. ### Step 2: Configure Your MCP Client You can find full instructions for integrating BCMS with your AI tools right inside BCMS, on the MCP page. But in general, installing BCMS MCP works in a standard way: ``` { "mcpServers": { "bcms": { "url": "https://app.thebcms.com/api/v3/mcp?mcpKey=YOUR_MCP_KEY" } } } ``` ## Available Tools Once connected, your AI assistant will have access to the following tools based on your MCP key permissions: ### Content Discovery #### list_templates_and_entries Lists all templates and their entries that you have access to. This is typically the first tool to call when exploring your BCMS content. Returns: - Template IDs, names, and slugs - Entry IDs with titles and slugs for each language Example prompt: "Show me all the templates and entries in my BCMS" --- ### Entry Management #### list_entries_for_{templateId} Retrieves all entries for a specific template with full content data. A separate tool is generated for each template you have access to. Returns: - Complete entry data including all meta fields - Content in all configured languages - Entry statuses Example prompt: "List all blog posts from my Blog template" --- #### create_entry_for_{templateId} Creates a new entry for a specific template. The input schema is dynamically generated based on your template's field structure. Input: - statuses: Array of status assignments per language - meta: Array of metadata for each language (title, slug, custom fields) - content: Array of content nodes for each language Example prompt: "Create a new blog post titled 'Getting Started with BCMS' with a brief introduction paragraph" --- #### update_entry_for_{templateId} Updates an existing entry for a specific language. Input: - entryId: The ID of the entry to update - lng: Language code (e.g., "en") - status: Optional status ID - meta: Updated metadata - content: Updated content nodes Example prompt: "Update the introduction paragraph of my 'Getting Started' blog post" --- ### Media Management #### list_all_media Lists all media files in your media library. Returns: - Media IDs, names, and types - File metadata (size, dimensions for images) - Parent directory information Example prompt: "Show me all images in my media library" --- #### list_media_dirs Lists the directory structure of your media library. Returns: - Hierarchical directory structure - Directory IDs and names Example prompt: "Show me the folder structure of my media library" --- #### create-media-directory Creates a new directory in your media library. Input: - name: Name of the directory - parentId: Optional parent directory ID (root if not specified) Example prompt: "Create a new folder called 'Blog Images' in my media library" --- #### request-upload-media-url Returns a URL you use to upload a file (for example via POST with multipart form data), which avoids pushing large binaries through the MCP tool payload. You still need a valid file name and MIME type when uploading, as described in the tool response. Availability: Only when the MCP key has Can mutate media enabled. Example prompt: βGive me an upload URL for a new hero image, then tell me how to upload it.β Input: - fileName: Name of the file with extension - fileData: Base64-encoded file data (with data URI prefix) - parentId: Optional parent directory ID Example prompt: "Upload this image to my Blog Images folder" --- ### Linking Tools #### get_entry_pointer_link Generates an internal BCMS link to an entry for use in content. Input: - entryId: The ID of the entry to link to Returns: - Internal link format: entry:{entryId}@*_{templateId}:entry Example prompt: "Get me the internal link for the 'About Us' page entry" --- #### get_media_pointer_link Generates an internal BCMS link to a media item for use in content. Input: - mediaId: The ID of the media item Returns: - Internal link format: media:{mediaId}@*_@*_:entry Example prompt: "Get the link for the hero image so I can use it in my blog post" --- ## Content Structure ### Entry Content Nodes When creating or updating entries, content is structured as an array of nodes. Supported node types include: Type Description paragraph Standard text paragraph heading Heading (h1-h6) bulletList Unordered list orderedList Numbered list listItem List item codeBlock Code block with syntax highlighting blockquote Quote block image Image node widget Custom widget with props ### Example Content Structure ``` { "content": [ { "lng": "en", "nodes": [ { "type": "heading", "attrs": { "level": 1 }, "content": [ { "type": "text", "text": "Welcome to BCMS" } ] }, { "type": "paragraph", "content": [ { "type": "text", "text": "This is your first paragraph." } ] } ] } ] } ``` ## Security & Permissions ### MCP Key Scopes Your MCP key controls what the AI can access: - Template Access: Only templates explicitly granted in the MCP key are visible - Operation Permissions: Each template can have independent GET/POST/PUT/DELETE permissions - Media Access: Media operations are controlled separately ### Best Practices 1. Principle of Least Privilege: Only grant the permissions needed for your use case 2. Separate Keys: Create different MCP keys for different purposes or team members 3. Regular Rotation: Periodically rotate your MCP keys ## Use Cases ### Content Creation Workflows Blog Post Creation "Create a new blog post about the benefits of headless CMS. Include an introduction, three main benefits with explanations, and a conclusion. Use the Blog template." Product Updates "Update the price field for all products in the Electronics category to apply a 10% discount" ### Content Exploration Content Audit "List all blog posts that don't have a featured image set" Translation Status "Show me which entries are missing German translations" ### Media Organization Library Cleanup "Show me all unused images in the media library" Folder Setup "Create folder structure for: Products > Categories > Electronics, Clothing, Home" ## Troubleshooting ### Common Issues #### "MCP key not found" - Verify your MCP key format: keyId.keySecret.instanceId - Ensure the MCP key hasn't been deleted or deactivated - Check that you're using the correct instance #### "MCP key does not have access to template" - Review your MCP key permissions in the dashboard - Ensure the required operation (GET/POST/PUT/DELETE) is enabled for the template #### Session Expired - MCP sessions may timeout after periods of inactivity - Simply start a new conversation to establish a fresh session ### Getting Help - Documentation: [thebcms.com/docs](https://thebcms.com/docs) - Support: [[email protected]](mailto:[email protected]) - Community: [Join BCMS Discord](https://discord.com/invite/SYBY89ccaR) for community support ## Technical Reference ### Endpoint POST https://app.thebcms.com/api/v3/mcp?mcpKey={MCP_KEY} ### Transport BCMS MCP uses the Streamable HTTP transport with session management. Sessions are maintained via the mcp-session-id header. ### Response Format All tools return structured JSON responses conforming to the MCP specification with: - content: Array of content blocks - structuredContent: Typed response data ## Rate Limits MCP requests are subject to the same rate limits as API requests: - Requests are tracked per MCP key - Contact support if you need higher limits for production workloads
Debugger MCP Server
A development tool for real-time debugging, code quality monitoring, and AI insights for React/Next.js applications.
FDEP MCP Server
A static code analysis server for enterprise-scale Haskell codebases, providing over 40 comprehensive analysis tools.
MCP Sandbox
Execute Python code and install packages safely within isolated Docker containers.
MockLoop
An AI-native API testing platform for generating scenarios, executing tests, and analyzing results.
Image Tools MCP
Retrieve image dimensions and compress images from URLs or local files using Tinify and Figma APIs.