Meraki MCP Server

Meraki MCP Server

Exposes a curated subset of the Cisco Meraki Dashboard API to MCP-aware clients with role-based access control.

Category
访问服务器

README

Meraki MCP Server

A Model Context Protocol (MCP) server that exposes a curated subset of the Cisco Meraki Dashboard API to MCP-aware clients (e.g., Cursor, Claude Desktop). It provides role-based access to ensure safe and scoped operations.

Features

  • Role-based access control (noc | sysadmin | all)
  • OpenAPI-driven tool generation (using the bundled spec)
  • Global schema validation bypass to tolerate Meraki null values (prevents "None is not of type 'string'")
  • Simple configuration via environment variables

Requirements

  • Python 3.10+
  • A Meraki Dashboard API key with appropriate org access
  • Optional: uv for reproducible Python environments (recommended)

Install

Option A: Using uv (recommended)

# 1) Install uv if needed
curl -LsSf https://astral.sh/uv/install.sh | sh

# 2) From project root
cd /path/to/your/meraki-mcp-server

# 3) Create and sync the environment based on pyproject.toml / uv.lock
uv sync

Option B: Using pip (fallback)

# 1) Create a virtual environment
python3 -m venv .venv
source .venv/bin/activate

# 2) Install dependencies
pip install fastmcp httpx jsonschema

Configure

Set environment variables (you can export them in your shell or supply via your MCP client config):

  • MERAKI_KEY (required): Your Meraki Dashboard API key
  • MCP_ROLE (optional): One of noc, sysadmin, all (defaults to noc)
  • MERAKI_BASE_URL (optional): Defaults to https://api.meraki.com/api/v1

Example (macOS/Linux):

export MERAKI_KEY="<your-meraki-api-key>"
export MCP_ROLE="noc"     # or sysadmin | all

Quick Run (smoke test)

You can quickly validate the server starts locally (even outside an MCP client):

# Using uv
uv run python meraki_mcp_server.py

# Or with plain Python (ensure venv is active)
python3 meraki_mcp_server.py

This will start the MCP server process. Typically, you run this via an MCP client over stdio.

MCP Client Configuration

Below is an example mcp_server_config.json entry you can adapt in your MCP client (e.g., Cursor, Claude Desktop). Ensure you replace the directory path with your actual project location.

{
  "Meraki-MCP-Server": {
    "command": "uv",
    "env": {
      "MERAKI_KEY": "${MERAKI_KEY}",
      "MERAKI_BASE_URL": "https://api.meraki.com/api/v1",
      "MCP_ROLE": "noc",
      "_comment": "Set MERAKI_KEY in your shell env. MCP_ROLE values: noc | sysadmin | all"
    },
    "args": [
      "--directory",
      "/path/to/yourMCPdirector/meraki-mcp-server",
      "run",
      "python",
      "meraki_mcp_server.py",
      "stdio"
    ]
  }
}

Notes:

  • The ${MERAKI_KEY} placeholder means your MCP client will inherit the key from your shell environment.
  • stdio at the end ensures the server communicates over standard I/O as MCP expects.
  • If you do not use uv, replace command and args accordingly to invoke your Python environment.

Roles and Allowed Endpoints

The server uses route maps to constrain access:

  • noc (default):

    • GET /organizations
    • GET /organizations/{orgId}/networks
    • GET /organizations/{orgId}/devices
    • GET /organizations/{orgId}/firmware/upgrades
    • GET /organizations/{orgId}/licenses/overview
    • PUT /networks/{networkId}/firmwareUpgrades
    • All other endpoints are blocked
  • sysadmin:

    • Same read endpoints as noc, but with PUT operations blocked (read-only)
  • all:

    • Firehose mode. All endpoints allowed (use with caution)

You can switch roles by setting MCP_ROLE before launching the server.

Validation Behavior

Meraki may return null for some fields the official schema marks as strings. To avoid frequent validation errors (e.g., None is not of type 'string'), this server disables JSON schema output validation globally. This keeps tools responsive and avoids brittle schema mismatches.

If you prefer strict validation, remove the monkey patch in meraki_mcp_server.py and update the OpenAPI spec to mark nullable string fields explicitly.

Security

  • Never commit your API key. Use environment variables.
  • Limit the server’s accessible endpoints by using the appropriate role.
  • Consider running this behind a process supervisor and restricting filesystem/network access where appropriate.

Troubleshooting

  • Import errors (e.g., RouteType vs MCPType): This project is pinned to the FastMCP API compatible with MCPType. If your local FastMCP differs, install the version specified in pyproject.toml/uv.lock.
  • Validation errors: By design, validation is disabled to tolerate Meraki nulls. If you still see validation errors, ensure you’re running the current meraki_mcp_server.py.

License

MIT (or your preferred license)

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选