Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
git clone --depth 1 https://github.com/techskies11/datadog-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/rules/techskies11/datadog-mcp/pydantic-models)<a href="https://agentmods.dev/rules/techskies11/datadog-mcp/pydantic-models"><img src="https://agentmods.dev/badge/rules/techskies11/datadog-mcp/pydantic-models/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/rules/techskies11/datadog-mcp/pydantic-models"><img src="https://agentmods.dev/badge/rules/techskies11/datadog-mcp/pydantic-models.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00000 | $0.02037 |
| Opus 5.5 | $0.00000 | $0.00815 |
| Sonnet 5.5 | $0.00000 | $0.00407 |
| Haiku 4.5 | $0.00000 | $0.00204 |
Grade A, and why
pydantic-models scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 212 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Pydantic for FastMCP
Use Pydantic models for ALL tool inputs and outputs - never TypedDict, never
dict[str, object]. This project has two distinct model families with
different strictness, defined once in src/datadog_mcp/utils/response.py
and reused everywhere. Getting the family right matters more than any single
ConfigDict flag below.
The Two Model Families
Inbound: DatadogModel - tolerant, for parsing Datadog API responses
from datadog_mcp.utils.response import DatadogModel
class LogEntry(DatadogModel):
"""A single log entry, flattened from Datadog's {id, type, attributes} envelope."""
id: str | None = None
message: str | None = None
timestamp: str | None = None
DatadogModel sets extra="ignore". Datadog can and does add new fields to
API responses without notice; strict inbound validation would turn every
such addition into a hard failure for this server. Never override this to
extra="forbid" on an inbound model.
Outbound: ToolResponse / PaginatedListResponse - strict, for tool return values
from datadog_mcp.utils.response import ToolResponse, PaginatedListResponse, finalize_list_response
class GetLogDetailsResponse(ToolResponse):
"""Response for `get_log_details`."""
log: LogEntry | None = None
class SearchLogsResponse(PaginatedListResponse):
"""Response for `search_logs`."""
logs: list[LogEntry] = Field(default_factory=list)
next_cursor: str | None = None
has_more: bool = False
ToolResponse sets extra="forbid" and already declares success: bool = True
and error: str | None = None. PaginatedListResponse additionally declares
count, truncated, warning, total_available. This is data the server
fully controls - every field must be declared up front, never injected ad-hoc
at a call site (no response["extra_debug_field"] = ...).
Use PaginatedListResponse (not plain ToolResponse) for any response whose
main payload is a single named list, then finalize it:
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 212 lines · 0 tokens per session scan A ed1e19577101
pydantic-models is a cursor rule published in the GitHub repository techskies11/datadog-mcp (0 stars, last pushed 3mo ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 2,037 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other cursor rules, from other repositories
api-property-optionality-hygiene
Fix ApiProperty/ApiPropertyOptional optionality mismatches in DTO files; use for scheduled batch fixes or DTO edits.
python
Python best practices and patterns for modern software development with Flask and SQLite.
cursor
You are working on the checkout service. Preserve transaction integrity and auditability.
django
Definitive guidelines for writing maintainable, performant, and secure Django applications, emphasizing modern best practices, clear code organization, and efficient patterns.
shared-libraries
Shared libraries - condition framework, inventory containers, file-backed DB, itinerary, references.
selectools-providers
Rules for working with LLM provider adapters in selectools.