DenkOps
Server Details
Deploy APIs, MCP servers and scheduled jobs on managed EU hosting. Sign in with Google or GitHub.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- DenkOpsAI/denkops-mcp
- GitHub Stars
- 0
- ChatGPT
- –
- Claude
- –
TDQS
Score is being calculated.
Available Tools
62 toolsadd_connector_accountAdd a connector accountInspect
Create an email/password account for a connector project. A strong password is generated and shown only once; pass it to the person securely. Password sign-in must be enabled for it to work. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | |||
| project_id | Yes | The project id |
add_domainAdd a custom domainInspect
Attach a custom domain to a DenkOps project. Returns the DNS TXT record (and CNAME target) to set at the DNS provider; the domain starts routing once its TXT record is verified.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| project_id | Yes | The DenkOps project id |
cancel_inviteCancel an inviteDestructiveIdempotentInspect
Cancel a pending workspace invite. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| invite_id | Yes | The invite id |
create_alert_ruleCreate an alert ruleInspect
Create an alert rule for an event (crash, killed, rate_limit, deploy_failed) on one project or all, optionally posting to an https webhook (e.g. Slack). Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| event_type | Yes | ||
| project_id | No | The project id | |
| webhook_url | No |
create_connectionCreate a connectionAInspect
Mint a new scoped, revocable DenkOps connection token for a CLI, CI job or agent (e.g. GitHub Actions deploys). The token is returned exactly once and cannot be retrieved again. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| projects | No | restrict to these project ids (default: all projects) | |
| env_scope | No | env var access scope (default none) | |
| agent_type | No | e.g. claude-code, codex, openclaw, hermes, other (default other) | |
| expires_in_days | No | null = never expires (default 90) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the write/non-idempotent profile, so the description adds real value: the token is returned exactly once and cannot be retrieved again, it is scoped and revocable, and it requires workspace-owner authorization. It omits failure behavior and any rate or count limits on tokens.
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 short sentences, front-loaded with the action and audience, then the critical one-time-return caveat, then the permission constraint. No filler or restated title.
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 5-parameter creation tool with no output schema, the description covers purpose, the irreversible one-shot secret return, and authorization. It leaves the scope defaults (env_scope none, all projects, 90-day expiry) entirely to the schema, which is acceptable but leaves the agent slightly under-briefed on scope implications.
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 80%, so the schema already documents projects, env_scope, agent_type, and expiry defaults. The description only gestures at scoping ('scoped') without explaining label, project restriction, or expiry choices, so it adds little beyond the schema. 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?
States a specific verb and resource ('Mint a new scoped, revocable DenkOps connection token') plus the concrete use cases (CLI, CI job, agent, GitHub Actions deploys). It does not explicitly distinguish itself from siblings like regenerate_connection or update_connection_scopes, though the word 'new' implies the distinction.
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?
Gives clear when-to-use context (automating a CLI, CI job, or agent) and a concrete example (GitHub Actions deploys), plus a hard prerequisite ('Workspace owners only'). It stops short of naming alternatives or stating when not to use this tool versus regenerate_connection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_workspaceCreate a workspaceInspect
Create a new workspace owned by the signed-in person. This connection keeps acting in its current workspace; reconnect to use the new one.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
delete_alert_ruleDelete an alert ruleDestructiveIdempotentInspect
Delete an alert rule. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | The rule id |
delete_projectDelete a projectDestructiveInspect
PERMANENTLY delete a DenkOps deployment and ALL its data (containers, images, volume and records). Cannot be undone. Only deletes when confirm equals the project's exact slug; without it nothing is deleted and the confirmation requirement is returned.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | The project's exact slug, to confirm permanent deletion | |
| project_id | Yes | The DenkOps project id |
deployDeploy to DenkOpsAInspect
Deploy a project to DenkOps by sending its files, and get the live URL back. Include every source file (and denkops.json if the project has one; without it a new project is created, named from name, package.json or pyproject.toml). Pass project_id to ship a new version of an existing project. Secrets do not belong in files: .env files are rejected (set environment variables separately). Limits: 500 files, 5 MB.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Project name for a first deploy without denkops.json | |
| files | Yes | ||
| project_id | No | Existing project to deploy a new version to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: it discloses the 500-file / 5 MB limits, that .env files are actively rejected, that a missing denkops.json creates a new project, and the naming fallback order (name, package.json, pyproject.toml). It also states the return value (live URL), which the annotations cannot convey since there is no 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?
Front-loads the action and outcome in the first sentence, then the branching rule (project_id), then the hazard (.env), then the hard limits. Dense but every clause carries information and nothing is repeated from the schema.
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 write operation with no output schema and nested file objects, the description covers action, input shape, failure conditions, limits and the return value. An agent could invoke it correctly from this text alone.
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?
Adds real meaning beyond the 67%-covered schema: it explains how `name` interacts with denkops.json, when `project_id` applies, and that `files` must include every source file rather than a delta. Only minor gap is it does not mention the `encoding` enum, which the schema covers on its own.
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?
Opens with a specific verb and resource ("Deploy a project to DenkOps by sending its files") plus the outcome ("get the live URL back"). It is clearly distinct from siblings like redeploy, rollback, start_project and list_deployments, since it is the only tool that takes a file payload.
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?
Gives clear routing logic: omit project_id to create a new project, pass project_id to ship a new version of an existing one, and .env files are rejected so env vars should be set separately. The gap is that it never names the `redeploy` sibling or explains when re-uploading files beats redeploying an existing build.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audit_logShow the audit logRead-onlyIdempotentInspect
Show the workspace's recent audit log: who did what, when. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
get_billing_linkGet a Stripe billing linkAInspect
Get a one-click Stripe link for this workspace: subscribe (optionally with extra slots), add slots to an existing subscription, or fix a failed payment. Nothing is charged until the user confirms on Stripe. Workspace owners only; other members are told which owner to ask.
| Name | Required | Description | Default |
|---|---|---|---|
| extra_slots | No | Extra slots on top of the plan (default 0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-read-only, non-destructive, open-world, non-idempotent operation, and the description adds genuinely useful context beyond them: no charge occurs until the user confirms on Stripe, and permission gating behavior for non-owners. It does not mention link expiry or whether repeated calls mint distinct sessions, which is the main remaining behavioral unknown given idempotentHint=false.
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 sentences with no filler: the action and its three modes come first, then the no-charge guarantee and the permission rule. Every clause carries decision-relevant 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?
For a one-optional-parameter tool with no output schema, the definition covers the action, the modes, the safety guarantee, and authorization behavior. It is only slightly short of complete because it does not say what form the returned link takes or how long it stays valid.
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% and the single parameter is already documented, so the baseline is 3. The description earns an extra point by tying extra_slots to specific modes ('subscribe (optionally with extra slots), add slots to an existing subscription'), clarifying that the same parameter serves both a new and an existing subscription context.
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 gives a concrete verb and resource ('Get a one-click Stripe link for this workspace') and enumerates the three outcomes it can produce: subscribe with optional extra slots, add slots to an existing subscription, or repair a failed payment. That clearly separates it from the read-only sibling get_plan, though it never names that sibling, so it stops short of a top score.
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 when-to-use cases are explicit (new subscription, slot expansion, failed payment recovery) and the eligible audience is stated ('Workspace owners only; other members are told which owner to ask'). What is missing is a when-not-to-use note pointing at get_plan for simply inspecting the current plan or quota.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_connection_activityShow connection activityRead-onlyIdempotentInspect
Show recent actions performed with one connection token. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | The connection id |
get_connector_accessShow connector accessRead-onlyIdempotentInspect
Show who may connect to a connector project (public, an email allowlist, or workspace members) and which sign-in methods are allowed. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project id |
get_connector_brandingShow connector brandingARead-onlyIdempotentInspect
Show the brand colours and icon used on a connector project's hosted sign-in and consent pages.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The DenkOps project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds what the branding consists of and where it is applied, which is helpful context, but says nothing about behavior when branding is unset (defaults), whether the icon is returned as a URL or binary, or auth requirements.
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?
It is a single front-loaded sentence with no filler or redundancy. There is no structural elaboration (no notes or caveats), but nothing in the sentence is wasted.
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 one-parameter, read-only lookup with rich annotations and no output schema, the description conveys enough to call it correctly. The only mild gap is what happens when a project has no custom branding configured.
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 a single required project_id parameter whose pattern and meaning are documented in the schema. The description adds no further meaning about the identifier, so the 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 pairs a specific verb ("Show") with a specific resource (a connector project's brand colours and icon) and even names where that branding surfaces (hosted sign-in and consent pages). An agent can distinguish it from set_connector_branding by the read/retrieve framing, though it never names that sibling explicitly.
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?
Usage is only implied: it is evidently a read of branding metadata for a given project. There is no statement of when to prefer this over alternatives (e.g., set_connector_branding for mutation) and no prerequisites or exclusions, so the agent must infer intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_container_logsRead container logsRead-onlyIdempotentInspect
Read recent container logs for a DenkOps project, e.g. to debug a failing deploy. Optional since (15m, 2h, 3d or an ISO timestamp) and level (a token matched in the log line, e.g. error) filter the persisted log store.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | ||
| lines | No | ||
| since | No | ||
| project_id | Yes | The DenkOps project id |
get_denkops_guideDenkOps build and deploy guideARead-onlyIdempotentInspect
Explains how to structure, configure (denkops.json) and deploy a DenkOps project: bun-Hono or python-FastAPI APIs and MCP servers built with defineMcp.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing further about behavior — it does not say whether the response is static reference text, a structured outline, or version-specific to the user's project, nor whether any auth or workspace context is required. Some added context, but thin against a lowered bar.
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?
A single sentence with the primary scope ('structure, configure, deploy') front-loaded and the supported stack details following as qualifiers. Every clause carries information; there is no padding or repetition of the title.
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 zero parameters, a rich annotation set and no output schema, the description needs only to establish scope and it does so completely enough for selection. The one residual gap is that it never says what comes back (reference documentation content) or that it is the canonical starting point before build/deploy actions, which would help an agent order its calls.
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 tool takes zero parameters, so the baseline is 4 and the description correctly avoids inventing any. The scope words in the description (bun-Hono vs python-FastAPI, defineMcp) act as implicit topic filters an agent can reason about, though it does not confirm whether the full guide is always returned or can be targeted.
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 verb ('Explains how to') and enumerates the covered subject matter: project structure, denkops.json configuration, and deployment for bun-Hono or python-FastAPI APIs and defineMcp-based MCP servers. This makes clear it is a documentation/guidance tool, distinct from action siblings such as deploy or start_project. It stops short of explicitly contrasting itself with those siblings, which keeps it out of 5 territory.
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?
Usage is only implied: an agent can infer this is the thing to read before structuring or deploying a DenkOps project, but there is no explicit 'use this when' clause and no mention of when not to use it or which sibling to prefer instead. No prerequisites or sequencing guidance (e.g., consult before calling deploy) is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_egress_policyGet egress policyRead-onlyIdempotentInspect
Read a project's outbound-network (egress) allow-list policy: enabled, allowed hosts and recently blocked hosts.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The DenkOps project id |
get_member_accessShow a member's project accessRead-onlyIdempotentInspect
List the per-project role overrides of one workspace member. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user id |
get_metricsGet project metricsARead-onlyIdempotentInspect
Get a DenkOps project's request metrics (latency percentiles, error rate), latest resource sample and rejected-request count over the last 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The DenkOps project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: the fixed 24-hour lookback window and the specific data families returned, which matters since there is no 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?
One sentence, front-loaded with the verb and resource, with the enumerated contents and time window packed in without filler. Every clause contributes 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?
For a one-parameter read tool with full annotation coverage, the description is nearly complete: it names the time window and the returned data, compensating for the absent output schema. The only minor gap is that units or aggregation semantics for latency percentiles are not specified.
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 (project_id) is fully documented in the schema with a pattern constraint, so the schema carries the load. The description only implies that the id names a DenkOps project and adds no syntax, format, or scope details beyond that.
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 gives a specific verb ('Get') and resource ('a DenkOps project's request metrics') and enumerates the payload: latency percentiles, error rate, latest resource sample, rejected-request count. It is clear enough to distinguish from list-style siblings, though it does not explicitly contrast with near neighbours like get_status or get_trace.
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?
Usage is only implied: the metrics content and the 'last 24h' window suggest this is the tool for checking project performance and health. There is no statement about when to prefer it over get_status, get_trace, or get_workspace_overview, and no prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_planShow plan and slot usageARead-onlyIdempotentInspect
Show the workspace's plan: slots used and still free, subscription status and renewal date, and prices. Use it when a new project might not fit or the user asks about their plan or slots.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is settled. The description adds what the call actually surfaces (slot counts, subscription status, renewal date, prices), which is real context beyond the annotations, though it says nothing about access requirements for reading billing data.
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 tight sentences: the first defines the payload, the second defines the trigger. Front-loaded and free of restated title text 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?
With no output schema, the description usefully lists what comes back, and a read-only, zero-parameter tool of this kind needs little more. Minor gaps remain around whether admin-level access is required and how the price data is formatted.
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 tool takes no parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The schema is trivially complete and the description correctly spends no words on inputs.
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?
States a specific verb ('Show') and resource ('the workspace's plan') and enumerates the returned content: slots used and free, subscription status, renewal date, and prices. That content profile makes it distinguishable from siblings such as get_billing_link and get_workspace_overview without opening any schema.
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?
Gives two concrete triggers: when a new project might not fit, or when the user asks about their plan or slots. It does not name an alternative tool or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_accessShow project accessRead-onlyIdempotentInspect
Show each member's workspace role and effective role on one project (none = the project is hidden from them). Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project id |
get_public_pathsList public pathsRead-onlyIdempotentInspect
List a DenkOps project's public (unauthenticated) paths, plus the routes DenkOps has observed the app serve.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The DenkOps project id |
get_statusGet project statusRead-onlyIdempotentInspect
Get a DenkOps project's status and active version by project_id.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The DenkOps project id |
get_traceGet a request traceARead-onlyIdempotentInspect
Get the spans of a single DenkOps request trace by project_id and trace_id.
| Name | Required | Description | Default |
|---|---|---|---|
| trace_id | Yes | The trace id | |
| project_id | Yes | The DenkOps project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description adds that the result is the span set for one trace, which is useful context, but says nothing about ordering, truncation, or volume of spans 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?
A single front-loaded sentence with zero filler: verb, resource, and both identifying inputs in one pass. Nothing is redundant or buried.
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 no output schema, the description carries the burden of describing the return value, and it only says 'spans' without indicating shape, ordering, or size. For a two-parameter read tool with strong annotations this is minimally adequate, but an agent still lacks a picture of what comes back.
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 both parameters are already documented in the schema with patterns and required status. The description only restates that both ids are used to identify the trace, adding no meaning beyond what the schema provides — the appropriate baseline of 3.
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 ('Get') plus a precise resource ('the spans of a single DenkOps request trace'), so an agent knows it returns span data rather than a trace summary or list. It doesn't explicitly name sibling list_traces as the alternative for enumerating traces, so differentiation is implied by 'single' rather than stated.
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?
Usage is implied by the 'by project_id and trace_id' phrasing: this tool is for retrieving one already-known trace. There is no explicit when-to-use/when-not clause, no pointer to list_traces for discovering a trace_id, and no statement about what happens if the trace doesn't exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workspace_overviewWorkspace overviewRead-onlyIdempotentInspect
One overview of the workspace: slot usage and every project with status, active version and latest memory/CPU use.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
invite_memberInvite a workspace memberInspect
Invite someone to the workspace by email address (or GitHub username) with a role. No email is sent: the result contains a short text with the sign-in link to pass on. They join when they sign in with that email (Google, or their primary GitHub email); an existing DenkOps user with that email is added right away. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | member | |
| No | |||
| github_login | No |
list_alert_eventsList alert eventsRead-onlyIdempotentInspect
Show recent alert events (crashes, kills, rate limits, failed deploys). Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
list_alert_rulesList alert rulesRead-onlyIdempotentInspect
List the workspace's alert rules (crash, killed, rate_limit, deploy_failed) and where they notify. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
list_connectionsList connectionsARead-onlyIdempotentInspect
List the workspace's DenkOps connection tokens (scoped, revocable agent/CLI credentials): label, agent type, scopes and status. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real value beyond those annotations: it discloses the owner-only authorization requirement and the nature of the returned records (scoped, revocable credentials).
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?
It is a single dense sentence with the resource and return fields front-loaded and the access constraint last. Nothing is redundant with the title or annotations.
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?
There is no output schema, so the description correctly names the returned fields (label, agent type, scopes, status) and the access rule. For a zero-parameter read tool that is nearly sufficient; only pagination or result-size behavior is unaddressed, and with no parameters there is likely none.
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 tool takes no parameters, so there is no parameter meaning for the description to explain. This is the 0-parameter 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 and resource, 'List the workspace's DenkOps connection tokens', and then defines that resource as 'scoped, revocable agent/CLI credentials' with the fields label, agent type, scopes and status. This lets an agent understand what a connection is without opening other tools. It doesn't name a sibling to contrast with list_connector_accounts, so it stops short of 5.
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 the permission constraint 'Workspace owners only', which implicitly tells the agent when this call will succeed. It doesn't say when to use this rather than a sibling such as get_connection_activity or list_connector_accounts, and it states no exclusions, so the guidance is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_connector_accountsList connector accountsRead-onlyIdempotentInspect
List the email/password accounts that can sign in to a connector project. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project id |
list_cronsList scheduled jobsARead-onlyIdempotentInspect
List a project's managed scheduled (cron) jobs with next and last run and status.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The DenkOps project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds value beyond them by naming the payload fields returned (next run, last run, status), which matters because there is no output schema. It stops short of pagination, ordering, or empty-result behavior.
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?
One sentence, front-loaded with the verb and resource, with the returned fields appended. No filler, no redundancy with the title or annotations.
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 one-parameter, read-only list tool with no output schema, the description conveys enough to call it correctly and previews what comes back. Minor gaps remain around result ordering, pagination, and behavior when no crons exist.
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?
There is a single required parameter with 100% schema description coverage, so the baseline is 3. The phrase "a project's" confirms the tool is scoped to project_id but adds no format, default, or constraint detail beyond the schema's pattern and description.
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?
Specific verb + resource ("List ... scheduled (cron) jobs") with an explicit scope ("a project's managed"). It reads clearly apart from the mutating siblings run_cron and set_cron_enabled, though it never names them to sharpen the distinction.
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?
Usage is only implied: an agent infers this is the read path for inspecting cron jobs, as opposed to run_cron (trigger) or set_cron_enabled (toggle). There is no explicit when-to-use, when-not-to-use, or prerequisite statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deploymentsList deployed versionsRead-onlyIdempotentInspect
List a project's deployed versions (newest first) with status and when; the active version is marked. Useful before rolling back.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project id |
list_domainsList custom domainsRead-onlyIdempotentInspect
List a DenkOps project's custom domains and whether each is verified.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The DenkOps project id |
list_envList environment variablesRead-onlyIdempotentInspect
List a DenkOps project's environment variable KEYS (values are write-only and never shown), and whether changes are pending a redeploy.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The DenkOps project id |
list_membersList workspace membersRead-onlyIdempotentInspect
List the workspace's members with their roles, and pending invites. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
list_projectsList DenkOps projectsRead-onlyIdempotentInspect
List the DenkOps projects in the signed-in workspace with their status and URL.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
list_tracesList request tracesARead-onlyIdempotentInspect
List recent request traces for a DenkOps project (name, status, duration, span count).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The DenkOps project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered externally. The description adds only that results are "recent" and what fields come back, without defining the recency window, result limits, or pagination behavior.
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?
A single front-loaded sentence with the resource and scope stated first and the field list in a compact parenthetical. No sentence is wasted and there is no redundant restatement of the title.
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 no output schema, the description does the necessary work of naming the returned fields (name, status, duration, span count). The only shortfall for a simple one-parameter list tool is the undefined recency window and result-size expectations.
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?
With a single parameter and 100% schema description coverage, the schema already documents project_id and its pattern. The description adds no further meaning such as accepted id formats or aliases, so the 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?
"List recent request traces for a DenkOps project" gives a specific verb and resource with a clear scope, and the parenthetical enumerates the returned fields. It does not explicitly distinguish itself from the sibling get_trace, which is the only remaining 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?
Usage is only implied: "List" versus the singular sibling get_trace suggests this is the browse-first call, but the description never says when to prefer one over the other. There is also no guidance on the meaning of "recent" or whether the result set is capped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspacesList workspacesRead-onlyIdempotentInspect
List the workspaces of the signed-in account with roles, and which one this connection acts in.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
redeployRedeploy a projectInspect
Re-run the current version of a DenkOps project to apply staged env or path changes or restart the app. Reuses the last upload; no code is sent.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The DenkOps project id |
regenerate_connectionRegenerate a connection tokenDestructiveInspect
Issue a new token for a connection and revoke the old one (e.g. after a leak). The new token is shown only once. Not for the connection this chat uses. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | The connection id |
remove_connector_accountRemove a connector accountDestructiveIdempotentInspect
Delete an email/password account from a connector project. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | |||
| project_id | Yes | The project id |
remove_domainRemove a custom domainCDestructiveIdempotentInspect
Detach a custom domain from a DenkOps project.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_id | Yes | The domain id | |
| project_id | Yes | The DenkOps project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the description is not obligated to restate safety. However, it adds nothing beyond the title: it does not say whether DNS records or TLS certs are released, whether traffic stops immediately, or whether the domain can be re-added.
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?
A single front-loaded sentence with no wasted wording. It is efficient, though the brevity borders on under-specification for a destructive operation.
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, irreversible-feeling mutation with no output schema, the description should state consequences and post-conditions (e.g., DNS/TLS teardown, effect on live traffic). Annotations cover the safety flag but not the operational impact, leaving a meaningful gap.
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 two well-documented required parameters (project_id, domain_id). The description adds no extra meaning about identifier formats or lookup behavior, so the baseline 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 names a specific verb and resource ('Detach a custom domain') scoped to a 'DenkOps project', so the operation is unambiguous. It does not contrast with siblings such as add_domain, verify_domain, or list_domains, which keeps it from a 5.
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?
There is no guidance on when to use this instead of alternatives (e.g., verify_domain first, or add_domain/add_domain to re-attach), and no stated prerequisites or warnings. An agent must infer everything about timing and sequencing from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_memberRemove a workspace memberDestructiveIdempotentInspect
Remove a member from the workspace; their access (including chat connections) ends immediately. The last owner can't be removed. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user id |
reset_connector_account_passwordReset a connector account passwordDestructiveInspect
Generate a new password for a connector project's email/password account; the old one stops working. Shown only once. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | |||
| project_id | Yes | The project id |
revoke_connectionRevoke a connectionADestructiveIdempotentInspect
Immediately revoke a DenkOps connection token by its connection_id. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | The connection id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds two pieces of context the annotations do not: the revocation takes effect immediately (no grace period) and the caller must be a workspace owner, which is actionable auth information. It stops short of saying whether a revoked token can be restored or what happens to in-flight activity, which keeps it from a 5.
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 zero filler, and the core action plus the immediacy qualifier are front-loaded ahead of the permission constraint.
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 one-parameter destructive tool whose annotations already declare idempotency and destructiveness, the definition covers action, target, timing and authorization. The only material gap is the downstream consequence of revocation (whether dependent connections break or tokens can be reissued), which an agent might want before calling 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% and the single parameter carries a documented pattern, so the schema already does the work. The phrase 'by its connection_id' only restates the parameter name and adds no format or sourcing detail. 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 gives a specific verb plus resource ('revoke a DenkOps connection token') and names the identifier used to target it, so the operation is unmistakable. It doesn't explicitly contrast with adjacent siblings like regenerate_connection or update_connection_scopes, but the verb 'revoke' is distinct enough to separate it from listing or creation 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?
'Workspace owners only' establishes a prerequisite for use, which is real guidance. However, there is no explicit statement of when to choose this over regenerate_connection (rotate vs. kill) or what situation warrants immediate revocation, so the choice between siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollbackRoll back a projectDestructiveInspect
Roll a DenkOps project back to a previous healthy version (omit version for the previous one).
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | ||
| project_id | Yes | The DenkOps project id |
run_cronRun a scheduled job nowAInspect
Trigger a managed scheduled job immediately (recorded as a manual run).
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The job id | |
| project_id | Yes | The DenkOps project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the safety profile is covered. The description adds one genuinely useful fact beyond them — the invocation is recorded as a manual run, implying a persistent run record is created — but says nothing about what happens if the job is disabled or whether a run identifier is produced for follow-up.
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?
A single front-loaded sentence with the action first and the notable side effect in parentheses; there is no filler and nothing that could be trimmed without losing 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?
For a two-parameter action tool with full schema coverage, explicit annotations, and no output schema, the description covers what the tool does and its main side effect. The remaining gap — whether a run handle is returned and how to observe the result — is modest but real for a fire-and-forget trigger.
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 only two required string parameters (project_id, job_id) carrying patterns, so the schema does the heavy lifting. The description adds no meaning about identifier formats or scoping beyond what the schema states; 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 names a specific verb ("Trigger") and resource ("managed scheduled job") and adds a scope qualifier ("immediately"), which separates it from list_crons (read) and set_cron_enabled (toggle). It stops short of naming those siblings, but the action is 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?
Usage is only implied: "immediately" and "manual run" suggest this is for forcing a run out of schedule, but the description never states when to prefer it over waiting for the schedule or over set_cron_enabled, nor any precondition such as the job needing to be enabled.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_connector_accessSet connector accessDestructiveIdempotentInspect
Change who may connect to a connector project: public on/off, the email allowlist (replaces it), allowed sign-in providers (github, google, microsoft; null = all) and email/password accounts on/off. Omitted fields stay. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| public | No | ||
| project_id | Yes | The project id | |
| allowed_emails | No | ||
| password_accounts | No | ||
| sign_in_providers | No |
set_connector_brandingSet connector brandingADestructiveIdempotentInspect
Brand a connector project's hosted sign-in and consent pages: accent colour (buttons/links), background colour (hex like #2563eb; null resets to the DenkOps default) and/or an icon (PNG, JPEG or WebP as base64, max 2 MB). Omitted fields stay unchanged; text colour is chosen automatically for contrast. A branding block in denkops.json overrides these values on the next deploy. Workspace owners only; the connector must be enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The DenkOps project id | |
| icon_base64 | No | Icon image bytes, base64-encoded | |
| accent_color | No | ||
| icon_mime_type | No | ||
| background_color | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the precedence gotcha ('A `branding` block in denkops.json overrides these values on the next deploy'), the permission requirement, and the automatic contrast behaviour for text colour. The destructiveHint=true edge is only implicitly covered by 'null resets to the DenkOps default' — it could say explicitly that clearing colours/icon is irreversible apart from re-setting them.
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 dense sentences, front-loaded with the action and facets, then update semantics, then prerequisites. No boilerplate or repetition of the title.
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 5-param mutation with no output schema, it covers everything an agent needs: what is mutated, which fields are optional, how to reset, size/format limits, permission gate, and the deploy-time override. Nothing material is left to guesswork.
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?
With 40% schema coverage and two colour params carrying no schema description at all, the description does the compensating work: hex format example (#2563eb), null-reset semantics, accepted image MIME types, and the 2 MB cap. project_id and icon_mime_type are left to the schema, which is the right division, so this is close to full marks rather than deficient.
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?
States a specific verb and resource ('Brand a connector project's hosted sign-in and consent pages') and enumerates the exact settable facets (accent colour, background colour, icon). This is clearly distinguishable from the read-side sibling get_connector_branding without opening either schema.
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?
Gives concrete preconditions ('Workspace owners only; the connector must be enabled') and partial-update semantics ('Omitted fields stay unchanged'), which tell the agent when the call is valid and what happens on repeat calls. It stops short of naming get_connector_branding as the way to inspect current values first, so the read-then-write workflow is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_cron_enabledPause or resume a scheduled jobDestructiveIdempotentInspect
Pause (enabled=false) or resume (enabled=true) a project's scheduled job.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The job id | |
| enabled | Yes | ||
| project_id | Yes | The project id |
set_egress_policySet egress policyDestructiveIdempotentInspect
Set a project's egress allow-list. enabled=true is default-deny: only listed hosts (exact or *.domain) may be reached. Allow-list edits apply live; enabling or disabling applies on the next deploy.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | ||
| allowlist | Yes | ||
| project_id | Yes | The DenkOps project id |
set_envSet an environment variableDestructiveIdempotentInspect
Set or overwrite a DenkOps project's environment variable (for secrets such as API keys). Values are write-only. The change is staged and takes effect on the next deploy or redeploy. Reserved keys (DENKOPS_*) are rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| value | Yes | ||
| project_id | Yes | The DenkOps project id |
set_member_roleChange a member's roleDestructiveIdempotentInspect
Change a workspace member's role (owner, member or viewer). The last owner can't be demoted. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | ||
| user_id | Yes | The user id |
set_project_accessSet project accessDestructiveIdempotentInspect
Set a member's role on one project: none (hidden), viewer, member or owner — or inherit to fall back to their workspace role. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | ||
| user_id | Yes | The user id | |
| project_id | Yes | The project id |
set_public_pathsSet public pathsDestructiveIdempotentInspect
Replace a DenkOps project's list of public (unauthenticated) paths. The change is staged and takes effect on the next deploy or redeploy.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | ||
| project_id | Yes | The DenkOps project id |
start_projectStart a projectIdempotentInspect
Start a stopped DenkOps deployment again (reactivates its active version).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The DenkOps project id |
stop_projectStop a projectDestructiveIdempotentInspect
Stop a DenkOps deployment: its containers stop and it goes offline. Reversible by starting the project again.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The DenkOps project id |
unset_envDelete an environment variableDestructiveIdempotentInspect
Delete a DenkOps project's environment variable. Takes effect on the next deploy or redeploy.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| project_id | Yes | The DenkOps project id |
update_alert_ruleUpdate an alert ruleDestructiveIdempotentInspect
Turn an alert rule on/off or change its webhook (null removes it). Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | No | ||
| rule_id | Yes | The rule id | |
| webhook_url | No |
update_connection_scopesChange connection scopesDestructiveIdempotentInspect
Change what a connection token may do: env / public paths / egress access (none, read, write), whether it may create projects, and which projects it may touch (null = all). Not for the connection this chat uses. Workspace owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | ||
| egress | No | ||
| projects | No | ||
| can_create | No | ||
| public_paths | No | ||
| connection_id | Yes | The connection id |
verify_domainVerify a custom domainAIdempotentInspect
Check a DenkOps custom domain's DNS TXT record and activate routing when it is present. Reports not-verified if the record isn't visible yet.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_id | Yes | The domain id | |
| project_id | Yes | The DenkOps project id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the description's job is to add context — and it does: it discloses that activation of routing is a side effect gated on the DNS record, and that a 'not-verified' outcome exists for propagation lag. It stops short of saying whether a failed check is retryable or whether anything is changed on failure, and the external DNS lookup sits oddly against openWorldHint=false, though this is not a direct 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?
Two sentences, zero filler, with the action and the activation effect front-loaded before the failure-mode note. Every clause carries information an agent needs.
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 two-parameter tool with full schema coverage and no output schema, the definition covers purpose, effect, and the main non-happy-path outcome. It is only slightly short on what a success response looks like and whether repeated calls are the intended recovery path for a not-verified result.
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 both domain_id and project_id are already documented with patterns and required status. The description adds no meaning beyond the schema — no hint about id formats, scoping, or how a domain_id is obtained (presumably from list_domains). 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 names a specific verb and resource ('Check a DenkOps custom domain's DNS TXT record') plus the resulting effect ('activate routing'), which cleanly separates it from siblings like add_domain, remove_domain, and list_domains. An agent can identify the operation without opening the schema.
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?
Usage is only implied: the tool is clearly the post-DNS-configuration step, and 'Reports not-verified if the record isn't visible yet' hints at retry behavior. However, it never states prerequisites (domain must first be added via add_domain) or when not to call it (e.g., for non-custom or already-verified domains).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiShow the signed-in DenkOps accountARead-onlyIdempotentInspect
Show which DenkOps account and workspace this connection acts as.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| role | Yes | |
| Yes | ||
| workspace | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so safety is well covered. The description adds only that the result includes both account and workspace scope; it says nothing about what data is returned, whether it can fail on an unauthenticated connection, or how it behaves with multiple workspaces. Useful but thin on top of already-rich 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?
A single front-loaded sentence with zero filler; the account-and-workspace scope is stated immediately and nothing repeats the title or name.
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 zero-parameter read tool with an output schema and full annotation coverage, the description covers what is needed to select and call it. It could be slightly stronger by noting this is the way to verify the active connection before other calls, but 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 tool takes zero parameters and the description correctly implies no input is required. With an empty schema there is nothing further to document, so the baseline of 4 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 names a specific verb ('Show') and resource ('which DenkOps account and workspace this connection acts as'), which is distinct from siblings like get_workspace_overview or get_plan. It does not name a sibling explicitly, so it stops just short of a 5.
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?
No explicit when-to-use or when-not-to-use guidance is given, and no alternative is named. Usage is strongly implied by the phrasing ('which ... this connection acts as'), making it easy to infer this is an identity/who-am-I check, but it is left to inference.
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.
62 tool updates
- First observed
add_connector_account - First observed
add_domain - First observed
cancel_invite - First observed
create_alert_rule - First observed
create_connection - First observed
create_workspace - First observed
delete_alert_rule - First observed
delete_project - First observed
deploy - First observed
get_audit_log - First observed
get_billing_link - First observed
get_connection_activity - First observed
get_connector_access - First observed
get_connector_branding - First observed
get_container_logs - First observed
get_denkops_guide - First observed
get_egress_policy - First observed
get_member_access - First observed
get_metrics - First observed
get_plan - First observed
get_project_access - First observed
get_public_paths - First observed
get_status - First observed
get_trace - First observed
get_workspace_overview - First observed
invite_member - First observed
list_alert_events - First observed
list_alert_rules - First observed
list_connections - First observed
list_connector_accounts - First observed
list_crons - First observed
list_deployments - First observed
list_domains - First observed
list_env - First observed
list_members - First observed
list_projects - First observed
list_traces - First observed
list_workspaces - First observed
redeploy - First observed
regenerate_connection - First observed
remove_connector_account - First observed
remove_domain - First observed
remove_member - First observed
reset_connector_account_password - First observed
revoke_connection - First observed
rollback - First observed
run_cron - First observed
set_connector_access - First observed
set_connector_branding - First observed
set_cron_enabled - First observed
set_egress_policy - First observed
set_env - First observed
set_member_role - First observed
set_project_access - First observed
set_public_paths - First observed
start_project - First observed
stop_project - First observed
unset_env - First observed
update_alert_rule - First observed
update_connection_scopes - First observed
verify_domain - First observed
whoami
Related MCP Connectors
Deploy apps, APIs and Postgres from your AI agent. EU PaaS hosted in Germany, OAuth sign-in.
Deploy AI-built sites and apps to EU hosting from your AI agent. OAuth sign-in, 14-day free trial.
European cloud hosting. Deploy and manage apps with your favorite AI coding assistant.
Run apps, managed Postgres, buckets, a registry and domains on a European cloud.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceDeployable MCP server with Google OAuth for remote connections, enabling authenticated tool access via Cloudflare Workers.-
- FlicenseNot gradedqualityDmaintenanceProvides a remote MCP server with GitHub OAuth authentication, deployable to Cloudflare, enabling tools like math operations and GitHub user info access.-
- AlicenseAqualityDmaintenanceAn MCP server for publishing static web apps via Gitea and Coolify, with scoped permissions and safety guards.8MIT
- FlicenseNot gradedqualityNot gradedmaintenanceA remote MCP server with Google OAuth authentication, deployable to Cloudflare Workers, that provides tools accessible after signing in with Google.-
Glama MCP Gateway
Add one secure layer between your agents and this server.