python-typing — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited python-typing (Rules) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A Model Context Protocol (MCP) server that connects Cursor AI agents to Datadog APIs. Search logs, query metrics, manage dashboards, analyze APM traces, and control monitors - all from your AI assistant.
This project uses FastMCP (Fast Model Context Protocol) for elegant, FastAPI-style tool definitions. Tools are automatically discovered via decorators, schemas are generated from type hints, and routing is handled automatically.
Key patterns:
See FASTMCP_IMPROVEMENTS.md for details on agent detection improvements and DEPENDENCY_INJECTION.md for architecture patterns.
Using uv (recommended):
cd /path/to/datadog-mcp
uv syncUsing pip:
pip install -e .⚠️ IMPORTANT: Credentials go in Cursor's mcp.json, NOT in this project's .env
#### Option A: Using Environment Variables (Recommended)
Set these in your shell's RC file (~/.zshrc, ~/.bashrc, etc.):
export DD_API_KEY="your-api-key-here"
export DD_APP_KEY="your-application-key-here"
export DD_SITE="datadoghq.com"Then in Cursor's mcp.json, reference them:
{
"mcpServers": {
"datadog": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/datadog-mcp", "run", "fastmcp", "run", "src/datadog_mcp/server.py"],
"env": {
"DD_API_KEY": "${DD_API_KEY}",
"DD_APP_KEY": "${DD_APP_KEY}",
"DD_SITE": "${DD_SITE}"
}
}
}
}#### Option B: Direct in mcp.json
Alternatively, put credentials directly in Cursor's mcp.json (less secure, but simpler):
{
"mcpServers": {
"datadog": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/datadog-mcp", "run", "fastmcp", "run", "src/datadog_mcp/server.py"],
"env": {
"DD_API_KEY": "your-actual-api-key",
"DD_APP_KEY": "your-actual-app-key",
"DD_SITE": "datadoghq.com"
}
}
}
}#### Getting Your API Keys
🔐 Important: The Application Key requires specific scopes for full functionality:
logs_read, metrics_read, dashboards_read, monitors_read, apm_readmetrics_write, dashboards_write, monitors_write, monitors_downtime_writeSee [DATADOG_PERMISSIONS.md](DATADOG_PERMISSIONS.md) for detailed permission requirements.
#### Datadog Regions
Set DD_SITE based on your Datadog region:
datadoghq.com (default)us3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comAdd the Datadog MCP server to Cursor's MCP configuration:
Location:
~/.cursor/mcp.json%APPDATA%\Cursor\mcp.jsonConfiguration:
{
"mcpServers": {
"datadog": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/datadog-mcp",
"run",
"fastmcp",
"run",
"src/datadog_mcp/server.py"
],
"env": {
"DD_API_KEY": "${DD_API_KEY}",
"DD_APP_KEY": "${DD_APP_KEY}",
"DD_SITE": "datadoghq.com"
}
}
}
}Important: Replace /absolute/path/to/datadog-mcp with the actual absolute path to this project.
Restart Cursor IDE to load the new MCP server.
Search Datadog logs for errors in the api service in the last hourThe agent will use search_logs with appropriate query syntax like:
status:error service:apiShow me CPU usage for all hosts over the last 4 hoursThe agent will use query_metrics with:
avg:system.cpu.user{*}Create a dashboard called "API Performance" with a timeseries widget showing request latencyThe agent will use create_dashboard with proper widget configuration.
Find traces for the checkout service with status code 500 in the last 30 minutesThe agent will use search_spans with:
service:checkout @http.status_code:500Create a metric alert that notifies @slack-alerts when CPU usage exceeds 80%The agent will use create_monitor with appropriate thresholds and notification settings.
datadog-mcp/
├── src/
│ └── datadog_mcp/
│ ├── __init__.py
│ ├── server.py # MCP server entry point
│ ├── auth.py # Authentication management
│ └── tools/
│ ├── logs.py # Logs tools
│ ├── metrics.py # Metrics tools
│ ├── dashboards.py # Dashboard tools
│ ├── apm.py # APM/traces tools
│ └── monitors.py # Monitor tools
├── pyproject.toml
├── README.md
└── .env.exampleTest the server directly:
# Using uv
uv run datadog-mcp
# Using python
python -m datadog_mcp.serversrc/datadog_mcp/tools/list_tools() in server.pycall_tool() in server.pymcp.json is absolute and correct.env or environment variables.envDD_SITE matches your Datadog region# Reinstall dependencies
uv sync
# or
pip install -e .For detailed information about Datadog API endpoints and query syntax:
Contributions are welcome! Please feel free to submit issues or pull requests.
MIT License - See LICENSE file for details
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.