MCP Server Specifications
MCP (Model Context Protocol) server specifications define how agents connect to external tools and services.
Overviewโ
MCP servers provide tools and resources to agents through a standardized protocol. Each specification defines the command to run, arguments, environment variables, and transport method.
Required Fieldsโ
id (string)โ
Unique identifier (kebab-case, e.g., kaggle, github, filesystem)
version (string)โ
Spec version (currently 0.0.1).
name (string)โ
Display name shown in the UI
description (string)โ
Server capabilities description
command (string)โ
Executable command to start the server
command: python
command: npx
command: node
args (list of strings)โ
Command arguments including environment variable references
args:
- "-m"
- "mcp_remote"
- "--Authorization"
- "Bearer ${KAGGLE_API_TOKEN}"
Optional Fieldsโ
transport (string)โ
Transport protocol ("stdio" or "remote")
transport: stdio # Standard input/output
transport: remote # Remote HTTP connection
envvars (list of strings)โ
Required environment variable IDs. References specs in envvars/ directory.
envvars:
- KAGGLE_API_TOKEN:0.0.1
- GITHUB_TOKEN
env (object)โ
Environment variables to set for the server process
env:
NODE_ENV: production
LOG_LEVEL: info
tags (list of strings)โ
Categorization tags
tags:
- data
- kaggle
- datasets
icon (string)โ
UI icon identifier
emoji (string)โ
UI emoji identifier
Environment Variable Expansionโ
Use ${VAR_NAME} syntax in args for environment variable expansion:
args:
- "-m"
- "mcp_remote"
- "--Authorization"
- "Bearer ${KAGGLE_API_TOKEN}"
- "--accept"
- "application/json"
- "--"
- "https://mcp.kaggle.com"
envvars:
- KAGGLE_API_TOKEN
The ${KAGGLE_API_TOKEN} will be expanded at runtime by consuming systems.
Complete Exampleโ
# Copyright (c) 2025-2026 Datalayer, Inc.
# Distributed under the terms of the Modified BSD License.
id: kaggle
version: 0.0.1
name: Kaggle MCP Server
description: Access Kaggle datasets, competitions, and kernels
command: python
args:
- "-m"
- "mcp_remote"
- "--Authorization"
- "Bearer ${KAGGLE_API_TOKEN}"
- "--accept"
- "application/json"
- "--"
- "https://mcp.kaggle.com"
transport: remote
envvars:
- KAGGLE_API_TOKEN:0.0.1
tags:
- data
- kaggle
- datasets
MCP Server Hierarchyโ
MCP Server Specification
โโโ Basic Info (id, name, description, tags)
โโโ Execution (command, args, transport)
โโโ Environment
โ โโโ envvars (required environment variables)
โ โโโ env (variables to set for the process)
โโโ UI (icon, emoji)
Available MCP Serversโ
The following MCP servers are defined in agentspecs/mcp-servers/, one
specification file each, and launched from MCP_SERVER_CATALOG. A test holds
the two together with this list, because it named eight while thirteen
existed โ five servers invisible to anybody reading this page to find out
what was available.
alphavantage- Financial market datachart- Chart generationdatalayer- Notebooks, sandboxes and data on Datalayer itselfearthdata- NASA Earthdata search and accesseurus- Climate and reanalysis analysisfilesystem- Local filesystem operationsgithub- GitHub repository operationsgoogle-workspace- Google Workspace integrationhuggingface- Models, datasets, spaces and paperskaggle- Kaggle datasets and competitionsodoo- Odoo ERP recordssalesforce- Salesforce recordsslack- Slack messagingtavily- Web search via Tavily API
The Datalayer server is off by defaultโ
Every other server here reaches something outside Datalayer. datalayer
reaches this platform, and an agent running in a Datalayer sandbox already
has the notebook it was given โ enabling it says "this agent should also act
on my other notebooks", which is a choice somebody makes rather than a
default they discover.
It is reached through mcp-remote with a bearer token from
DATALAYER_API_KEY, not through the OAuth flow. mcp-remote can do OAuth
2.1 with PKCE, which is right for a person at a desktop client and wrong
here: it opens a browser and waits for a consent screen to be approved. An
agent runtime has nobody at the keyboard.
Best Practicesโ
- ID Format: Use kebab-case (
kaggle, notKaggleorkaggle_mcp) - Command: Use full command names (
python, notpy) - Args: Break arguments into separate list items for clarity
- Environment Variables: Always define required envvars in the
envvarsfield - Variable Expansion: Use
${VAR_NAME}syntax consistently - Transport: Specify
stdiofor local processes,remotefor HTTP connections - Tags: Use consistent tags for better categorization
- Description: Be specific about what tools and resources the server provides
Full Field Coverageโ
Required fields:
idversionnamedescriptioncommandargs
Common optional fields:
transport(stdioorremote)envvars(prefer versioned refs)env(process env injection)tagsicon,emoji