smplkit MCP Server
OfficialThe smplkit MCP Server lets an AI agent operate the entire smplkit platform through natural-language requests, using stateless HTTP with per-request authentication (OAuth or API key).
Feature Flags: Create, list, get, set (per-environment values, kill switch, targeting rules), and delete flags. Supports boolean, string, number, and JSON types. Tools:
create_flag,list_flags,get_flag,set_flag,delete_flag.Configuration: Manage keyed collections of typed values with per-environment overrides and auto-declaration of keys. Tools:
create_config,list_configs,get_config,set_config_value,delete_config.Logging: Set, list, get, and reset log levels (TRACE, DEBUG, INFO, WARN, ERROR, FATAL, SILENT) for loggers across environments. Tools:
set_log_level,list_loggers,get_logger,reset_logger.Audit: Search immutable audit events by actor, resource, event type, time window, etc. View event details. Create, list, test, and delete SIEM forwarders to stream events to destinations like Datadog, Elastic, Honeycomb, HTTP, New Relic, Splunk HEC, and Sumo Logic. Tools:
query_events,get_event,list_forwarders,create_forwarder,test_forwarder,delete_forwarder.Scheduled Jobs: Create, list, get, update, delete, and run HTTP jobs (recurring via cron, one-off, or manual). Inspect run history and captured responses. Tools:
create_job,list_jobs,get_job,update_job,delete_job,run_job,list_runs,get_run.Platform: List environments for use as targets in environment-specific operations. Tool:
list_environments.Usability: Intent-named tools (list/get/create/set/delete), read-modify-write patterns, and "prove before you trust" helpers like
run_jobandtest_forwarder. Server holds no credentials; per-request auth via OAuth or API key.
Allows creating Datadog forwarders to stream audit events to Datadog.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@smplkit MCP ServerCreate a job that posts to my endpoint every morning at 8."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
smplkit MCP Server
A hosted, agent-native Model Context Protocol server — the gateway that lets an AI agent (Claude Code, Claude Desktop, Cursor, …) operate the whole smplkit platform on your behalf, without you ever leaving the chat.
One server, the whole platform:
Flags — feature flags with per-environment values and targeting.
Config — keyed, typed config with per-environment overrides.
Logging — change runtime log levels per environment.
Audit — search the audit log and wire SIEM forwarders.
Jobs — scheduled HTTP jobs (cron, one-off, or on-demand) with response capture.
Once connected, tell your agent "turn on the new checkout for enterprise users in prod," "set the staging database host," "raise the SQL logger to DEBUG in prod," "stream audit events to Datadog," or "POST my endpoint every morning at 7." It makes the change, proves it works, and answers follow-up questions straight from the live state.
It is a thin, stateless HTTP client to the smplkit product APIs — it holds no credential of its own.
Connect once
1. Add the server and sign in
The server lives at https://mcp.smplkit.com/api/mcp. Point your MCP client
at that URL — the first time it connects, the client opens your browser for a
one-time sign-in (Continue with Google or Microsoft, standard OAuth).
After that it reconnects and refreshes access on its own; there's no key to mint,
copy, or rotate.
Claude Code (CLI):
claude mcp add --transport http smplkit https://mcp.smplkit.com/api/mcp…or in .mcp.json:
{
"mcpServers": {
"smplkit": {
"type": "http",
"url": "https://mcp.smplkit.com/api/mcp"
}
}
}Cursor (~/.cursor/mcp.json or project .cursor/mcp.json):
{
"mcpServers": {
"smplkit": {
"url": "https://mcp.smplkit.com/api/mcp"
}
}
}Claude Desktop (claude_desktop_config.json) — Desktop bridges remote
servers through mcp-remote, which opens a browser for the one-time sign-in and
caches the connection:
{
"mcpServers": {
"smplkit": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.smplkit.com/api/mcp"]
}
}
}Prefer a static key?
For non-interactive use — CI, scripts, headless clients, or writing code with the
smplkit SDKs — skip the browser
and authenticate with an API key as a bearer token. Sign up at
https://smplkit.com (Google or Microsoft SSO, email-verified instantly),
create an API key in the console, and send it as
Authorization: Bearer YOUR_SMPLKIT_API_KEY (a custom X-Smplkit-Api-Key header
is also accepted). The SDKs read the same key from SMPLKIT_API_KEY. For example,
add a headers block to the config above:
{
"mcpServers": {
"smplkit": {
"type": "http",
"url": "https://mcp.smplkit.com/api/mcp",
"headers": { "Authorization": "Bearer ${SMPLKIT_API_KEY}" }
}
}
}2. Ask your agent
"Create a boolean flag
new-checkout, off by default, then turn it on in prod only for enterprise users."
"List my environments, then set
database.hosttodb-staging.internalfor staging."
"Raise the
sqlalchemy.enginelogger to DEBUG in production while I debug, then reset it."
"Test whether
https://http-intake.logs.datadoghq.com/...accepts a sample, then create a Datadog forwarder for our audit events."
"POST
https://api.example.com/cache/warmevery morning at 7am NY time, then run it now to prove it works."
Related MCP server: Schedule Task MCP
Tools
All tools share intent-named verbs — list_*, get_*, create_*, set_*,
delete_* — and hide the JSON:API envelopes, per-environment nesting, and
full-replace PUTs behind partial-intent calls.
Capability | Tools |
Flags |
|
Config |
|
Logging |
|
Audit |
|
Jobs |
|
Platform |
|
A few load-bearing behaviors:
set_flag/set_config_value/set_log_levelare read-modify-write. You express a partial change in one environment and the tool preserves the rest.list_environmentstells you the valid environment targets (production,staging, …) for everyset_*tool and for jobs.Prove before you trust.
run_jobfires a job once and returns the captured response;test_forwarderdry-runs a SIEM destination before you save it.create_jobinfers the kind: a cronschedule→ recurring, arun_atdatetime → one-off, neither → manual. You never set a kind.
The bundled SKILL.md teaches an agent the whole surface.
The public-internet constraint
smplkit calls job targets and forwarder destinations from the cloud, so
those URLs must be reachable from the public internet — localhost/private
addresses won't fire. To target a local server, point at its deployed URL or
expose it with a tunnel (cloudflared tunnel --url http://localhost:PORT or
ngrok http PORT) and set a secret auth header.
Development
python3.13 -m venv .venv && . .venv/bin/activate
pip install -r requirements-test.txt
pytest # unit tests (acceptance deselected)
ruff check src testsRun the server locally:
PYTHONPATH=src uvicorn smplkit_mcp.app:app --host 0.0.0.0 --port 8000
# MCP endpoint: http://localhost:8000/api/mcp
# Health check: http://localhost:8000/healthConfiguration (env vars) — each product's base host is independently
configurable, mirroring the SDK's base_domain pattern:
JOBS_BASE_DOMAIN/FLAGS_BASE_DOMAIN/CONFIG_BASE_DOMAIN/LOGGING_BASE_DOMAIN/AUDIT_BASE_DOMAIN/APP_BASE_DOMAIN— the host for each product API (defaults<product>.smplkit.com;APP_*backslist_environments).*_SCHEME—https(default) orhttp.*_BASE_URL— full base-URL override (e.g.http://localhost:8002); wins over the two above. Used for the local platform and tests.
Acceptance tests
tests/test_acceptance.py provisions an ephemeral verified account and drives
the full tool surface against the real product APIs end-to-end — create/set/get/
delete a flag, set and read a config value, set and list a log level, query
events, create/test/delete a forwarder, list environments, and the eight Jobs
tools — then cleans up. These tests require smplkit-internal admin
credentials, so they self-skip unless an admin key is available (ADMIN_API_KEY
env or the [admin] profile in ~/.smplkit) — external contributors can ignore
them; the unit suite needs no credentials. Run them explicitly:
pytest -m acceptance
# point at a non-prod platform with <PRODUCT>_BASE_URL=...Architecture
Stateless Python service built on FastMCP: it holds no database and no platform credential of its own.
Auth is per request — whether the caller signs in with OAuth or sends an API key, the credential is validated and used per request to reach each product API, and is never cached or logged.
One thin JSON:API HTTP client per product (flags, config, logging, audit, environments), each pointed at its own configurable base host.
The MCP endpoint is served under
/api/mcpwith a stateless, JSON-response transport (no long-lived SSE), so it behaves correctly through proxies and load balancers with short idle timeouts.
License
MIT.
Available Tools
29 toolscreate_configCreate configAInspect
Create a named config: a keyed collection of typed values your code reads at runtime.
Each key holds one typed value that can be overridden per environment with
set_config_value. Seed the starting keys here via items, or create the config
empty and let set_config_value auto-declare keys later. Use parent to inherit
another config's keys.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name for the config. | |
| items | No | Optional initial keys, as {key: value} (type inferred) or {key: {"value", "type", "description"}}. Types: STRING, NUMBER, BOOLEAN, JSON. | |
| parent | No | Key of another config to inherit items from. | |
| config_id | No | The config's key/identifier (defaults to a slug of the name). | |
| description | No | Optional free-text description. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses meaningful behavioral traits beyond the minimal annotations: values can be overridden per environment, set_config_value can auto-declare keys later, and parent enables inheritance. It does not contradict annotations. It doesn't mention edge cases like overwriting existing configs or permissions, but it adds substantial context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, purposeful paragraphs. The first sentence delivers the core definition, and the rest expands on usage variations. Every sentence adds unique value with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (which likely documents return values), the description fully covers the key creation decisions: seeding items, leaving empty, and parent inheritance. It also clarifies the relationship with set_config_value, making it complete for a create operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the purpose of 'items' and 'parent' in context, improving understanding beyond the schema's own field descriptions. It doesn't need to expand config_id or description since the schema already covers them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Create a named config: a keyed collection of typed values your code reads at runtime,' which clearly states the verb, resource, and purpose. It distinguishes create_config from sibling tools by explaining what a config is and how it relates to set_config_value.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: 'Seed the starting keys here via `items`, or create the config empty and let set_config_value auto-declare keys later' and 'Use `parent` to inherit another config's keys.' This indicates when to use this tool and the optional approaches, though it doesn't explicitly contrast with unrelated sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_flagCreate feature flagAInspect
Create a feature flag with an explicit type, key, and default value.
After creating, use set_flag to set per-environment values and targeting.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Unique key for the flag (its identifier, e.g. 'dark-mode'). | |
| name | No | Human-readable name (defaults to the key). | |
| type | Yes | Value type — 'boolean', 'string', 'number', or 'json'. | |
| values | No | Optional allowed-value set to constrain the flag — a list of scalars (e.g. ['classic','modern']) or of {name, value} objects. | |
| default | Yes | Default value served when no environment rule matches. Must match the type (and be one of `values` if you constrain the flag). | |
| description | No | Optional free-text description. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating (readOnlyHint=false) and non-destructive (destructiveHint=false) operation. The description adds useful context that create_flag only establishes the flag with a default, while per-environment values and targeting belong to set_flag. This clarifies the tool's scope beyond the annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose and required core inputs, followed by a single actionable next step. Every sentence earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a straightforward create operation with a fully described input schema and an output schema. The description appropriately states what the tool creates and points to the next operation (set_flag) for further configuration, making it complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all six parameters with detailed descriptions, so the schema itself is the primary source. The description only restates 'type, key, and default' without adding new semantic detail or usage nuances for the parameters, so it doesn't exceed the schema's baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action, 'Create a feature flag', and names the required inputs (type, key, default value). This clearly differentiates it from siblings like get_flag, set_flag, and delete_flag, which perform different operations on the same resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear follow-up direction: 'After creating, use set_flag to set per-environment values and targeting.' This tells the agent what to do next and implicitly distinguishes create_flag from set_flag, though it does not cover more general when/when-not scenarios or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_forwarderCreate audit forwarderAInspect
Wire a forwarder that delivers audit events to a SIEM/HTTP destination.
Prove the destination first with test_forwarder. The URL must be reachable from the public internet.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Destination URL to deliver events to (publicly reachable). | |
| name | Yes | Human-readable name for the forwarder. | |
| filter | No | Optional JSON Logic expression; only matching events are delivered. | |
| method | No | HTTP method used to deliver (default POST). | POST |
| enabled | No | Whether the forwarder is enabled in that environment (default true). | |
| headers | No | HTTP headers to send, as a name->value object (e.g. auth). | |
| description | No | Optional free-text description. | |
| environment | No | Environment to enable the forwarder in (default 'production'). | production |
| forwarder_id | No | The forwarder's key (defaults to a slug of the name). | |
| forwarder_type | No | Destination type — datadog, elastic, honeycomb, http, new_relic, splunk_hec, sumo_logic (default 'http'). | http |
| success_status | No | Status that counts as success — a code ('200') or class ('2xx', default). | |
| forward_smplkit_events | No | Also forward smplkit's own platform change events. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey the write and non-destructive nature. The description adds the public-reachability constraint, but does not disclose behaviors like validation failure, whether it contacts the destination, or response details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the purpose, followed by a prerequisite. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full input schema and an output schema present, the description is sufficient. It could add a bit more about the forwarder_type options or filter semantics, but those are already in the schema. The usage tip adds helpful context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of the 12 parameters with descriptions, so baseline is 3. The description adds no parameter meaning beyond what schema already provides; the URL reachability note is repeated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Wire a forwarder' and clearly states its function: delivering audit events to a SIEM/HTTP destination. It distinguishes from sibling tools like test_forwarder and delete_forwarder by indicating creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance: 'Prove the destination first with test_forwarder' and states a required condition ('URL must be reachable from the public internet'). This tells the agent when to use and what to do before creating.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_jobCreate jobAInspect
Create a scheduled HTTP job. The kind is inferred — never set it yourself.
A cron
schedule-> a RECURRING job that fires on that cadence.A
run_atdatetime -> a ONE-OFF job that runs a single time.Neither -> a MANUAL job that runs only when you call run_job.
The target URL must be publicly reachable. After creating a recurring job, call run_job to prove it works with a real captured response.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Destination URL to call. Must be reachable from the public internet (no localhost or private IPs). | |
| body | No | Request body sent verbatim on each run. Pair with a matching Content-Type header. | |
| name | Yes | Human-readable name for the job. | |
| method | No | HTTP method — GET, POST, PUT, PATCH, or DELETE. | POST |
| run_at | No | An ISO-8601 datetime to run the job ONCE (or 'now' to run once immediately). Mutually exclusive with `schedule`. | |
| headers | No | HTTP headers to send, as a name->value object. Set a secret auth header so only smplkit can call your endpoint. | |
| timeout | No | Per-run timeout in seconds (default 30). | |
| schedule | No | A 5-field cron expression for a RECURRING job (e.g. '0 7 * * *' for 7am daily). Omit for a manual or one-time job. | |
| timezone | No | IANA timezone the cron `schedule` runs in (e.g. 'America/New_York'). Recurring jobs only; defaults to UTC. | |
| description | No | Optional free-text description. | |
| environment | No | Which environment to enable/run the job in (default 'production'). | production |
| retry_policy | No | The id of an existing named retry policy to apply to failed runs. Retry policies are managed in the smplkit console — create one there, then pass its id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false and destructiveHint=false. The description adds non-obvious behavior: the kind is inferred (with instructions 'never set it yourself'), and it explains when jobs run based on parameters. It also states the URL must be publicly reachable, which is a critical operational constraint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured with bullet points. Every sentence adds value: the opening defines the tool, the bullets clarify the three modes, and the final sentences give important prerequisites and recommended follow-up. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 12 parameters and an output schema, the description doesn't need to explain return values. It covers the essential non-schema context: job kind inference, manual vs. scheduled behavior, public URL requirement, and the run_job verification step. It could mention mutual exclusivity of schedule/run_at, but the schema already does that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already well documented. The description adds a concise synthesis of the schedule/run_at/neither modes, which complements the schema but doesn't add significant detail beyond it. Most parameter semantics are already in the schema, so this is a minimum-viable score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Create a scheduled HTTP job,' which is a specific verb+resource that clearly distinguishes this tool from siblings like list_jobs, update_job, and run_job. It further elaborates on three job kinds (recurring, one-off, manual), making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that the job kind is inferred from schedule/run_at and advises calling run_job after creating a recurring job to verify it works. It also notes the URL must be publicly reachable. While it doesn't explicitly contrast with update_job or delete_job, the usage context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_configDelete configADestructiveInspect
Permanently delete a config and all of its keys and per-environment values.
There is no undo — recreate it with create_config if needed. Afterward, SDKs reading these keys fall back to their code-level defaults. To change or clear a single value, use set_config_value instead of deleting the whole config.
| Name | Required | Description | Default |
|---|---|---|---|
| config_id | Yes | The config's key. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already mark this as destructive, the description adds key behavioral details: there is no undo, and SDKs fall back to code-level defaults after deletion. This explains the operational impact beyond the abstract destructiveHint flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, with the main action first and supporting details (no undo, fallback, alternative) following. No wasted words; each clause conveys necessary information about the delete operation's consequences and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool, the description covers permanence, fallback behavior, and the alternative for partial updates. The presence of an output schema handles return-value documentation, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes config_id as 'The config's key' (100% coverage). The description does not add parameter-specific guidance beyond that, but it is consistent with the schema's meaning. Baseline 3 applies given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Permanently delete a config and all of its keys and per-environment values,' which is a specific verb+resource+scope. It also distinguishes from the sibling tool set_config_value by noting 'instead of deleting the whole config,' making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use an alternative: 'To change or clear a single value, use set_config_value instead of deleting the whole config.' It also covers the recovery path via create_config and the consequence of permanent deletion, giving clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_flagDelete feature flagADestructiveInspect
Permanently delete a flag and all of its per-environment values and rules.
There is no undo — recreate it with create_flag if needed. Afterward, SDKs that still evaluate this key serve the code-level default passed to their flag handle. To stop serving a flag without deleting it, prefer set_flag with enabled=false (the kill switch), which keeps the flag and its targeting intact.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The flag's key (e.g. 'dark-mode'). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations' destructiveHint=true, the description details consequences: permanent deletion, no undo, impact on SDKs serving defaults, and loss of per-environment values/rules. This discloses exactly what gets destroyed and the post-delete behavior, exceeding what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: the first states the action, the second states irreversibility and recovery, the third covers the alternative. No filler, every sentence adds critical information, and the most important fact (permanent delete) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The destructive nature carries significant side effects; the description addresses what gets deleted, irreversibility, post-delete SDK behavior, and recommends an alternative. This fully equips an agent to safely invoke the tool and reason about its outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the single key parameter (100% coverage), so the baseline is 3. The description references the key but adds no new syntax or format details beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Permanently delete a flag and all of its per-environment values and rules,' clearly identifying the action (delete), target (flag), and scope (all values/rules). This distinguishes it from sibling tools like set_flag (which toggles) and create_flag (which recreates).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts with set_flag: 'prefer set_flag with enabled=false' for the non-destructive kill-switch use case, and mentions create_flag for recreation. This gives an agent clear decision guidance for when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_forwarderDelete audit forwarderADestructiveInspect
Delete a forwarder. Past forwarded events are unaffected.
| Name | Required | Description | Default |
|---|---|---|---|
| forwarder_id | Yes | The forwarder's key. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds transparency by stating that past forwarded events are unaffected, which is not captured by the destructiveHint annotation alone. This gives the agent important context about the consequences of deletion beyond the simple destructive flag. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using two short sentences that pack the core purpose and a key behavioral caveat. Every sentence earns its place, and there is no redundancy or verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple deletion tool with a single parameter and an output schema (not shown), the description adequately covers the purpose and an important side effect. It does not explain return values, but that requirement is waived when an output schema exists. The description is sufficient for the agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a complete description for the single parameter (forwarder_id as 'The forwarder's key.'), so the description does not need to add more. It adds no additional semantic detail beyond what the schema states, but since schema coverage is 100%, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete a forwarder') with a specific verb and resource, and the added nuance about past forwarded events distinguishes it from related tools like create_forwarder or test_forwarder. It leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context: you would use this tool to delete a forwarder. It does not explicitly mention alternatives or when not to use it, but given the straightforward verb+resource and the presence of sibling tools like create_forwarder, the intended usage is clear. The note about past events adds relevant behavioral context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_jobDelete jobADestructiveInspect
Delete a job. Its run history is retained and the id may be reused later.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The id of the job to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, so the description's note that run history is retained and the id may be reused adds valuable behavioral context beyond the annotation. This is a non-obvious side effect of deletion that the agent would otherwise not know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the core action, and the second adds a critical behavioral detail. No wasted words, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter, an output schema, and destructive annotations. The description provides the key additional context (retention of run history and id reuse) that an agent needs to understand the tool's behavior fully. No significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single required parameter job_id, with a clear description. The tool description adds no additional parameter-level information, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a job' with a specific verb and resource, distinguishing it from sibling tools like delete_forwarder, delete_flag, and delete_config. The additional detail about run history retention and id reuse further clarifies the tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by noting that run history is retained and the id may be reused, but it does not explicitly state when to use this tool versus alternatives or mention any exclusions. For a simple resource-specific deletion, this is acceptable but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_configGet configARead-onlyInspect
Get one config's full state: items plus per-environment overrides.
| Name | Required | Description | Default |
|---|---|---|---|
| config_id | Yes | The config's key. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true and openWorldHint: false, and the description does not contradict these. It adds context about the return content ('items plus per-environment overrides') but does not disclose other behaviors such as error handling or permissions. Given the annotations cover the safety profile, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that concisely states the tool's purpose and return scope without any unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with one parameter and an output schema, the description provides essential context: it retrieves a specific config's full state including items and overrides. It does not cover error conditions or ID format details, but given the tool's simplicity and existing annotations/schema, it is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (config_id described as 'The config's key.'), and the description adds no additional meaning to the parameter. The baseline of 3 is appropriate since the schema fully documents the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get one config's full state: items plus per-environment overrides' states a specific verb (Get) and resource (one config), and clearly distinguishes it from sibling tools like list_configs or get_flag by specifying the full state including items and per-environment overrides.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when you need a single config's full state) but does not explicitly mention alternatives or exclusions. There is no guidance on when not to use it or how it compares to list_configs or set_config_value.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventGet audit eventARead-onlyInspect
Fetch one audit event by id, with its full detail.
Returns the event's actor, resource (type and id), event type, category,
severity, timestamp, and its data payload. Find an event id with query_events
first; use this to drill into a single event.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | The event's id (from query_events results). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false. The description adds value by enumerating the returned fields (actor, resource, event type, etc.) and noting the `data` payload, giving the agent a clear expectation of the response content without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short paragraphs: the first states purpose, the second lists return details and usage guidance. Every sentence contributes, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with an output schema, the description fully covers purpose, parameter sourcing, workflow, and return contents. It is complete without needing to restate the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes event_id as 'from query_events results' with 100% coverage. The description reiterates this source but does not add new semantic detail beyond the schema, so it meets the baseline for a well-documented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and resource ('audit event') with clear scope ('by id, with its full detail'). It distinguishes from siblings by referencing query_events as the way to find IDs and positioning itself as the drill-down tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use query_events first to obtain an event ID, then use this tool to drill into a single event. This provides clear when-to-use guidance and connects to the sibling workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flagGet feature flagARead-onlyInspect
Get one flag's full config: values plus targeting per environment.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The flag's key. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already indicates this is a safe read operation, and the description does not contradict this. It adds that the tool returns 'values plus targeting per environment,' which is useful but largely redundant given the output schema. No additional behavioral traits like permissions, rate limits, or error cases are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is succinct and front-loaded, conveying the tool's purpose and output content without any filler words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter, an output schema, and clear annotations, the description is largely complete. It covers the main purpose and return scope, though it lacks explicit usage guidelines or edge-case behavior. This is adequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the single required 'key' parameter with 100% coverage, and the description does not add any additional formatting or usage details for it. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get one flag's full config' with specific output details ('values plus targeting per environment'). This distinguishes it from sibling tools like list_flags (which lists all flags) and set_flag (which updates).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for retrieving a single flag's full configuration, but it does not explicitly mention when to use it instead of list_flags or other alternatives. No exclusions or alternative tool references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jobGet jobARead-onlyInspect
Get one job's full configuration (schedule, target request, environments).
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The job's id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the readOnlyHint annotation by specifying the contents of the returned configuration (schedule, target request, environments). It does not contradict annotations and provides a clear picture of what the read operation yields, though it doesn't cover potential edge cases or output format details (covered by output schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core action and then parenthetically lists the configuration contents. Every word contributes meaning, and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter getter tool with a readOnlyHint annotation and an output schema, the description is sufficiently complete. It conveys the purpose and scope of the operation, and the structured schema covers parameters and return values, leaving no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter job_id is fully described in the schema ('The job's id.'), and schema description coverage is 100%. The description does not add any additional parameter semantics beyond confirming it retrieves one job, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get one job's full configuration' with a specific verb, resource, and scope. It distinguishes itself from sibling tools like list_jobs (which lists jobs) and create/update/delete_job by focusing on retrieving a single job's detailed configuration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when one needs a specific job's configuration, but it does not explicitly state when to use this tool versus alternatives. There is no mention of exclusions or when to prefer list_jobs or get_run, making the guidance only implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_loggerGet loggerARead-onlyInspect
Get one logger's configuration: its account-wide default level and per-environment overrides.
Use it to check the current level before or after set_log_level / reset_logger. Logger keys are dot-separated (e.g. 'sqlalchemy.engine'); list_loggers shows which keys exist.
| Name | Required | Description | Default |
|---|---|---|---|
| logger_id | Yes | The logger's dot-separated key (e.g. 'sqlalchemy.engine'). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description adds useful context: it returns account-wide default level and per-environment overrides, and notes that logger keys are dot-separated. This goes beyond the minimal safety profile, though it doesn't describe error behavior or what happens if the logger_id is invalid. Given the simple read-only nature, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: the first states the core function, the second provides usage context, and the third explains key formatting and a discovery tool. It is concise, front-loaded, and free of unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, read-only, with an output schema present), the description covers the essential aspects: what it retrieves, when to use it, and how to format the parameter. No additional information like pagination or return format is needed because the output schema handles that. This is complete for the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes logger_id with 100% coverage: 'The logger's dot-separated key (e.g. 'sqlalchemy.engine').' The description repeats this format but does not add new semantic information beyond reinforcing it. Since the schema carries the burden, a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence clearly states the tool's function: 'Get one logger's configuration: its account-wide default level and per-environment overrides.' This specifies the verb, resource, and scope, distinguishing it from sibling tools like list_loggers (which lists all loggers) and set_log_level/reset_logger (which modify levels).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use it to check the current level before or after set_log_level / reset_logger,' providing a direct use case and related tools. It also mentions list_loggers for discovering existing keys, giving an alternative for a different need (listing). This is clear guidance on when to use this tool versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_runGet job runARead-onlyInspect
Get one run: status, timings, failure reason, and the captured HTTP response.
This is where "what did it return?" lives — the run carries the captured
result (status, headers, body, and whether the body was truncated).
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | The run's id (a UUID). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is known. The description adds value by disclosing the output structure (captured result with status, headers, body, truncation flag) and that it includes timings and failure reason—behavioral details not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the core purpose in the first and useful context about the captured response in the second. No filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single parameter and an output schema available, the description provides all necessary behavioral context: what the run contains, what data is returned, and how to think about the captured result. Annotations cover the read-only nature, so nothing is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully covers the only parameter (run_id, a UUID) with 100% description coverage. The tool description does not add extra meaning about the parameter, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get one run' and lists the exact data returned (status, timings, failure reason, captured HTTP response). This distinguishes it from sibling tools like list_runs (single vs list) and get_job (run vs job).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives contextual guidance ('This is where "what did it return?" lives'), implying it is the tool to use when you need the captured response details. However, it does not explicitly name alternatives or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_configsList configsARead-onlyInspect
List configs with their keys and per-environment values.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of configs to return. | |
| parent | No | Filter to configs inheriting from this parent key. | |
| search | No | Case-insensitive substring match on key and name. | |
| managed | No | True for managed configs only, False for SDK-discovered only. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint already declaring safety, the description adds context about the returned data (keys and per-environment values). However, it does not disclose behaviors such as pagination, default limits, or result ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that is front-loaded with the core purpose. Every word adds value, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with optional filters and an output schema present. The description adequately conveys the return content. It lacks mention of potential pagination or default behavior, but these are partially covered by the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter described. The description adds no additional parameter semantics beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list), the resource (configs), and the content (keys and per-environment values). It distinguishes from sibling tools like get_config (single config) and create_config (mutation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing configs, but it does not explicitly mention when to prefer this over alternatives like get_config or when to use the filters. No exclusions or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_environmentsList environmentsARead-onlyInspect
List the account's environments — the valid targets for every set_* tool.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of environments to return. | |
| search | No | Case-insensitive substring match on key and name. | |
| managed | No | True for managed environments only (writable targets). | |
| classification | No | Filter by 'STANDARD' (deliberately created) or 'AD_HOC' (auto-discovered from SDK traffic). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds the 'valid targets' semantic and account scope. It does not describe pagination or formatting, but with a read-only annotation and output schema this is acceptable. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is information-dense and front-loaded, with no filler or redundancies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with an output schema and fully documented parameters, the description covers the essential purpose and provides contextual value ('valid targets for set_* tools'). It does not need to explain return values since an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for limit, search, managed, and classification. The description adds no parameter-specific information, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' with the resource 'environments', scoped to 'the account's environments', and adds functional context—'valid targets for every set_* tool'—which clearly distinguishes it from sibling list tools like list_forwarders and list_jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states that environments are the valid targets for set_* tools, implying when to use this tool (to find valid targets before calling a set tool). It does not explicitly mention alternatives or exclusions, but there are no direct sibling environment tools, so the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_flagsList feature flagsARead-onlyInspect
List feature flags with their per-environment state.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by type — 'boolean', 'string', 'number', or 'json'. | |
| limit | No | Maximum number of flags to return. | |
| search | No | Case-insensitive substring match on key and name. | |
| managed | No | True for API/console-managed flags only, False for SDK-auto-discovered only. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=false, so the safety profile is known. The description adds meaningful context by specifying that results include per-environment state, which goes beyond the plain 'list' action. It does not describe pagination or sorting, but given the annotations and output schema, the disclosure is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the core purpose and a key output detail. No filler or redundancy exists, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of a list operation with four optional parameters, the schema documents all params, and an output schema exists, the description is nearly complete. It lacks an explicit statement about whether all flags are returned by default (e.g., 'all' vs. paginated), but this is a minor gap given the overall context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (type, limit, search, managed) having a clear description. The tool description itself adds no parameter information, but the schema fully carries that burden, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a clear resource ('feature flags') with an additional qualifier ('with their per-environment state'), making the tool's purpose unambiguous. It distinguishes from sibling tools like get_flag (single flag retrieval) and list_environments (lists environments, not flags).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the tool is for listing all feature flags, but it does not explicitly state when to use it vs. alternatives like get_flag for a single flag, or filter by type. There are no exclusions or alternative tool mentions, leaving usage guidance to inference rather than explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_forwardersList audit forwardersARead-onlyInspect
List SIEM forwarders and their per-environment enablement.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of forwarders to return. | |
| forwarder_type | No | Filter by destination type (datadog, elastic, honeycomb, http, new_relic, splunk_hec, sumo_logic). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so the description's 'per-environment enablement' detail adds useful context about what the list includes. However, it doesn't disclose behaviors like pagination, default limit, or how enablement is represented, leaving the description to rely on the schema and output schema for those details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no filler. It front-loads the action ('List') and resource ('SIEM forwarders') and efficiently includes the 'per-environment enablement' scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with full schema coverage and an existing output schema, the description provides adequate context by mentioning the per-environment enablement aspect. It does not need to explain return values since the output schema exists, and the read-only annotation covers safety behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both limit and forwarder_type described in the input schema. The description does not add any additional meaning beyond what the schema already provides, so it receives the baseline score for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'List' with a specific resource 'SIEM forwarders' and adds the scope 'per-environment enablement', making its function clear. This distinguishes it from sibling create, delete, and test tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool (when you need to list forwarders and their enablement), but does not explicitly mention alternatives or exclusions. The context is straightforward and the read-only nature is evident, so it earns a 4 for clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_jobsList jobsARead-onlyInspect
List the account's configured jobs, each enriched with its latest run.
Use this to see what's scheduled and whether each job's most recent run
succeeded or failed. Each job includes its schedule, target request, and a
last_run summary (status and captured HTTP status).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Filter by kind: 'recurring', 'manual', or 'one_off'. | |
| name | No | Filter to jobs whose name contains this text (case-insensitive). | |
| limit | No | Maximum number of jobs to return. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations declare readOnlyHint=true, the description adds meaningful behavioral context beyond the annotation by explaining that jobs are enriched with a `last_run` summary including status and captured HTTP status. This gives the agent insight into what the response will contain without relying solely on the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with two sentences that immediately state the purpose and usage. Every sentence adds value, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with an output schema and a read-only annotation, the description is complete. It covers what the tool does, when to use it, and the enrichment behavior, leaving no significant gaps for the agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage for all three parameters (kind, name, limit), each with a description. The tool description does not add additional parameter semantics, but the schema already does the heavy lifting, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List the account's configured jobs, each enriched with its latest run.' It uses a specific verb ('List') and identifies the resource ('configured jobs'), and the enrichment detail helps distinguish it from sibling tools like list_runs or get_job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case: 'Use this to see what's scheduled and whether each job's most recent run succeeded or failed.' It doesn't explicitly mention alternatives or exclusions, but the context makes it obvious when to use this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_loggersList loggersARead-onlyInspect
List the loggers smplkit knows about, with their account-wide and per-environment levels.
Includes loggers you've set a level on (managed) and those an SDK has reported
observing (discovered) — filter with managed. Use it to discover the
dot-separated logger keys you can then target with set_log_level.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of loggers to return. | |
| search | No | Case-insensitive substring match on key and name. | |
| managed | No | True for managed loggers only, False for SDK-observed (discovered) only; omit for all. | |
| service | No | Restrict to loggers observed from this service. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description isn't needed for safety. It adds value by disclosing that results include both managed and discovered loggers, and that account-wide and per-environment levels are shown. This goes beyond the annotation and helps the agent understand the tool's output composition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the core purpose, and every sentence adds value. It avoids redundancy and clearly separates the main function, additional details, and use case.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with an output schema and four optional parameters, the description covers the essential aspects: what is returned, the managed/discovered categorization, filtering options, and how the results can be used. It is complete for an agent to decide when to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented already. The description adds minimal extra meaning, only reinforcing that 'managed' can be used as a filter. This doesn't significantly exceed the schema's own descriptions, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as listing loggers known to smplkit, including their levels. It uses a specific verb ('List') and resource ('loggers'), and distinguishes itself from siblings like get_logger (singular) and set_log_level by focusing on discovery of keys.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use the tool: to discover dot-separated logger keys for later use with set_log_level. It also explains the managed/discovered distinction and mentions filtering with 'managed'. It does not explicitly state when not to use alternatives, but the intended workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_runsList job runsARead-onlyInspect
List runs by job, status, trigger, environment, and/or time window.
The pull-based monitoring path: failed_only=true (or status=FAILED)
answers "has anything failed?"; job=<id> shows one job's history.
| Name | Required | Description | Default |
|---|---|---|---|
| job | No | Restrict to one job's run history (the job id). | |
| limit | No | Maximum number of runs to return (default 50). | |
| since | No | Only runs created at/after this ISO-8601 time. | |
| until | No | Only runs created before this ISO-8601 time. | |
| status | No | Restrict to a status, or comma-separated statuses: PENDING, RUNNING, SUCCEEDED, FAILED, CANCELED. | |
| trigger | No | Restrict to a trigger, or comma-separated: SCHEDULE, MANUAL, RERUN, RETRY. | |
| environment | No | Restrict to one or more environments (comma-separated). | |
| failed_only | No | Shortcut for status=FAILED — answers "has anything failed?". | |
| last_run_only | No | Collapse to the last completed run per job-and-environment. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false. The description adds valuable behavioral context by characterizing the tool as a 'pull-based monitoring path' and explaining that failed_only is a shortcut for status=FAILED. It does not contradict annotations, and it does not need to restate safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the core purpose. Every phrase earns its place, and it avoids repeating schema or annotation details. It is concise yet informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 9 optional parameters but a 100% schema description and an output schema, the description covers all major filter dimensions ('job, status, trigger, environment, and/or time window') and gives a real usage scenario. Nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description elevates this by giving practical meaning to failed_only (answers 'has anything failed?') and job (shows one job's history), which helps an agent choose filters correctly beyond the schema's literal parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and states the exact resource ('runs') plus the filter dimensions (job, status, trigger, environment, time window). It clearly distinguishes itself from sibling tools like get_run by focusing on listing/filtering rather than retrieving a single run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly frames the 'pull-based monitoring path' with failed_only=true or status=FAILED for checking failures, and job=<id> for a single job's history. It gives clear usage context but does not explicitly state alternatives or when not to use the tool, such as referencing get_run for individual run details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_eventsSearch audit eventsARead-onlyInspect
Search the immutable audit log — "who changed what, and when?".
Returns matching events newest-first. Every filter is optional and they combine (AND) — call with none to see the most recent activity. Example: resource_type='flag' with since='2026-06-01T00:00:00Z' lists this month's flag changes. Read-only; pass an event's id to get_event to drill into one result.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of events to return (default 50). | |
| since | No | Only events at/after this ISO-8601 time. | |
| until | No | Only events before this ISO-8601 time. | |
| search | No | Case-insensitive substring on resource_id and description. | |
| actor_id | No | Identifier of the actor. | |
| category | No | Exact category label (e.g. 'auth', 'billing'). | |
| severity | No | One of TRACE, DEBUG, INFO, WARN, ERROR, FATAL. | |
| actor_type | No | Kind of actor (e.g. 'USER', 'API_KEY', 'SYSTEM'). | |
| event_type | No | Exact event type (e.g. 'user.created'). | |
| environment | No | Restrict to an environment (comma-separated for several). | |
| resource_id | No | Exact resource id (requires resource_type). | |
| resource_type | No | Exact resource kind (e.g. 'user'). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses additional behavioral traits: the audit log is immutable, results are returned newest-first, filters combine with AND, and the tool is read-only. This goes well beyond what annotations alone provide, giving clear expectations for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: the first states purpose, the second covers ordering and filter combination, and the third gives an example and points to the sibling tool. Every sentence earns its place, and the most critical information is front-loaded. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 12 optional parameters and an output schema, the description appropriately covers the essential behaviors: filter combination, ordering, read-only nature, and an example. All parameter semantics are provided via the schema, so the description does not need to repeat them. It is complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds valuable semantic context beyond the schema by explaining that filters combine with AND and by providing an illustrative example with resource_type and since. This additional information enriches the meaning of parameters without duplicating schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches the immutable audit log, answering 'who changed what, and when?'. The verb 'search' and resource 'audit log' are specific, and it distinguishes itself from the sibling tool get_event by instructing users to use get_event to drill into a single event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: filters are optional and combine (AND), calling with no filters shows most recent activity, and it gives a concrete example. It also points to get_event as the alternative for drilling into a single result, satisfying the when-to-use vs. alternatives criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_loggerReset loggerADestructiveInspect
Stop managing a logger — delete its config so it reverts to the default.
| Name | Required | Description | Default |
|---|---|---|---|
| logger_id | Yes | The logger's dot-separated key. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and non-read-only behavior. The description adds detail that a config is deleted and the logger reverts to default, clarifying the exact effect beyond the annotation flags. No contradiction found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the purpose. Every part of the sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one well-described parameter, an output schema, and clear annotations, the description sufficiently explains the action and effect. It does not cover edge cases like idempotency or missing logger, but that is not essential given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a clear description for logger_id ('dot-separated key') with 100% coverage. The tool description adds no additional parameter meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Stop managing a logger — delete its config so it reverts to the default.' It specifies the verb 'delete' and the resource 'config,' making it distinct from siblings like set_log_level or get_logger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool: when you want to stop managing a logger. It implies usage for reverting to default configuration, though it does not explicitly exclude alternatives or name sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_jobRun job nowADestructiveInspect
Fire one immediate run of a job and return the captured result.
This is the way to prove a job works: it returns the run's status plus the captured HTTP response (status, headers, body) once it finishes. The job's schedule and enabled state are unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Wait for the run to finish and return the captured response (default true). | |
| job_id | Yes | The id of the job to run. | |
| environment | No | Environment to run in. Optional when the job is enabled in exactly one environment; required if it's enabled in several. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it returns the run's status plus captured HTTP response (status, headers, body) upon completion, and that schedule/enabled state are unchanged. Annotations already indicate non-read-only and destructive hint, and the description adds clarity on what exactly is affected and what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences/paragraphs, front-loaded with the action and result, no filler. Wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, description adequately covers purpose, behavior, and side effects. It doesn't explain error cases, but for an immediate-run tool, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage for all three parameters with descriptions. Description doesn't add any parameter-specific semantics beyond what the schema already provides, so baseline 3 holds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Fire one immediate run of a job and return the captured result', which is a specific action on the job resource. It distinguishes from sibling tools like create_job/delete_job by focusing on executing the job, and from list_runs/get_run by producing a new run and returning its captured response.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'This is the way to prove a job works' gives a clear use case, and the clarification that 'schedule and enabled state are unchanged' implicitly tells the user not to use this for configuration changes (use update_job). It doesn't explicitly name alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_config_valueSet config valueADestructiveInspect
Set one config key's value in one environment.
Reads the config, sets the override, and saves the full config, so other keys and environments are preserved. The key is auto-declared (type inferred) if it isn't already defined.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The item key within the config (e.g. 'database.host'). | |
| value | Yes | The value to set for this key in this environment. | |
| config_id | Yes | The config's key. | |
| environment | No | Environment to set the value in (default 'production'). Use list_environments to see valid targets. | production |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the destructiveHint annotation by explaining the full workflow: reads config, sets override, saves full config, and preserves other keys/environments. It also discloses the auto-declaration behavior for keys, which is not evident from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loads the purpose, and every sentence conveys essential behavioral information. There is no repetition, fluff, or redundant schema restating.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and annotations, the description covers the tool's behavior comprehensively: what it does, its side effects (preserving other keys/environments), and edge cases (auto-declaration of keys). No critical information is missing for an agent to decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining that the key is auto-declared (type inferred) if not already defined, providing meaning beyond the schema's simple field descriptions. This slightly elevates the score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Set one config key's value in one environment,' which is a specific verb+resource+scope. It clearly distinguishes this from sibling tools like get_config, delete_config, and set_flag by focusing on a single config key in a single environment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context by explaining the read-modify-save behavior and noting that other keys and environments are preserved. It does not explicitly mention when not to use this tool or name alternatives, but the context makes the intended use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_flagSet feature flagADestructiveInspect
Set a flag's value, kill switch, and targeting in one environment.
Reads the flag, applies your change, and saves the full flag, so other environments are preserved. Pass only what you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The flag's key. | |
| rules | No | **This replaces the environment's entire rule set.** To add a rule without dropping the others, call get_flag first and pass the full list including the existing ones. Each rule is {"when": [{"attribute","operator","value"}, ...], "serve": <value>, "description"?: str}; conditions are AND-ed. Operators: ==, !=, >, <, >=, <=, in, contains. Pass [] to clear all rules. | |
| value | No | The value served in this environment when no rule matches (the per-environment default). Omit to leave it unchanged; pass null to clear it so the environment falls back to the flag's global default. | |
| enabled | No | The kill switch. False skips all rules and serves the flag's global default; True re-enables targeting. | |
| environment | No | Environment to change (default 'production'). Use list_environments to see valid targets. | production |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses that the tool reads, applies changes, and saves the full flag to preserve other environments. This adds valuable behavioral context without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with the purpose front-loaded. Every sentence contributes meaningful information, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and detailed parameter schemas, the description sufficiently covers the core behavior and partial-update semantics. It could mention the destructive potential of specific arguments, but the schema already covers that nuance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage with detailed descriptions for all parameters. The description reinforces the optionality of parameters ('Pass only what you want to change'), but adds little beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Set a flag's value, kill switch, and targeting in one environment,' using a specific verb and resource. This distinguishes it from sibling tools like create_flag, get_flag, and delete_flag, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the read-modify-write behavior and that you can 'Pass only what you want to change,' which guides partial updates. It doesn't explicitly state when not to use (e.g., for creating a new flag), but the context is clear enough given sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_log_levelSet log levelADestructiveInspect
Set a logger's level in one environment (creates the logger if needed).
Use this to dial up verbosity (e.g. DEBUG) to investigate an issue, then reset_logger to revert. Other environments are preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| level | Yes | One of TRACE, DEBUG, INFO, WARN, ERROR, FATAL, SILENT. | |
| logger_id | Yes | The logger's dot-separated key (e.g. 'sqlalchemy.engine'). | |
| environment | No | Environment to set the level in (default 'production'). Use list_environments to see valid targets. | production |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description adds value beyond that with 'creates the logger if needed' and 'Other environments are preserved'. It clearly communicates the scoped side effect, which is exactly the behavioral nuance expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is economical and well-structured: a single opening sentence stating the core action and side effect, followed by a two-sentence usage note. No redundant phrasing; every sentence adds useful guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simple scope, the description covers the essential behavior (set level, create if needed), the per-environment preservation, and practical usage with reset_logger. An output schema exists, so return values need no explanation, and the annotation set is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% since all parameters are described. The description enhances parameter meaning with 'dial up verbosity (e.g. DEBUG)' for the level parameter and 'Other environments are preserved' clarifying the environment parameter's scoping, going beyond the schema's baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Set a logger's level') and includes the key scope 'in one environment' and side effect 'creates the logger if needed'. It clearly distinguishes from sibling tools like reset_logger and list_loggers by focusing on the mutation action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly guides when to use the tool: 'dial up verbosity (e.g. DEBUG) to investigate an issue' and names the alternative for reverting: 'then reset_logger to revert'. It also mentions list_environments implicitly for valid targets, giving clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_forwarderTest audit forwarderAInspect
Dry-run a forwarder destination before saving it.
Sends one sample request to the destination and returns whether it succeeded, the response status/headers/body, and the latency — so you can prove a SIEM endpoint works before wiring create_forwarder.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Destination URL to test (publicly reachable). | |
| body | No | Optional request body sent verbatim. | |
| method | No | HTTP method (default POST). | POST |
| ca_cert | No | Optional PEM CA certificate to verify a self-signed destination. | |
| headers | No | HTTP headers to send, as a name->value object. | |
| timeout_ms | No | Per-request timeout in milliseconds (max 30000). | |
| tls_verify | No | Whether to verify the destination's TLS certificate (default true). | |
| success_status | No | Status that counts as success — a code or class (default '2xx'). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral aspects beyond annotations: it sends a sample request, returns success status/response parts/latency, and is safe ('Dry-run'). Annotations include readOnlyHint=false (which could imply mutation) but the description explicitly states it is a dry-run and non-destructive, clarifying that no state is saved. It also explains the purpose ('prove the endpoint works') which adds behavioral context. This goes above and beyond what annotations provide, so a 5 is warranted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences plus a return-value list. It front-loads the core action ('Dry-run a forwarder destination') and then adds the key details (what it returns and why to use it) without fluff. Every sentence earns its place, and the structure is tight and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has high complexity (8 params, output schema, sibling operations), yet the description covers the core purpose, usage context, return values, and clarifies safety (dry-run). The output schema details the response structure, so the description doesn't need to explicitly list return fields, but it does summarize what's returned. The description is complete for an agent to decide when to invoke and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains every parameter. The description adds value by explaining the overall semantics of the tool (sending a sample request and returning diagnostics), but does not repeat parameter details. Since coverage is complete and the description reinforces the purpose, a baseline 3 is exceeded slightly because the description provides a mental model of how the parameters fit together (e.g., 'sample request' implies the url/body/method are used together). However, it doesn't add per-parameter nuance, so 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Dry-run a forwarder destination'), names the resource ('destination'), and clearly distinguishes from siblings by explaining its purpose: 'prove a SIEM endpoint works before wiring create_forwarder'. It also mentions the exact actions and return values, making it unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'Dry-run a forwarder destination before saving it' and 'prove a SIEM endpoint works before wiring create_forwarder'. It not only gives the context but also names the alternative (create_forwarder) and positions this as a pre-check, effectively saying 'use this instead of directly creating'. This is a clear when-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_jobUpdate jobADestructiveInspect
Change a job. Only pass the fields you want to change.
The tool reads the current job, applies your change, and saves the full updated job, so a partial change like "move it to 8am" works correctly.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | New destination URL (must be publicly reachable). | |
| body | No | Replace the request body. | |
| name | No | New name. | |
| job_id | Yes | The id of the job to change. | |
| method | No | New HTTP method. | |
| run_at | No | New one-time run datetime (makes the job one-off). | |
| enabled | No | Enable (true) or disable (false) the job in an environment. | |
| headers | No | Replace the request headers. | |
| timeout | No | New per-run timeout in seconds. | |
| schedule | No | New cron schedule (makes the job recurring). | |
| timezone | No | New IANA timezone for the cron schedule. | |
| description | No | New description. | |
| environment | No | Environment that `enabled` applies to (default 'production'). | |
| retry_policy | No | New named retry-policy id; manage policies in the console. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses the read-modify-write behavior ('reads the current job, applies your change, and saves the full updated job'), which is valuable beyond the destructiveHint annotation. This explains why partial changes work correctly, adding meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the primary action, and every word earns its place. The second sentence explains the partial-update mechanism using a concrete example, making it both concise and instructive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich 14-parameter schema, output schema, and a clear explanation of partial-update semantics, the description covers the core interaction. It does not fully anticipate edge cases like clearing fields with null, but the schema descriptions and annotations fill most gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive parameter text, so the baseline is 3. The description adds important parameter semantics by emphasizing that only changed fields need to be passed, and the example 'move it to 8am' illustrates how run_at can be used without touching other fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Change a job' — a specific verb and resource that clearly distinguishes this from siblings like create_job, delete_job, and run_job. It also clarifies the scope (an existing job) without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The instruction 'Only pass the fields you want to change' provides clear usage context for partial updates. While it does not explicitly name alternatives or exclusions, the wording implies this is the tool for modifying existing jobs, which is sufficient given the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
29 tool updates
v0.10.4- First observed
create_config - First observed
create_flag - First observed
create_forwarder - First observed
create_job - First observed
delete_config - First observed
delete_flag - First observed
delete_forwarder - First observed
delete_job - First observed
get_config - First observed
get_event - First observed
get_flag - First observed
get_job - First observed
get_logger - First observed
get_run - First observed
list_configs - First observed
list_environments - First observed
list_flags - First observed
list_forwarders - First observed
list_jobs - First observed
list_loggers - First observed
list_runs - First observed
query_events - First observed
reset_logger - First observed
run_job - First observed
set_config_value - First observed
set_flag - First observed
set_log_level - First observed
test_forwarder - First observed
update_job
TDQS
Scored across 29 tools
Each tool targets a distinct resource (forwarder, config, logger, job, run, flag, event, environment) and a specific action (list, create, get, update, set, delete, test, run, query, reset). Resource names are in tool names, so there is no ambiguity between, e.g., get_config, get_logger, get_flag.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., list_forwarders, create_job, set_log_level). Standard verbs are used throughout, with no camelCase or mixed conventions. Naming is predictable and systematic.
With 29 tools, the server covers a broad platform including forwarders, configs, loggers, jobs, runs, flags, events, and environments. While this exceeds the typical 3-15 range, each tool serves a distinct purpose and is justified by the multiple resource types. It is slightly heavy but not bloated.
The tool surface provides near-complete lifecycle coverage: full CRUD for configs, flags, and jobs; manage/read for loggers; read-only for runs and events; and list/test/create/delete for forwarders. The only notable gap is the lack of an update_forwarder, but delete+recreate works as a workaround.
Maintenance
Related MCP Connectors
- golemryOAuthcom.golemry
Create and manage scheduled, guarded AI agent jobs with built-in quality control and 900+ connectors
Schedule tasks for later from your AI agent: reminders, delayed webhooks, recurring jobs.
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Build, validate, deploy — HTTP APIs, cron jobs, webhooks and MCP tools — from your AI client.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agent and task management using the CrewAI framework, allowing users to create and run agents and tasks in an automated workflow environment.06-
- AlicenseNot gradedqualityDmaintenanceEnables creation and management of scheduled tasks with interval, cron, or one-time triggers. Persists tasks in SQLite and supports MCP sampling to automatically invoke AI agents when schedules trigger.93MIT
- FlicenseAqualityDmaintenanceLets AI agents schedule and manage HTTP jobs, cron schedules, rate-limited buffers, and alert channels via natural language, backed by Fliq's Postgres-native job scheduler.21-
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to manage projects, tasks, and schedules in JJ Planner through CRUD operations.86-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/smplkit/mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server