Octopus Deploy MCP Server
OfficialThe Octopus Deploy MCP Server provides read-only access to Octopus Deploy instances, enabling AI assistants to inspect, query, and diagnose DevOps deployment configurations and operations.
Core Capabilities:
Organization & Structure - List spaces, environments (dev, staging, production, etc.), and projects with filtering options
Deployments & Releases - List and filter deployments by project, environment, tenant, channel, and task state; view releases with version search; get detailed release information
Tasks & Operations - Monitor server tasks, access detailed/raw task information and logs for troubleshooting
Multi-Tenancy - List tenants with filtering by tags, projects, and IDs; get tenant details; view all, common, or project-specific tenant variables; identify missing tenant variables
Infrastructure - List deployment targets (machines) with filtering by roles, health status, environment, tenant, and type; get detailed target configurations
Kubernetes - Get real-time status of Kubernetes resources for projects and environments (requires Octopus 2025.3+)
Security & Credentials - List and retrieve details for certificates (with filtering by name, archived status, tenant) and accounts (AWS, Azure, SSH, etc.)
Configuration - View deployment processes for projects, releases, and branches; get project variables and library variable sets; list Git branches for version-controlled projects (requires Octopus 2021.2+)
User Context - Get information about the current authenticated user
Key Features: All operations are read-only for security, support filtering and pagination, work with Octopus Server 2021.1+, and are optimized for diagnostic and troubleshooting workflows.
Enables retrieval of live status information for Kubernetes resources within Octopus Deploy projects and environments
Provides comprehensive tools for inspecting, querying, and diagnosing Octopus Deploy instances, including management of projects, deployments, releases, tasks, tenants, Kubernetes resources, deployment targets, certificates, and accounts
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., "@Octopus Deploy MCP Servershow me the status of recent deployments for the 'web-api' project"
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.
Octopus Deploy Official MCP Server
Octopus makes it easy to deliver software to Kubernetes, multi-cloud, on-prem infrastructure, and anywhere else. Automate the release, deployment, and operations of your software and AI workloads with a tool that can handle CD at scale in ways no other tool can.
Model Context Protocol (MCP) allows the AI assistants you use in your day to day work, like Claude Code, or ChatGPT, to connect to the systems and services you own in a standardized fashion, allowing them to pull information from those systems and services to answer questions and perform tasks.
The Octopus MCP Server provides your AI assistant with powerful tools that allow it to inspect, query, and diagnose problems within your Octopus instance, transforming it into your ultimate DevOps wingmate. For a list of supported use-cases and sample prompts, see our documentation.
Octopus Server Compatibility
Most tools exposed by the MCP Server use stable APIs that have been available from at least version 2021.1 of Octopus Server. Tools that are newer will specify the minimum supported version in the documentation. Alternatively, you can use the command line argument --list-tools-by-version to check how specific tools relate to versions of Octopus.
š Installation
Install via Docker
Credentials must be supplied via environment variables to avoid exposing them in the host process list (ps aux / /proc/<pid>/cmdline). The Octopus server URL can still be supplied via the --server-url flag.
docker run -i --rm -e OCTOPUS_API_KEY=your-key -e OCTOPUS_SERVER_URL=https://your-octopus.com octopusdeploy/mcp-serverFull example configuration (for Claude Desktop, Claude Code, and Cursor):
{
"mcpServers": {
"octopus-deploy": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"OCTOPUS_SERVER_URL",
"-e",
"OCTOPUS_API_KEY",
"octopusdeploy/mcp-server"
],
"env": {
"OCTOPUS_SERVER_URL": "https://your-octopus.com",
"OCTOPUS_API_KEY": "YOUR_API_KEY"
}
},
}
}For Apple Mac users, you might need to add the following arguments in the configuration to force Docker to use the Linux platform:
"--platform",
"linux/amd64",We are planning to release a native ARM build shortly so that those arguments will not be required anymore.
Install via Node
Requirements
Node.js >= v20.0.0
Octopus Deploy instance that can be accessed by the MCP server via HTTPS
Octopus Deploy API Key or Access Token (see Authentication below)
Configuration
Full example configuration (for Claude Desktop, Claude Code, and Cursor):
Write tools enabled (default):
{
"mcpServers": {
"octopusdeploy": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@octopusdeploy/mcp-server"],
"env": {
"OCTOPUS_SERVER_URL": "https://your-octopus.com",
"OCTOPUS_API_KEY": "YOUR_API_KEY"
}
}
}
}Read-only mode (recommended for production):
{
"mcpServers": {
"octopusdeploy": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@octopusdeploy/mcp-server", "--read-only"],
"env": {
"OCTOPUS_SERVER_URL": "https://your-octopus.com",
"OCTOPUS_API_KEY": "YOUR_API_KEY"
}
}
}
}The Octopus MCP Server is typically configured within your AI Client of choice.
It is packaged as an npm package and executed via Node's npx command. Credentials (API key or access token) must be supplied via environment variables ā they are not accepted as command-line arguments to avoid exposing secrets in the process list. The Octopus server URL may be supplied via either the OCTOPUS_SERVER_URL environment variable or the --server-url flag.
OCTOPUS_API_KEY=API-KEY \
OCTOPUS_SERVER_URL=https://your-octopus.com \
npx -y @octopusdeploy/mcp-serverOr with the server URL on the command line:
OCTOPUS_API_KEY=API-KEY \
npx -y @octopusdeploy/mcp-server --server-url https://your-octopus.comAuthentication
The MCP server supports two authentication methods. Both are supplied via environment variables ā credentials are not accepted on the command line because flags are visible in the host process list to any local user.
API Key (recommended for interactive use)
API keys are the standard authentication method for Octopus Deploy. You can generate one from your Octopus Deploy user profile.
OCTOPUS_API_KEY=API-XXXXXXXXXXXXXXXXXXXXXXXXXX \
OCTOPUS_SERVER_URL=https://your-octopus.com \
npx -y @octopusdeploy/mcp-serverAccess Token / Bearer Token (automated scenarios only)
The server also supports short-lived access tokens (Bearer tokens) as an alternative to API keys. This authentication method is intended only for automated scenarios where an external system issues a short-lived token to the MCP server (e.g., CI/CD pipelines, automated orchestration, or machine-to-machine workflows). Do not use long-lived Bearer tokens ā use API keys instead for interactive or long-running sessions.
OCTOPUS_ACCESS_TOKEN=your-short-lived-token \
OCTOPUS_SERVER_URL=https://your-octopus.com \
npx -y @octopusdeploy/mcp-serverFull example configuration with an access token:
{
"mcpServers": {
"octopusdeploy": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@octopusdeploy/mcp-server"],
"env": {
"OCTOPUS_SERVER_URL": "https://your-octopus.com",
"OCTOPUS_ACCESS_TOKEN": "YOUR_TOKEN"
}
}
}
}If both an API key and an access token are provided, the access token takes precedence. The active authentication method is recorded in the log file (configurable with --log-file) so operators can confirm which credential is in use.
Configuration Options
The Octopus MCP Server supports several command-line options to customize which tools are available.
If you are not sure which tools you require, we recommend running without any additional command-line options and using the provided defaults.
Toolsets
Use the --toolsets parameter to enable specific groups of tools:
# Enable all toolsets (default)
npx -y @octopusdeploy/mcp-server
# Enable only specific toolsets
npx -y @octopusdeploy/mcp-server --toolsets projects,deployments
# Enable all toolsets explicitly
npx -y @octopusdeploy/mcp-server --toolsets allAvailable toolsets:
core - Basic operations (always enabled)
projects - Project operations
deployments - Deployment operations
releases - Release management
runbooks - Runbook discovery and execution
tasks - Task operations
tenants - Multi-tenancy operations
kubernetes - Kubernetes operations
machines - Deployment target operations
certificates - Certificate operations
accounts - Account operations
interruptions - Manual intervention and approval operations
featureToggles - Inspect and adjust customer feature toggles
context - Authenticated user and project context (current user, Git branches)
Read-Only Mode
The server runs with write tools enabled by default. Pass --read-only to disable all write tools and block POST/PUT/PATCH/DELETE through the execute backstop. Most curated tools are already read-only; only a small set perform writes.
Write-enabled tools (always-write):
create_release- Create new releasesdeploy_release- Deploy releases to environments and tenantsrun_runbook- Run a runbook against one or more environments (and optional tenants)update_feature_toggle- Adjust per-environment state and rollout percentages on an existing feature toggle
Conditionally-writing tool: execute is a structured REST backstop whose tier (read / write / delete) is determined by the HTTP method passed to it. See the API Catalog & Backstop section for details.
Write tools are gated by an MCP elicitation prompt: clients that support elicitation will be asked to confirm before the call proceeds. Clients without elicitation support must pass confirm: true in the tool arguments ā otherwise the tool aborts with an error. Set OCTOPUS_SKIP_ELICITATION=true to bypass the gate entirely (intended for unattended automation).
The server uses a three-tier read/write/delete classification, enforced server-side based on the HTTP method (the agent cannot bypass this by lying about intent):
read ā always allowed. GET requests through
execute, plus allfind_*/get_*/list_*tools.write ā POST/PUT/PATCH through
executeand the always-write tools above. Blocked when--read-onlyis set.delete ā DELETE through
execute. Requires--allow-deletesand is blocked when--read-onlyis set. A small set of catastrophic-delete paths (e.g.DELETE /api/spaces/{id},DELETE /api/users/{id}) and API-key endpoints are on a hard sensitive denylist that ignores both flags.
# Default - write tools enabled (POST/PUT/PATCH)
npx -y @octopusdeploy/mcp-server
# Additionally permit DELETE requests through the execute tool
npx -y @octopusdeploy/mcp-server --allow-deletes
# Read-only mode - write/delete tools disabled
npx -y @octopusdeploy/mcp-server --read-onlySecurity Note: Use an API key with appropriate, least-privilege permissions ā write operations can create releases and trigger deployments in your Octopus instance. For production, consider passing --read-only unless you have a specific, controlled use case for writes. --allow-deletes is off by default; only enable it when the agent must issue DELETE requests through execute. If you pass --allow-deletes together with --read-only, the server prints a startup warning to stderr ā DELETE requests remain blocked by the read-only gate.
Complete Examples
All examples below assume OCTOPUS_API_KEY is set in the environment. The --server-url flag is shown for clarity but can also be provided via OCTOPUS_SERVER_URL.
# Development setup with only core and project tools
npx -y @octopusdeploy/mcp-server --toolsets core,projects --server-url https://your-octopus.com
# Production setup with all tools and read-only enforcement
npx -y @octopusdeploy/mcp-server --toolsets all --read-only --server-url https://your-octopus.com
# Default invocation - all tools and writes enabled
npx -y @octopusdeploy/mcp-server --server-url https://your-octopus.comOther command line arguments
--read-only- Enable read-only mode: disable all curated write tools and block POST/PUT/PATCH/DELETE throughexecute. Writes are enabled by default; this flag turns them off. See Read-Only Mode.--allow-deletes- Permit DELETE requests through theexecutetool. Ignored (with a startup warning) when--read-onlyis set. Defaultfalse.--log-level <level>- Minimum log level (info, error)--log-file <path>- Log file path or filename. If not specified, logs are written to console only-q, --quiet- Disable file logging, only log errors to console--list-tools-by-version- List all registered tools by their supported Octopus Server version and exit
Related MCP server: Azure DevOps MCP Server
šØ Tools
URL-Based Tools
Quick start: Paste Octopus URLs directly to investigate issues without manual ID extraction.
get_deployment_from_url: Get deployment details from deployment URL (returns taskId for follow-up)get_task_from_url: Get task details and logs from task URL
Deployment investigation workflow:
1. get_deployment_from_url with deployment URL
ā Returns deployment context + taskResourceUri + grepTaskLogHint
2a. Fetch the structured activity tree via resources/read (or read_resource)
octopus://spaces/{spaceName}/tasks/{taskId}/details
2b. Or call grep_task_log with the taskId to search the raw log without
fetching the full body:
grep_task_log({ spaceName, taskId, pattern: "error|fail", caseInsensitive: true })Task investigation (direct task URL):
get_task_from_url with task URL
ā Returns task details and logs immediatelyThese tools eliminate manual ID extraction by:
Parsing URLs automatically
Resolving space IDs to space names
Validating ID formats
Providing clear error messages
Example URLs:
Deployment:
https://your-octopus.com/app#/Spaces-1/projects/my-app/deployments/Deployments-123Task:
https://your-octopus.com/app#/Spaces-1/tasks/ServerTasks-456
See Working with URLs for detailed workflows, examples, and best practices.
Core Tools
list_spaces: List all spaces in the Octopus Deploy instancelist_environments: List all environments in a given space
API Catalog & Backstop
These tools and resources let the agent reach Octopus REST endpoints that don't have a dedicated curated tool, with hard server-side gating between read, write, and delete operations.
grep_llms_txt: Search the Octopus API catalog (octopus://api/llms.txt) with grep-style semantics (minimum supported Octopus version:2026.2.3916). The catalog body is large (typically 300+ KB) ā call this rather than reading the resource body directly. Parameters mirror GNU grep (pattern,caseInsensitive,invertMatch,fixedString,beforeContext,afterContext,maxCount). Useful for discovering endpoints (POST /releases), enumerating delete endpoints (DELETE), or finding the body type for a write operation (Body: Create.*Command).execute: Structured REST backstop. Reaches any Octopus REST endpoint under/api. The HTTP method is the authoritative read/write/delete classifier ā never anisWriteflag the LLM can set. Method gating is hard-coded server-side:GETis always allowed (subject to the path shape check + sensitive denylist).POST/PUT/PATCHare blocked when--read-onlyis set; otherwise they require user confirmation via elicitation.DELETErequires--allow-deletes(and is blocked when--read-onlyis set) plus a stronger "IRREVERSIBLE" elicitation message.The sensitive denylist (API-key endpoints,
DELETE /api/spaces/{id},DELETE /api/users/{id}) is enforced even with both flags on.The path is required to be
/apior start with/api/ā absolute URLs, SDK-relative~/api/...paths, and host-relative paths outside/api(e.g./octopus/portal/...) are rejected up front, soexecutestays bounded to the Octopus REST API surface.Per-toolset path allowlist applies only when
--toolsetshas been narrowed. With every toolset enabled (the default, or explicit--toolsets all) the allowlist is bypassed and any path under/apiis reachable subject to the gates above. When--toolsetsis narrowed the allowlist becomes the kill-switch: paths only resolve if their owning toolset is enabled, so disabling a toolset (e.g.certificates) makes its paths unreachable throughexecuteeven onGET.
Catalog data is also exposed as MCP Resources:
octopus://api/llms.txtā markdown catalog of every Octopus REST endpoint (HTTP method, path, query params, request/response types). Requires Octopus Server2026.2.3916or later. 5-minute in-memory cache keyed on the configured server URL. Prefergrep_llms_txtto reading the body directly.octopus://api/capabilitiesā JSON describing the running session: server version, enabled toolsets, available tools (with theirminimumOctopusVersion), and whether--read-only/--allow-deletesis on. Useful for the agent to discover what's reachable in this session.
Projects
list_projects: List all projects in a given space
Deployments
deploy_release: Deploy a release to environments (supports both tenanted and untenanted deployments)list_deployments: List deployments in a space with optional filtering
Releases
create_release: Create a new release for a projectfind_releases: Find releases in a space (can get a specific release by ID, or list/filter releases by project)
Release detail is also available as an MCP Resource at octopus://spaces/{spaceName}/releases/{releaseId} ā fetch via resources/read (or the read_resource backstop tool) to get the full release body, including release notes and selected packages.
Runbooks
find_runbooks: Find runbooks in a project (can get a specific runbook by ID, or list/filter runbooks by partial name). Each summary includes the published snapshot ID, multi-tenancy mode, and environment scope so callers can pick valid targets before running.run_runbook: Run a runbook against one or more environments. Supports tenanted runs (by tenant name or tenant tag), prompted variables, guided failure mode, scheduled run windows, and step or machine inclusion/exclusion. Defaults to the runbook's published snapshot ifrunbookSnapshotIdis omitted.
The full runbook body (including runtime policy fields) is available as an MCP Resource at octopus://spaces/{spaceName}/runbooks/{runbookId}.
Tasks
Task data is primarily exposed as MCP Resources. Use resources/read (or the read_resource backstop tool) with one of:
octopus://spaces/{spaceName}/tasks/{taskId}ā lightweight metadata (state, timing, completion flags)octopus://spaces/{spaceName}/tasks/{taskId}/detailsā full ServerTaskDetails (Progress, ActivityLogs tree, etc.)
For log search, use the grep_task_log tool rather than a /log resource:
grep_task_log: Search a task's activity log without fetching the full body. Parameters mirror GNU grep (pattern,caseInsensitive,invertMatch,fixedString,beforeContext,afterContext,maxCount). Returns matching lines with 1-indexedlineNumber, optional before/after context arrays, and atotalMatchescount across the whole log.
There is intentionally no /log resource: activity logs can be multi-megabyte, and an addressable resource would tempt callers to fetch the entire body when grep is almost always the right primitive.
Tenants
find_tenants: Find tenants in a space (can get a specific tenant by ID or list/search tenants with filters)get_tenant_variables: Get tenant variables by type (all, common, or project)get_missing_tenant_variables: Get tenant variables that are missing values
Kubernetes
get_kubernetes_live_status: Get live status of Kubernetes resources for a project and environment (minimum supported version:2025.3)
Machines (Deployment Targets)
find_deployment_targets: Find deployment targets in a space (can get a specific target by ID or list/search targets with filters)
Certificates
find_certificates: Find certificates in a space (can get a specific certificate by ID or list/search certificates with filters)
Accounts
find_accounts: Find accounts in a space (can get a specific account by ID or list/search accounts with filters)
Interruptions
find_interruptions: Find pending or historical interruptions (manual interventions, approvals, guided-failure prompts) in a space, optionally filtered by task, project, environment, regarding document, responsibility, or pending state. Returns slim summaries; dereference theoctopus://spaces/{spaceName}/interruptions/{interruptionId}resource for the full Form definition (control types, Markdown instructions, button options, submitted Form.Values).
Feature Toggles
find_feature_toggles: List customer feature toggles in a project. Each summary includes per-environment state (isEnabled,rolloutPercentage,clientRolloutPercentage) plus aresourceUriso "where is X turned on" is answerable from the list response.update_feature_toggle: Adjust an existing toggle. Narrow surface ā flip an environment on/off, change rollout percentages, or update the toggle-level description / default state. Internally fetches the current toggle, applies your patches in memory, and PUTs the merged body, so unmentioned environments and unmentioned fields are preserved. Patches that reference an environment not already configured on the toggle are rejected.
The full toggle body (description, tenants, segments, minimum versions) is available as an MCP Resource at octopus://spaces/{spaceName}/projects/{projectId}/featuretoggles/{slug}. Rollout group bodies are addressable at octopus://spaces/{spaceName}/projects/{projectId}/rolloutgroups/{rolloutGroupId} for read-only inspection.
Out of scope (use the Octopus UI): creating new feature toggles, deleting toggles, renaming or retagging, attaching/detaching rollout groups, tenant targeting, segments, minimum-version filters, and rollout-group / SDK client-identifier management.
Additional Tools
get_deployment_process: Get deployment process by ID for projects or releasesget_variables: Get all project variables and library variable set variables for a project (supports config-as-code projects viagitRef)get_branches: Get Git branches for a version-controlled project (minimum supported version:2021.2)get_current_user: Get information about the current authenticated user
š Security Considerations
The Octopus MCP Server includes both read and write operations. Important security considerations:
Read Operations
Can read full deployment logs, which could include production secrets if they were not marked as secrets
Access to sensitive configuration data and variables
Exercise caution when connecting to tools and models you do not fully trust
Write Operations
By default, the following write operations are available:
Creating releases: Can create new releases for projects
Deploying releases: Can trigger deployments to environments (including production)
Running runbooks: Can execute runbooks against environments and tenants
Updating feature toggles: Can flip per-environment state and change rollout percentages on existing toggles
Arbitrary POST/PUT/PATCH via the
executebackstop: Bounded to paths under/api, with an always-on sensitive denylist. The per-toolset path allowlist applies only when--toolsetshas been narrowed; with all toolsets enabled (the default) the only path gates are the/apiboundary and the sensitive denylist.
Pass --read-only to disable all of the above. DELETE requests through execute require an additional --allow-deletes flag ā a deliberate opt-in for irreversible operations ā and remain blocked when --read-only is set.
Critical Security Measures:
Least Privilege: Use API keys with the minimum permissions needed for your use case
Opt In to Read-Only Mode: Writes are enabled by default. For production, pass
--read-onlyunless you have a specific, controlled use case for write operations. DELETE always requires the additional--allow-deletesopt-in.Method gating is server-side and hard-coded: The HTTP method passed to
executeis the authoritative classifier. The agent cannot bypass the gate by misrepresenting what the call does ā POST/PUT/PATCH/DELETE requests get tier-specific gating regardless of the prose in the request body.Toolset filtering doubles as a kill switch: Narrowing
--toolsetsremoves both the disabled toolsets' curated tools and their paths from theexecuteallowlist. (The allowlist is only consulted when toolsets are narrowed; with all toolsets enabledexecuteis bounded by the/apishape check and the sensitive denylist instead.)Prompt Injection Risk: Running agents in fully automated fashion could make you vulnerable to prompt-injection attacks
Recommendation: For production environments, pass --read-only unless you have a specific, controlled use case for write operations. Leave --allow-deletes off unless you specifically need DELETE semantics through execute.
ā ļø Limitations
Data Analysis
The nature of current AI chat tools and the MCP protocol itself makes it impractical to analyze large amounts of data. Most MCP clients currently do not support chaining tool calls (using the output of one tool as input to the next one) and instead fall back to copying the results token by token, which frequently leads to hallucinations. If you are looking to process historical data from your Octopus instance for analysis purposes, we recommend using the API directly or writing your own MCP client that is capable of processing the tool call results programmatically.
Performance
The MCP Server is technically just a thin layer on top of the existing Octopus Server API. As such it is capable of retrieving large amounts of data (for example, requesting thousands of deployments). Such queries can have a significant effect on your instance's performance. Instruct your models to only retrieve the minimum set of data that it needs (most models are really good at this out of the box).
š¤ Contributions
Contributions are welcome! :heart: Please read our Contributing Guide for information about how to get involved in this project.
We are eager to hear how you plan to use Octopus MCP Server and what features you would like to see included in future version.
Please use Issues to provide feedback, or request features.
If you are a current Octopus customer, please report any issues you experience using our MCP server to our support team. This will ensure you get a timely response within our standard support guarantees.
š FAQ
Do you have plans to release a remote MCP server?
We are working on integrating an MCP server directly into Octopus Server. This will open up the door for us to build more complex MCP tools, as well as:
Giving Octopus Administrators more granular control over MCP clients
Natively support OAuth for client authentication
Integrating security scanning tools into the MCP output
If this is of interest to you, please register your interest on our roadmap item.
License
This project is licensed under the terms of Mozilla Public License 2.0 open source license.
Available Tools
30 toolscreate_releaseCreate a new release in Octopus DeployC
Create a new release for an Octopus Deploy project
This tool creates a new release for a project. The space name and project name are required. All other parameters are optional and will use Octopus defaults if not specified.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | The space name | |
| projectName | Yes | The project name | |
| releaseVersion | No | The version for the release (e.g., '1.0.0'). If not specified, Octopus will auto-generate based on project settings. | |
| channelName | No | The channel name (uses default channel if not specified) | |
| packageVersion | No | Default package version to use for all packages | |
| packages | No | Array of package specifications (format depends on Octopus configuration) | |
| gitCommit | No | Git commit hash | |
| gitRef | No | Git reference (branch or tag) | |
| releaseNotes | No | Release notes for this release | |
| ignoreIfAlreadyExists | No | If true, skip creation if release already exists (returns existing release) | |
| ignoreChannelRules | No | If true, ignore channel version rules | |
| packagePrerelease | No | Package prerelease tag | |
| customFields | No | Custom field values as key-value pairs | |
| confirm | No | Required only when the MCP client does not support elicitation. Set to true to confirm release creation; otherwise the tool aborts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description states the tool creates a release but does not disclose behavioral traits beyond that. With annotations providing no safety or idempotency hints (all false), the description should elaborate on side effects, error behavior, or post-conditions. It does not, leaving an agent with insufficient 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 concise (two sentences) and front-loaded with the core purpose. It avoids unnecessary fluff but could be slightly more structured if grouped logically.
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 14 parameters, no output schema, and sparse annotations, the description fails to provide complete context. Missing information about return values, error handling, or expected workflow prevents an agent from understanding the full tool 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?
The input schema covers 100% of parameters with descriptions, so the baseline is 3. The description adds value by grouping required vs optional and noting Octopus defaults, but this is largely redundant with the schema. No additional semantics beyond what 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 clearly states the verb 'create' and the resource 'release', and identifies the Octopus Deploy context. However, it does not differentiate from sibling tools like deploy_release or find_releases, which could lead to confusion about when to use each.
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 only minimal guidance on parameter usage (required vs optional with defaults) but lacks explicit when-to-use or when-not-to-use instructions relative to alternatives. No mention of prerequisites, success conditions, or error scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_releaseDeploy a release to environments in Octopus DeployADestructive
Deploy a release to one or more environments in Octopus Deploy
This tool supports both tenanted and untenanted deployments:
Untenanted: Don't provide tenants or tenantTags. Can deploy to multiple environments at once.
Tenanted: Provide tenants or tenantTags. Can only deploy to ONE environment, but can target multiple tenants.
The tool automatically determines which deployment type to use based on the parameters provided.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | The space name | |
| projectName | Yes | The project name | |
| releaseVersion | Yes | The release version to deploy (e.g., '1.0.0') | |
| environmentNames | Yes | Array of environment names. For tenanted deployments, must contain exactly one environment. | |
| tenants | No | Array of tenant names for tenanted deployment (optional) | |
| tenantTags | No | Array of tenant tags for tenanted deployment (e.g., ['Region/US-West', 'Tier/Production']) | |
| forcePackageRedeployment | No | Force redeployment of packages | |
| updateVariableSnapshot | No | Update the variable snapshot | |
| forcePackageDownload | No | Force package download | |
| specificMachineNames | No | Deploy to specific machines only | |
| excludedMachineNames | No | Exclude specific machines from deployment | |
| skipStepNames | No | Skip specific deployment steps | |
| useGuidedFailure | No | Use guided failure mode | |
| runAt | No | Schedule deployment for later (ISO 8601 date string) | |
| noRunAfter | No | Don't run deployment after this time (ISO 8601 date string) | |
| variables | No | Prompted variable values as key-value pairs | |
| deploymentFreezeOverrideReason | No | Reason for overriding deployment freeze | |
| deploymentFreezeNames | No | Names of deployment freezes to override | |
| confirm | No | Required only when the MCP client does not support elicitation. Set to true to confirm deployment; otherwise the tool aborts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint: true; description confirms destructive action. Goes beyond annotations by explaining the tenanted/untenanted logic, which is a key behavioral trait.
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?
Concise, uses bullet points for clarity, front-loaded with main action. Every sentence adds value 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?
Covers core logic and decision points for 19 parameters. No output schema, but description focuses on usage rules. Lacks some detail on parameter effects, but schema covers those.
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?
100% schema coverage provides baseline of 3. Description adds value by explaining how parameters interact (tenants/environmentNames for mode determination), which is not in individual param 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 clearly states the verb ('Deploy') and resource ('release to one or more environments'). It differentiates from sibling tools like create_release (creates releases) and run_runbook (runbooks vs releases).
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 explains when to use tenanted vs untenanted deployments with clear rules about tenants and environment count. Does not mention alternatives or when not to use this tool, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
executeExecute an Octopus REST request (backstop)ADestructive
Reach Octopus REST endpoints not covered by the curated tools. Use this only after grep_llms_txt has shown you the right method and path.
Method gating is hard-coded server-side, three tiers:
GET ā read tier: always allowed (subject to toolset allowlist + sensitive denylist).
POST/PUT/PATCH ā write tier: blocked when --read-only is set; requires user confirmation via elicitation otherwise.
DELETE ā delete tier: requires --allow-deletes (and is blocked when --read-only is set) AND a stronger user confirmation.
The HTTP method enum is the gate. The tool will not honour any 'isRead' flag the agent invents ā the runtime classifies based on the actual method.
Other gates (in order): 0. Path shape: must be '/api' or start with '/api/'. Absolute URLs, '~/api/...', '/octopus/portal/...', query strings, fragments, '..' segments, and percent-encoded slashes are all rejected up front.
Sensitive denylist: API key endpoints and catastrophic deletes (DELETE /api/users/{id}, DELETE /api/spaces/{id}) are always blocked.
Path allowlist ā only applied when --toolsets has narrowed the active set. With every toolset enabled (the default, or explicit --toolsets all) any path under /api is reachable subject to the other gates; when toolsets are narrowed, paths only resolve if their owning toolset is enabled so disabling a toolset (e.g. 'certificates') makes its endpoints unreachable even on GET.
Elicitation on every non-GET, with a stronger message for DELETE.
Discover endpoints with grep_llms_txt. Use octopus://api/capabilities to see which toolsets are enabled and whether write/delete modes are on.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | HTTP method. The method itself is the read/write/delete classifier ā GET is read-only, POST/PUT/PATCH are blocked when --read-only is set, DELETE additionally requires --allow-deletes. The agent cannot bypass this by lying about intent. | |
| path | Yes | Server-relative path under the Octopus REST API. MUST be exactly '/api' or start with '/api/' ā e.g. '/api/spaces/Spaces-1/feeds' or '/api/Spaces-1/projects'. Do NOT pass an absolute URL ('https://octopus.example/api/...'), an SDK-relative path ('~/api/...'), or a host-relative path outside /api ('/octopus/portal/...'); they are all rejected. Query parameters go in `query`, not in this string. Discover valid paths via grep_llms_txt. | |
| query | No | Optional query-string parameters as a flat object. | |
| body | No | Optional request body for POST/PUT/PATCH calls. | |
| asCsv | No | If true, request 'text/csv' for tabular GET responses. The Octopus API honours this for endpoints that support CSV output. | |
| confirm | No | Required only when the MCP client does not support elicitation. Set to true to confirm a non-GET call; otherwise the tool aborts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond annotations (destructiveHint=true, etc.) by explaining the full gating logic: three-tier method policy, path validation (shape, denylist, allowlist), and elicitation requirements. It also warns that the agent cannot bypass by lying about flags. This provides complete behavioral transparency.
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 long and detailed, with multiple paragraphs and nested bullet points. While well-structured, it is somewhat repetitive (e.g., method gating explained in two places). It could be more concise without losing clarity.
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 complexity (6 parameters, nested objects, no output schema) and the fact it interacts with a broad REST API, the description covers all necessary contextual information: method gates, path validation, denylist, toolset allowlist, elicitation, and discovery via grep_llms_txt. This is 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?
The input schema has 100% description coverage, but the description adds critical semantic context: method description explains read/write/delete classification, path describes validation rules (must be /api or start with /api/), and confirms parameter covers elicitation fallback. This enriches the schema significantly.
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 tool's name 'execute' is generic, but the title and description clearly state it is for executing Octopus REST requests not covered by curated tools. It specifies the scope (REST endpoints under /api) and distinguishes from sibling tools that cover specific endpoints.
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 tells agents to use this only after grep_llms_txt has shown the method and path. It also details when different HTTP methods are allowed (GET always, POST/PUT/PATCH with restrictions, DELETE with stricter gates). However, it does not explicitly list when to prefer a sibling tool over execute, though the context implies execute is a fallback.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_accountsFind accounts in an Octopus Deploy spaceARead-onlyIdempotent
Find accounts in a space - can retrieve a single account by ID or list all accounts
This unified tool can either:
Get detailed information about a specific account when accountId is provided
List all accounts in a space when accountId is omitted
You can optionally filter by various parameters like name, account type, etc. when listing.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | ||
| accountId | No | The ID of a specific account to retrieve. If omitted, lists all accounts. | |
| skip | No | Number of accounts to skip for pagination (only used when listing) | |
| take | No | Number of accounts to take for pagination (only used when listing) | |
| ids | No | Filter by specific account IDs (only used when listing) | |
| partialName | No | Filter by partial name match (only used when listing) | |
| accountType | No | Filter by account type (only used when listing) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, so description's main addition is the dual-mode behavior. Does not disclose pagination limits, error handling, or response format; acceptable given 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?
Concise two-sentence summary followed by bullet list. No wasted words, front-loaded with purpose.
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?
Adequately covers core functionality for a simple read tool with 7 params and no output schema. Missing details like return format or error handling, but not critical for selection.
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 descriptions cover 86% of parameters, including conditional usage ('only used when listing'). Description rephrases but adds no new semantic value beyond schema.
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?
Describes verb and resource clearly, with explicit dual-mode behavior (get by ID or list all). Distinguishes from sibling 'find_*' tools by specifying accounts.
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?
Clearly states when to use each mode (accountId provided vs omitted) and optional filters for listing. Lacks explicit alternatives or when-not-to-use guidance, but conditional usage is well explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_certificatesFind certificates in an Octopus Deploy spaceARead-onlyIdempotent
Find certificates in a space - can retrieve a single certificate by ID or list all certificates
This unified tool can either:
Get detailed information about a specific certificate when certificateId is provided
List all certificates in a space when certificateId is omitted
You can optionally filter by various parameters like name, archived status, tenant, etc. when listing.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | ||
| certificateId | No | The ID of a specific certificate to retrieve. If omitted, lists all certificates. | |
| skip | No | Number of certificates to skip for pagination (only used when listing) | |
| take | No | Number of certificates to take for pagination (only used when listing) | |
| search | No | Search term to filter certificates (only used when listing) | |
| archived | No | Filter by archived status (only used when listing) | |
| tenant | No | Filter by tenant (only used when listing) | |
| firstResult | No | Index of first result to return (only used when listing) | |
| orderBy | No | Field to order results by (only used when listing) | |
| ids | No | Filter by specific certificate IDs (only used when listing) | |
| partialName | No | Filter by partial name match (only used when listing) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations confirm read-only, idempotent, non-destructive behavior. The description adds value by detailing the dual retrieval modes and filtering capabilities, providing behavioral context beyond 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 concise, well-structured, and front-loaded with the main purpose. Each sentence 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 description effectively explains the dual modes and filter options. However, without an output schema, a brief note on return format would enhance completeness. Still, it covers the essential usage context adequately.
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 91%, so the schema already documents most parameters. The description only reiterates filtering options without adding new meaning, justifying a baseline score 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 clearly states that the tool finds certificates in an Octopus Deploy space, with two modes: retrieve a single certificate by ID or list all certificates. It is specific to certificates and distinguishes itself from sibling 'find' tools for other resources.
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 when to use each mode (provide certificateId or omit) and mentions optional filters for listing. It does not explicitly compare with alternatives, but the context is clear for a find tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_deployment_targetsFind deployment targets in an Octopus Deploy spaceARead-onlyIdempotent
Find deployment targets (machines) in a space - can retrieve a single target by ID or list all targets
This unified tool can either:
Get detailed information about a specific deployment target when targetId is provided
List all deployment targets in a space when targetId is omitted
You can optionally filter by various parameters like name, roles, health status, etc. when listing.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | ||
| targetId | No | The ID of a specific deployment target to retrieve. If omitted, lists all deployment targets. | |
| skip | No | Number of targets to skip for pagination (only used when listing) | |
| take | No | Number of targets to take for pagination (only used when listing) | |
| name | No | Filter by exact name (only used when listing) | |
| ids | No | Filter by specific target IDs (only used when listing) | |
| partialName | No | Filter by partial name match (only used when listing) | |
| roles | No | A list of roles / target tags to filter by (only used when listing) | |
| isDisabled | No | Filter by disabled status (only used when listing) | |
| healthStatuses | No | Possible values: Healthy, Unhealthy, Unavailable, Unknown, HasWarnings (only used when listing) | |
| commStyles | No | Filter by communication styles (only used when listing) | |
| tenantIds | No | Filter by tenant IDs (only used when listing) | |
| tenantTags | No | Filter by tenant tags (only used when listing) | |
| environmentIds | No | Filter by environment IDs (only used when listing) | |
| thumbprint | No | Filter by thumbprint (only used when listing) | |
| deploymentId | No | Filter by deployment ID (only used when listing) | |
| shellNames | No | Filter by shell names (only used when listing) | |
| deploymentTargetTypes | No | Filter by deployment target types (only used when listing) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds the dual-mode behavior and filtering options, which provides useful context beyond annotations. It does not discuss potential error responses or rate limits, but the safety profile is well-covered by 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 concise with three short, well-structured paragraphs. The key information is front-loaded, and every sentence adds value without redundancy. It efficiently conveys the tool's functionality.
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 complexity of 18 parameters and no output schema, the description covers the essential behaviors (two modes, filtering) and infers return type. It lacks explicit details on errors or response format, but for a read-only find tool with strong annotations, it is fairly 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 description coverage is 94%, extensively documenting each parameter. The description reinforces the conditional nature of targetId vs listing parameters but adds minimal new meaning beyond what the schema already says. This meets the baseline for high-coverage schemas.
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 'Find deployment targets (machines) in a space' and distinguishes between retrieving a single target by ID and listing all targets. This differentiates it from sibling tools like find_accounts or find_certificates by specifying the resource and 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 provides clear context on when to use each mode (targetId provided vs omitted) and lists available filters for listing. However, it does not explicitly compare against sibling tools or provide 'when not to use' guidance, which would be beneficial given the many similar find_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_eventsSearch the Octopus audit logARead-onlyIdempotent
Search the Octopus Deploy audit log (also called the Events log) ā every meaningful action recorded against a space: deployments, release creations, modifications, user logins, machine registrations, variable edits, tenant changes, and so on.
Modes (the mode arg):
search(default) ā query the audit log. RequiresspaceName. Supports rich filtering by user, project, environment, tenant, document type, date range, category, group, and agent.listCategoriesā enumerate every event category (e.g.DeploymentSucceeded).listGroupsā enumerate event groups (e.g.Created,Modified,Deleted,Deployment). Each group lists the categories inside it.listAgentsā enumerate user-agent strings recorded by the audit subsystem.listDocumentTypesā enumerate entity-prefix metadata (Projects-,Releases-, ...).
Search modes (within mode='search', picked by argument shape):
eventIdā fetch that single event. Mutually exclusive with list and pagination filters;excludeDifferenceis still honoured.otherwise ā list events matching the filters, paginated.
Performance tip: the per-event ChangeDetails field (the before/after diff for Modified events) is by far the heaviest payload field. Pass excludeDifference: true whenever scanning many events; fetch a single event without the flag when you need the diff.
Filter semantics:
regardingā AND semantics: event must reference EVERY listed document ID.regardingAnyā OR semantics: event must reference ANY listed document ID.All other multi-value filters (users, projects, environments, tenants, eventCategories, eventGroups, ...) are OR semantics within the field.
from(inclusive) andto(exclusive) accept ISO 8601 datetimes.
Permissions: requires EventView on the calling user's space scope. The server filters results further based on per-document permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | What to return. Defaults to 'search' (the audit log itself). Metadata modes enumerate valid filter values: listCategories returns every event category (e.g. DeploymentSucceeded, ReleaseCreated); listGroups returns category groupings (Created/Modified/Deleted/Deployment/Interruption/...); listAgents returns the user-agent strings seen by the audit subsystem; listDocumentTypes returns entity-prefix metadata (Projects-, Releases-, ...). Use a metadata mode first when you need to construct an eventCategories/eventGroups/documentTypes filter and don't know the valid values. Metadata modes ignore every other argument. | |
| spaceName | No | Space name. Required for mode='search'. Ignored by metadata modes (they are server-wide). | |
| eventId | No | Fetch a single event by ID (form 'Events-NNN'). Mutually exclusive with list and pagination filters (regarding, regardingAny, users, projects, environments, tenants, projectGroups, eventCategories, eventGroups, eventAgents, documentTypes, tags, from, to, skip, take). Compatible with excludeDifference (still honoured) and includeInternalEvents (no-op for single fetches). | |
| regarding | No | Document IDs the event must relate to. AND semantics: event must reference EVERY id listed. Use regardingAny for OR semantics. | |
| regardingAny | No | Document IDs the event may relate to. OR semantics: event references ANY id listed. | |
| users | No | User IDs who triggered the event (OR semantics within the list). | |
| projects | No | Project IDs the event relates to (OR semantics). | |
| environments | No | Environment IDs the event relates to (OR semantics). | |
| tenants | No | Tenant IDs the event relates to (OR semantics). | |
| projectGroups | No | Project group IDs. Events for any project inside these groups are included. | |
| eventCategories | No | Event category names, e.g. ['DeploymentSucceeded','DeploymentFailed']. Use mode='listCategories' to discover the full set. | |
| eventGroups | No | Event group names, e.g. ['Created','Modified','Deleted','Deployment','Interruption']. Each group is expanded server-side to the categories it contains. Use mode='listGroups' to discover the full set. | |
| eventAgents | No | User-agent strings of the clients that triggered the events. Use mode='listAgents' to discover the values present in this instance. | |
| documentTypes | No | Document type prefixes, e.g. ['Projects-','Releases-']. Use mode='listDocumentTypes' to discover the full set. | |
| tags | No | Canonical tenant tag IDs of the form 'TagSetName/TagName'. Filters events whose related tenants carry these tags. | |
| from | No | ISO 8601 datetime. Inclusive lower bound on Occurred (Occurred >= from). | |
| to | No | ISO 8601 datetime. Exclusive upper bound on Occurred (Occurred < to). | |
| includeInternalEvents | No | Default true. Set false to suppress per-target MachineAdded / MachineDeleted / MachineDeploymentRelatedPropertyWasUpdated noise that floods machine-heavy instances. | |
| excludeDifference | No | Set true to omit the ChangeDetails field (the before/after diff). ChangeDetails is by far the heaviest field per event ā recommended for any scan of more than a few events. | |
| skip | No | Pagination offset (search mode only). | |
| take | No | Pagination page size (search mode only). Server default is 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, destructive-false, idempotent. The description adds substantial behavior: mode behavior, mutual exclusivity of eventId with list filters, filter semantics, and performance impact of ChangeDetails. No contradictions.
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 long but well-structured with sections, bold headings, and bullet points. It is front-loaded with purpose and every sentence adds value for a complex tool with 21 parameters. Could be slightly more concise but appropriate for the complexity.
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 21 parameters and no output schema, the description covers modes, filter semantics, performance tips, permissions, and mutual exclusions. It lacks explicit return structure details but provides enough for an agent to use 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 baseline is 3. The description adds value by explaining filter semantics (AND/OR), performance implications, and mutual exclusivity, which go beyond the individual 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 clearly states the tool searches the Octopus Deploy audit log, listing specific action types (deployments, releases, etc.). It distinguishes itself from sibling tools like find_releases and list_projects by focusing on the events log.
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 detailed usage guidance: when to use search vs metadata modes, performance tips (excludeDifference), filter semantics (AND/OR), and permissions. It does not explicitly compare to alternatives but gives enough context to decide when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_feature_togglesFind feature togglesARead-onlyIdempotent
List customer feature toggles in an Octopus Deploy project.
Each summary includes per-environment state (isEnabled, rolloutPercentage, clientRolloutPercentage) so "where is X turned on" is answerable from the list response. Heavy fields (description, tenant lists, segments, minimum versions) live in the resource body.
Dereference the returned resourceUri (octopus://spaces/{spaceName}/projects/{projectId}/featuretoggles/{slug}) for the full toggle body.
Use update_feature_toggle to flip an environment on/off or change rollout percentages on an existing toggle. This MCP server does not expose toggle creation, deletion, renaming, or rollout-group management ā direct customers to the Octopus UI for those.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | Space name. | |
| projectId | Yes | Project ID (e.g. Projects-123). Feature toggles are scoped per project. | |
| partialName | No | Case-insensitive substring match on the toggle name. | |
| tags | No | Filter by canonical tag names (e.g. "release-rings/beta"). Repeats: a toggle matches if it has any of these tags. | |
| environmentIds | No | Filter by environment IDs (e.g. Environments-7). A toggle matches if it has configuration for any of these environments. | |
| skip | No | Pagination offset (ā„ 0). | |
| take | No | Pagination page size (1ā100, server-side cap). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds value by detailing response structure (summary vs. resource body), indicating that heavy fields are in the resource body, and explaining how to dereference the resourceUri for full 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?
Description is fairly detailed and well-structured, but slightly verbose. It uses clear sentences and separates purpose, response details, and guidance. Could be slightly more concise, but effective.
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 no output schema, the description adequately explains the return value structure (per-environment state in summary, heavy fields in body, resourceUri for full details). Also clarifies limitations and alternative tools.
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 has 100% description coverage. The description does not add new meaning beyond what the schema already provides for parameters. 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 states the verb 'List' and the resource 'customer feature toggles in an Octopus Deploy project'. It distinguishes from siblings by specifying what the tool does not do (creation, deletion, etc.) and references update_feature_toggle for modifications.
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 explicit guidance on when to use (listing toggles with per-environment state) and when not to use (for creation, deletion, renaming, rollout-group management). Mentions update_feature_toggle as the alternative for flipping toggles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_interruptionsFind interruptionsARead-only
Find interruptions (manual interventions, guided failures, deployment approvals) in an Octopus Deploy space.
Interruptions are the Octopus surface equivalent to pending approvals: a deployment or runbook run pauses and waits for a human to take action. Use this tool to enumerate them or to look up a single one.
Modes (picked by which arguments you supply):
interruptionId ā fetch the slim summary for that interruption.
assignedToMe ā list interruptions the authenticated user can act on; resolves /users/me (cached per session).
regarding ā list interruptions related to a specific entity (ServerTasks-ā¦, Deployments-ā¦). Native server-side filter.
(none) ā list all interruptions, optionally filtered by pendingOnly (default: true) and skip/take.
Each summary includes:
resourceUri ā octopus://spaces/{spaceName}/interruptions/{id} for the FULL body (form definition with Markdown instructions, button options, control types, and any already-submitted values). Dereference this when the user asks for details about a specific interruption.
taskResourceUri ā octopus://spaces/{spaceName}/tasks/{taskId} for the surrounding deployment/runbook task.
publicUrl ā Octopus portal deep link to take action.
formElementNames ā just the field names (e.g. Instructions, Notes, Result). Field values are NOT in the slim summary; fetch resourceUri for those.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | Space name. | |
| interruptionId | No | Fetch the slim summary for a single interruption by ID (e.g. Interruptions-1). Mutually exclusive with regarding/assignedToMe/pendingOnly. For the full body (form definition, instructions, button options, submitted values) dereference the returned resourceUri. | |
| pendingOnly | No | Return only unprocessed (pending) interruptions. Defaults to true. Ignored when interruptionId is set. | |
| assignedToMe | No | Limit to interruptions the authenticated user can act on (CanTakeResponsibility or HasResponsibility, or where the user is the explicit ResponsibleUserId). When true, /users/me is resolved (cached per session). Octopus has no responsibleUserId query parameter, so the tool pages through the server result set and post-filters; pages are scanned up to a safety cap (filteredAs.scanComplete signals whether the entire result set was inspected). totalResults reflects the post-filter count; the unfiltered server total is exposed under filteredAs. Ignored when interruptionId is set. | |
| regarding | No | Native server-side filter to interruptions related to a specific entity ID (e.g. ServerTasks-1234, Deployments-5678). Ignored when interruptionId is set. | |
| skip | No | Pagination offset. Ignored when interruptionId is set. | |
| take | No | Pagination page size. Ignored when interruptionId is set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals important behavioral traits beyond the readOnlyHint annotation: it explains how assignedToMe resolves /users/me (cached per session), the post-filtering mechanism for assignedToMe with a safety cap, and the content of the response (slim summary vs. full body via resourceUri). This context helps the agent understand performance implications and response handling.
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 well-structured with clear sections and bullet points. It is somewhat lengthy but every sentence adds necessary detail. The structure aids readability, and the key points are front-loaded. Minor conciseness improvements could be made, but overall it earns a 4.
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 complexity of the tool (7 parameters, multiple modes, no output schema), the description is thorough. It explains the response format (slim summary vs. full body), how to retrieve detailed information (dereference resourceUri), and covers edge cases like the 'pending only' default. This completeness ensures the agent can use the tool effectively without missing critical details.
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 parameters are already documented. The main description adds value by explaining the interactions between parameters (e.g., mutual exclusivity, when pendingOnly is ignored, the caching behavior for assignedToMe). This goes beyond the schema definitions, making the semantics richer for the agent.
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 finds interruptions (manual interventions, guided failures, deployment approvals) in Octopus Deploy. The verb 'find' combined with the specific resource 'interruptions' makes the purpose unambiguous. It distinguishes itself from sibling tools by focusing on interruptions, which are a distinct entity.
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 guidance on different usage modes based on which arguments are supplied (interruptionId, assignedToMe, regarding, none). It explains when each mode is appropriate and notes mutual exclusivity. While it doesn't explicitly compare with alternatives, the sibling tools cover different resources, so no direct alternative exists. The guidance is clear and practical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_releasesFind releasesARead-onlyIdempotent
Find releases in an Octopus Deploy space.
Three modes, picked by which arguments are supplied:
releaseId ā fetch the summary for that release.
projectId ā list releases for that project (optionally filtered by searchByVersion).
neither ā list releases across the space.
Each summary includes a resourceUri for fetching the full release body (release notes, packages, build information, custom fields).
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | Space name. | |
| releaseId | No | Fetch a single release by ID. Mutually exclusive with projectId and searchByVersion. | |
| projectId | No | Restrict listing to a single project. Mutually exclusive with releaseId. | |
| searchByVersion | No | Filter by version string. Requires projectId. | |
| skip | No | Pagination offset. | |
| take | No | Pagination page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark as read-only and idempotent. Description adds context about returning summaries with a resourceUri for full body, and explains mode selection logic. 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?
Concise, front-loaded with main purpose, uses bullet points for modes. No wasted words. Each sentence adds value.
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?
Covers modes, summary vs full body, and pagination parameters are in schema. Minor gaps: no mention of ordering or empty results, but sufficient for a read tool with good 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?
Input schema has 100% description coverage, so baseline is 3. Description provides overall context for modes but does not add significant new semantic detail beyond the schema descriptions (e.g., mutual exclusivity is already in schema).
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?
Clearly states it finds releases in an Octopus Deploy space. Explains three modes (by releaseId, projectId, or neither) which distinguishes it from sibling tools like create_release and deploy_release.
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?
Describes when to use each mode: specific release, project releases, or all releases. Implicitly discourages use for full release body by mentioning resourceUri for that purpose. Could explicitly mention read_resource as an alternative for full details, but still clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_runbooksFind runbooks in a projectARead-onlyIdempotent
Find runbooks in an Octopus Deploy project.
Two project kinds are supported:
DB-backed projects: address runbooks by 'runbookId' (e.g. 'Runbooks-123'). The summary includes 'publishedRunbookSnapshotId', which run_runbook uses by default.
Config-as-Code (CaC) projects: pass 'gitRef' (branch name like 'main', tag, or commit SHA). Address a single runbook by 'runbookSlug'. The summary includes 'gitRef' instead of 'publishedRunbookSnapshotId'; run_runbook needs the same gitRef.
Modes:
runbookId ā fetch a single DB runbook.
runbookSlug + gitRef ā fetch a single CaC runbook.
gitRef alone ā list CaC runbooks at that ref.
neither ā list DB runbooks in the project (optionally filtered by partialName).
Each summary includes multiTenancyMode and environmentScope so callers can determine which environments and tenants are valid targets before invoking run_runbook.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | Space name. | |
| projectName | Yes | Project name. Runbooks are scoped to a project, so this is required for both single fetch and listing. | |
| runbookId | No | Fetch a single DB-backed runbook by ID (e.g. 'Runbooks-123'). Mutually exclusive with partialName/skip/take and with gitRef/runbookSlug. | |
| runbookSlug | No | Config-as-Code only. Fetch a single CaC runbook by slug at the given gitRef. Requires gitRef. | |
| gitRef | No | For Config-as-Code projects only. A branch name (e.g. 'main'), tag, or commit SHA. Use get_branches to list available branches. | |
| partialName | No | Filter listing by partial runbook name (case-insensitive). | |
| skip | No | Pagination offset. | |
| take | No | Pagination page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds valuable context about the summary fields (multiTenancyMode, environmentScope) and how they support pre-execution validation, which annotations alone do not convey.
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?
Well-organized with clear sections (overview, project kinds, modes, summary). It is slightly lengthy but each sentence adds value. The structure aids quick comprehension.
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 complexity (8 parameters, multiple modes, no output schema), the description covers all necessary aspects: mode selection, parameter relationships, and summary output details. It enables correct invocation without additional 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 provides 100% coverage with descriptions for all 8 parameters. The description enriches this by explaining the logical groupings and mutual exclusions (e.g., runbookId vs gitRef/runbookSlug), and clarifies how parameters interact in different modes.
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 it finds runbooks in Octopus Deploy projects, distinguishes between DB-backed and CaC runbook modes, and differentiates from sibling tools like run_runbook. Each mode is explicitly named and scoped.
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 explains when to use each mode (runbookId, runbookSlug+gitRef, gitRef alone, neither), including mutual exclusivity and required conditions. Also references get_branches for branch listing and run_runbook for execution, providing clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_tenantsFind tenants in an Octopus Deploy spaceARead-onlyIdempotent
Find tenants in a space - can retrieve a single tenant by ID or list all tenants
This unified tool can either:
Get details for a specific tenant when tenantId is provided, including the projects and environments the tenant is associated with
List all tenants in a space when tenantId is omitted
Tenants represent customers or clients in Octopus Deploy, allowing you to manage deployments and configurations specific to each tenant. Tenants can be grouped into tenant tags for easier management and deployment targeting. Tenants can also represent geographical locations, organizational units, or any other logical grouping.
Optionally provide filtering and pagination parameters when listing.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | The space name | |
| tenantId | No | The ID of a specific tenant to retrieve. If omitted, lists all tenants. | |
| skip | No | Number of tenants to skip for pagination (only used when listing) | |
| take | No | Number of tenants to take for pagination (only used when listing) | |
| projectId | No | Filter by specific project ID (only used when listing) | |
| tags | No | Filter by tenant tags (comma-separated list, only used when listing) | |
| ids | No | Filter by specific tenant IDs (only used when listing) | |
| partialName | No | Filter by partial tenant name match (only used when listing) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, indicating a safe read operation. The description adds behavioral context by noting that when retrieving a specific tenant, the response includes associated projects and environments, and that listing supports optional filtering and pagination. 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 concise with three well-structured paragraphs. The first sentence immediately states the core function. Each paragraph serves a purpose: core function, mode explanation, background. No redundant or irrelevant 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?
The description explains the tool's two modes, the concept of tenants, and mentions that single retrieval includes projects/environments. With comprehensive schema descriptions and annotations indicating a safe read operation, the description provides sufficient context for correct tool invocation. It could detail the output format but is adequate for 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?
Schema description coverage is 100%, so all parameters are documented. The description reinforces the dual mode (tenantId vs listing) and explains that filtering/pagination apply only when listing. It also adds context about what a tenant represents. This goes slightly beyond the schema, warranting a 4.
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 purpose: 'Find tenants in a space - can retrieve a single tenant by ID or list all tenants'. It uses specific verbs (find/retrieve/list) and resources (tenants), and distinguishes the two operational modes. This differentiates it from sibling tools like find_accounts or find_certificates.
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 guidance on when to use each mode: provide tenantId for a single tenant, omit to list all. It also states when filtering and pagination parameters apply (only when listing). However, it does not explicitly contrast with sibling tools or provide 'when not to use' guidance, though the resource-specific naming makes it obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_branchesGet Git branches for a version-controlled projectARead-onlyIdempotent
Get Git branches for a version-controlled project
This tool retrieves Git branches for a specific project in a space. The space name and project ID are required. Optionally provide searchByName, skip, and take parameters for filtering and pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | ||
| projectId | Yes | ||
| searchByName | No | ||
| skip | No | ||
| take | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only and idempotent. The description adds behavioral context by disclosing optional filtering and pagination parameters, though it does not explain error handling or rate limits.
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 short and to the point, with no extraneous content. However, the first sentence repeats the title slightly, but overall it is efficiently 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 5 parameters and no output schema, the description covers the basic purpose and optional filters but does not describe the return format or potential errors, leaving some gaps for an AI agent.
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 properties have no descriptions (0% coverage). The description names the parameters and their roles (required vs optional for filtering/pagination) but lacks precise semantics like the format of searchByName or the exact meaning of skip/take.
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 retrieves Git branches for a specific project, with a specific verb and resource. It distinguishes itself from sibling tools as the only branch-related operation.
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 required parameters (spaceName, projectId) and optional filtering/pagination. It implies usage when listing branches for a known project, but does not explicitly mention when not to use it or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_userGet current user informationARead-onlyIdempotent
Get information about the current authenticated user
This tool retrieves information about the currently authenticated user from the Octopus Deploy API.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. Description adds no extra behavioral context beyond stating it retrieves information. No contradiction, but no added value.
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, front-loaded with purpose. No redundancy or unnecessary text.
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 parameterless read-only tool, the description is adequate. It explains the tool's purpose but could optionally list the types of information returned (e.g., email, username) for extra clarity.
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?
No parameters exist, so baseline is 4. Description adds no parameter information, but none is needed since the schema covers all.
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?
Description clearly states verb ('Get') and resource ('current authenticated user information'). No sibling tools perform a similar function, so no need for differentiation. Purpose 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?
No explicit guidance on when to use this tool or when not to. While the use case is obvious, the description lacks any context about alternatives or prerequisites, which would be helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deployment_from_urlGet deployment details from an Octopus Deploy URLARead-onlyIdempotent
Get deployment details from an Octopus Deploy deployment URL. Returns comprehensive deployment information including the task ID needed to view execution logs.
Accepts deployment URLs like: https://your-octopus.com/app#/Spaces-1/projects/my-app/deployments/releases/1.0.0/deployments/Deployments-123
Returns:
Full deployment details (environment, release, project, created time)
taskIdForLogs: the ServerTasks- ID for this deployment
taskResourceUri: octopus:// URI for the structured activity tree (resources/read or read_resource)
grepTaskLogHint: pre-filled arguments for the grep_task_log tool ā call it with a pattern to search the raw log without fetching the whole thing
Public URL for web portal access
Recommended workflow for investigating deployment issues:
Call get_deployment_from_url with the deployment URL
Review deployment context (environment, release version, etc.) 3a. Fetch the taskResourceUri for the structured activity tree (step timings, embedded log entries by category), OR 3b. Call grep_task_log with the taskId to search the raw log for a specific error / pattern
Handles space ID to space name resolution automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full Octopus Deploy deployment URL (e.g., https://your-octopus.com/app#/Spaces-1/projects/my-app/deployments/releases/1.0.0/deployments/Deployments-123) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true. Description adds value by explaining automatic space-to-name resolution and the specific return fields like taskIdForLogs and grepTaskLogHint.
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?
Well-structured with bullet points for returns and workflow. Slightly long but every sentence adds value. Could be slightly more concise, but still efficient.
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 no output schema, description fully covers return values (including grep hint). Also explains handling of space IDs. Excellent for a single-parameter tool.
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?
Only one parameter (url) with 100% schema coverage. Description adds example URL formats and explains the required structure, going beyond the schema's basic 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?
Clear verb ('get') and resource ('deployment details from URL'). Distinguishes from siblings like get_task_from_url and grep_task_log by stating it returns deployment context and a taskId for logs.
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 explicit when-to-use (investigating deployment issues) and a recommended multi-step workflow using sibling tools (grep_task_log, read_resource). No when-not-to but alternatives are implied via workflow steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deployment_processGet deployment process details from Octopus DeployBRead-onlyIdempotent
Get deployment process by ID
This tool retrieves a deployment process by its ID. Each project has a deployment process attached, and releases/deployments can also have frozen processes attached.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | ||
| projectId | No | The ID of the project to retrieve the deployment process for. If processId is not provided, this parameter is required. | |
| processId | No | The ID of the deployment process to retrieve. If not provided, the deployment process for the project will be retrieved. | |
| branchName | No | Optional branch name to get the deployment process for a specific branch (if using version controlled projects). Try `main` or `master` if unsure. | |
| includeDetails | No | Include detailed properties for steps and actions. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint, covering safety. The description adds context about project-released process links but does not disclose additional behavioral traits like authorization requirements or rate limits.
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 brief and front-loaded with a clear statement of purpose. It contains no extraneous information, making it efficient. However, it could integrate parameter hints without adding length.
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 tool with annotations, the description covers the core functionality but lacks details on output format, error handling, or usage tips. Given the absence of an output schema, the description could do more to specify return values.
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?
Although schema coverage is high at 80%, the description adds no information about parameters. The required 'spaceName' parameter lacks a schema description and the description does not compensate, leaving a gap in understanding for the agent.
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 retrieves a deployment process by ID and provides context about project vs frozen processes. It distinguishes from other tools implicitly as a read-only lookup, but does not explicitly differentiate from siblings like 'get_deployment_from_url'.
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 guidance on when to use this tool versus alternatives. There is no mention of prerequisites, when not to use, or comparisons to sibling tools, leaving the agent to infer usage from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_kubernetes_live_statusGet Kubernetes live status from Octopus DeployARead-onlyIdempotent
Get Kubernetes live status for a project and environment
This tool retrieves the live status of Kubernetes resources for a specific project and environment. Optionally include a tenant ID for multi-tenant deployments.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | The space name | |
| projectId | Yes | The ID of the project | |
| environmentId | Yes | The ID of the environment | |
| tenantId | No | The ID of the tenant (for multi-tenant deployments) | |
| summaryOnly | No | Return summary information only |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the description's claim of 'retrieves' is consistent and adds no contradictory behavior. However, it does not disclose any additional behavioral traits beyond what annotations provide, such as rate limits or side effects.
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 concise sentences with the key information front-loaded. It could be slightly more efficient by combining sentences, but it avoids unnecessary fluff and is easy to parse.
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 retrieves data and lacks an output schema, the description should clarify what 'live status' includes (e.g., format, fields, pagination). It does not, leaving the agent uncertain about the return value. This is a significant gap for a query tool.
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 minimal value beyond the schema: it mentions 'Optionally include a tenant ID' but the schema already describes that parameter. No additional meanings or constraints are added.
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 verb 'Get' and the resource 'Kubernetes live status for a project and environment'. It distinguishes itself from sibling tools, none of which mention Kubernetes, making its purpose specific and unique.
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 (to retrieve live status) but provides no explicit guidance on when to use it vs alternatives or when not to use it. There are no other similar sibling tools, so the lack of alternatives is acceptable, but explicit context would improve scoring.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_missing_tenant_variablesGet missing tenant variables from Octopus DeployARead-onlyIdempotent
Get missing tenant variables
This tool retrieves tenant variables that are missing values. Optionally filter by tenant, project, or environment.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | The space name | |
| tenantId | No | Filter by specific tenant ID | |
| projectId | No | Filter by specific project ID | |
| environmentId | No | Filter by specific environment ID | |
| includeDetails | No | Include detailed information about missing variables |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds no additional behavioral context beyond stating it retrieves missing variables. It does not explain what 'missing' means or any side effects.
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 with two sentences: one for purpose and one for filtering. It is front-loaded and uses minimal words. However, it could be slightly more structured (e.g., bullet points for filters).
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 no output schema, the description does not explain the return format or what constitutes a 'missing variable.' It is adequate for a simple read tool but lacks completeness for more detailed understanding.
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 has 100% coverage with descriptions for all 5 parameters. The description mentions optional filtering by tenant, project, or environment, but this is already evident from the parameter descriptions. No additional semantic value is provided.
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 tool name and description clearly state it retrieves missing tenant variables. It differentiates from sibling tools like 'get_tenant_variables' which likely returns all variables, by specifying 'missing values'.
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 guidance on when to use this tool versus alternatives like 'get_tenant_variables'. The usage is implied by the tool's purpose, but the description does not provide when-to-use/when-not-to-use or mention sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_from_urlGet task details from an Octopus Deploy URLARead-onlyIdempotent
Get task details from an Octopus Deploy task URL. Returns full task details including execution logs and state.
This tool is a URL-to-ID resolver that returns the same body as the octopus://spaces/{spaceName}/tasks/{taskId}/details resource ā no need to dereference the URI afterward. If you only need lightweight metadata for polling (state, timing, completion flags) use the smaller octopus://spaces/{spaceName}/tasks/{taskId} resource instead.
Accepts task URLs like: https://your-octopus.com/app#/Spaces-1/tasks/ServerTasks-456
Key features:
Returns full task details including execution logs
Handles space ID to space name resolution automatically
Validates task ID format
For deployment URLs: If you have a deployment URL, use this workflow:
Call get_deployment_from_url with the deployment URL
Use the returned taskResourceUri (structured tree) or call grep_task_log with the returned taskId to search the raw log
Tasks represent background operations in Octopus Deploy, such as deployments, health checks, and system maintenance. Each task has a unique ID and can be monitored for status and progress.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full Octopus Deploy task URL containing a task ID (e.g., https://your-octopus.com/app#/Spaces-1/tasks/ServerTasks-456) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, non-destructive, idempotent. The description adds beyond these: returns full task details including execution logs, automatically resolves space IDs, validates task ID format, and notes that the response is the same as a specific resource. No contradictions.
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 well-structured with sections and bullet points, but somewhat lengthy. The first sentence is clear and front-loaded. Could be slightly more concise, but overall effective.
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?
Tool is simple with one parameter and clear annotations. The description explains what is returned (full details including logs and state) and how it integrates with other tools. No output schema needed as the response is described. Complete for its 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%, and the description provides additional context such as example URLs and explains that the URL contains a task ID. This enhances meaning beyond the schema.
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 it retrieves task details from an Octopus Deploy URL, acting as a URL-to-ID resolver. It distinguishes itself by specifying that it returns the same body as a specific resource, versus a lighter weight option for metadata only. This is a specific verb+resource combination that differentiates from siblings.
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 states when to use this tool versus the smaller resource for lightweight metadata. Provides a workflow for deployment URLs, directing to use get_deployment_from_url first and then grep_task_log. This gives clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tenant_variablesGet tenant variables from Octopus DeployARead-onlyIdempotent
Get tenant variables by type
This tool retrieves different types of tenant variables. Use variableType parameter to specify which type:
"all": Get all tenant variables
"common": Get common variables only
"project": Get project-specific variables only
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | The space name | |
| tenantId | Yes | The ID of the tenant to retrieve variables for | |
| variableType | Yes | Type of variables to retrieve | |
| includeMissingVariables | No | Include missing variables in the response (for common/project types) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read. The description adds no additional behavioral traits beyond the schema's parameter details. It does not disclose what happens on missing tenants or other side effects.
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 with two sentences and a bullet list. It front-loads the purpose and efficiently conveys the variable types. No unnecessary 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?
While the tool has no output schema, the description covers the core functionality and parameter choices well. It could mention the return format (list of variables) but is mostly complete for a read-only retrieval tool with strong 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%, so baseline is 3. The description clarifies the variableType enum values but merely repeats schema information. It adds no new semantic meaning for other parameters like spaceName or tenantId.
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 retrieves tenant variables by type. It specifies the verb 'get' and the resource 'tenant variables', and the distinction from siblings like 'get_variables' and 'get_missing_tenant_variables' is evident.
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 when to use the tool (to retrieve specific types of tenant variables) and provides explicit guidance on the variableType parameter. However, it does not mention alternative tools for non-tenant scoped variables, but 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.
get_variablesGet variables for a Project from Octopus DeployARead-onlyIdempotent
This tool gets all project and library variable set variables for a given project. Projects can contain variables (specific to a project), library variable sets (shared collections of variables associated with many projects), and tenant variables (variables related to a tenants connected to the project) If you want to retrieve tenant variables for a tenant connected to the project, use the get_tenant_variables tool.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | The space name | |
| projectId | Yes | The ID of the project to retrieve the variables for | |
| gitRef | No | The gitRef to retrieve the variables from, if the project is a config-as-code project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true, destructiveHint false, idempotentHint true. The description adds context about variable types but does not disclose additional behavioral traits beyond what annotations 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?
The description is clear and front-loads the main purpose. It includes explanatory context and an alternative, which is slightly wordy but not excessive.
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 retrieval tool with no output schema, the description sufficiently explains what is returned (project and library variables). It does not mention pagination or format, but given the simplicity, it is near-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%, and the description does not add parameter-specific meaning beyond the schema descriptions. The description provides context about the tool's output but not about parameters.
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 it gets all project and library variable set variables for a given project. It distinguishes from the sibling tool get_tenant_variables, which retrieves tenant variables.
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 directs users to use get_tenant_variables if they need tenant variables, providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grep_llms_txtGrep the Octopus API catalog (llms.txt)ARead-onlyIdempotent
Search the Octopus API catalog at octopus://api/llms.txt with grep-style semantics. The catalog is large (~300+ KB) ā call this rather than reading the resource body directly.
llms.txt is structured as:
Authentication and Space Selection sections (top of file)
Endpoints section: one '### {Category}' heading per resource family (Accounts, ActionTemplates, Channels, Releases, ā¦) and one bullet per endpoint of the form
- \METHOD /path` - description | Prefixes (pick one): /{spaceId}, /spaces/{spaceIdentifier} | ?queryParams ā ReturnType`Steps section: deployment step types (Octopus.* ActionType) and their configurable property keys.
Useful patterns:
'POST /releases' ā find write endpoints under a resource family
'DELETE ' ā enumerate delete endpoints
'### Channels' ā jump to a section heading
'Body: Create.*Command' ā find endpoints that take a Create command body
Parameter conventions mirror GNU grep:
pattern (regex by default; set fixedString:true for literal text)
caseInsensitive (-i)
invertMatch (-v)
fixedString (-F)
beforeContext (-B)
afterContext (-A)
maxCount (-m)
Response: totalMatches (true count across the whole file), totalLines, the matched lines with 1-indexed lineNumber, optional before/after context arrays, and catalogResourceUri for the structured fall-through.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Regex (default) or literal substring (when fixedString=true). Tested against each line of llms.txt independently ā same model as `grep`. | |
| caseInsensitive | No | Equivalent to grep -i. Default false. | |
| invertMatch | No | Equivalent to grep -v: return lines that do NOT match. Default false. | |
| fixedString | No | Equivalent to grep -F: treat pattern as a literal substring, not a regex. Use this when grepping for text containing regex metacharacters. Default false. | |
| beforeContext | No | Equivalent to grep -B: lines of preceding context to include with each match. Capped at 50. | |
| afterContext | No | Equivalent to grep -A: lines of trailing context to include with each match. Capped at 50. | |
| maxCount | No | Equivalent to grep -m: stop returning matches after this many. totalMatches in the response still reflects the true count across the whole file. Hard cap 500. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only, idempotent, non-destructive behavior. The description adds significant detail: catalog size, response structure (totalMatches, totalLines, context lines), and the structured fall-through URI. No contradictions.
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?
Well-structured with clear sections (overview, structure, useful patterns, parameter conventions, response). Each sentence serves a purpose without 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 7 parameters and no output schema, the description is exceptionally thorough: explains response format, provides catalog structure details, and includes practical examples. Fully equips the agent.
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 covers 100% of parameters with descriptions. The description adds valuable context: convention mirroring GNU grep, explanation of fixedString vs regex, and practical use cases for each 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 clearly states it searches the Octopus API catalog using grep-style semantics, specifying both the resource (llms.txt) and the action. It distinguishes itself from siblings like read_resource and grep_task_log by focusing on the API catalog.
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 advises to use this tool instead of reading the resource body directly due to size, and provides useful search patterns. While it doesn't explicitly list when not to use it, the context is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grep_task_logGrep an Octopus task activity logARead-onlyIdempotent
Search a server task's activity log with grep-style semantics. Returns only matching lines (with optional symmetric context windows). This is the canonical way to inspect task logs ā there is no full-log resource URI, because exposing one would tempt callers to inhale multi-megabyte bodies when grep is almost always the better primitive.
Use this when you know what to look for (a specific error string, a step name, a pattern). For structured access to the activity tree (step hierarchy, categories, timing) use the octopus://spaces/{spaceName}/tasks/{taskId}/details resource instead.
Parameter conventions mirror GNU grep so the schema is self-explanatory:
pattern (regex by default; set fixedString:true for literal text)
caseInsensitive (-i)
invertMatch (-v)
fixedString (-F)
beforeContext (-B)
afterContext (-A)
maxCount (-m)
Response includes totalMatches (true count across the whole log), totalLines, the matched lines with 1-indexed lineNumber, optional before/after context arrays, and a taskDetailsResourceUri for the structured fall-through.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | Octopus space name. Case-sensitive. | |
| taskId | Yes | ServerTasks-XXXX ID. Use find_releases or list_deployments to discover task IDs from their parent entities. | |
| pattern | Yes | Regex (default) or literal substring (when fixedString=true). Anchors and groups behave as in JavaScript RegExp. Tested against each log line independently ā the same model as `grep`. | |
| caseInsensitive | No | Equivalent to grep -i. Default false. | |
| invertMatch | No | Equivalent to grep -v: return lines that do NOT match. Default false. | |
| fixedString | No | Equivalent to grep -F: treat pattern as a literal substring, not a regex. Use this when grepping for text containing regex metacharacters. Default false. | |
| beforeContext | No | Equivalent to grep -B: lines of preceding context to include with each match. Capped at 50. | |
| afterContext | No | Equivalent to grep -A: lines of trailing context to include with each match. Capped at 50. | |
| maxCount | No | Equivalent to grep -m: stop returning matches after this many. totalMatches in the response still reflects the true count across the whole log. Hard cap 500. | |
| stripPrefixes | No | Strip the timestamp/level prefix (e.g. `04:36:40 Fatal | `) from each line before pattern matching AND in the returned line/context text. Default false. Turn this on when greping for words that collide with level names (Fatal, Error, Warn) or when you want clean message-only output. Note: when on, your pattern will not match against the prefix ā searching for `Fatal` won't find Fatal-level lines. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds valuable context: returns only matching lines with context, response structure (totalMatches, totalLines, line numbers, context arrays, taskDetailsResourceUri), and parameter behavior. No contradictions.
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 yet thorough: two paragraphs cover purpose, usage guidelines, and parameter conventions. Every sentence adds necessary information without redundancy, demonstrating excellent structure.
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 complexity (10 parameters, no output schema), the description is fully complete. It explains the response structure, parameter semantics, and usage context, leaving no gaps for an AI agent to misinterpret.
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 covers all parameters with detailed descriptions. The description adds further value by drawing parallels to GNU grep flags, explaining regex behavior, and clarifying nuanced options like stripPrefixes, going 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 clearly identifies the tool's function: searching a server task's activity log with grep-style semantics. It explicitly distinguishes from related tools like get_task_from_url and the details resource, ensuring no 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?
Provides explicit when-to-use guidance ('Use this when you know what to look for') and an alternative ('For structured access... use the details resource'). Also explains why a full-log resource is absent, reinforcing correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deploymentsList deployments in an Octopus Deploy spaceARead-onlyIdempotent
List deployments in a space
This tool lists deployments in a given space. The space name is required. When requesting latest deployment consider which deployment state the user is interested in (successful or all). Optional filters include: projects (array of project IDs), environments (array of environment IDs), tenants (array of tenant IDs), channels (array of channel IDs), taskState (one of: Canceled, Cancelling, Executing, Failed, Queued, Success, TimedOut), and take (number of results to return).
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | ||
| projects | No | ||
| environments | No | ||
| tenants | No | ||
| channels | No | ||
| taskState | No | ||
| skip | No | ||
| take | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description does not need to reiterate safety. It adds useful context about filters and state consideration but does not describe behavior like pagination or sorting, which is relevant for a list tool.
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 with two short paragraphs, front-loading the purpose and then listing filters. Every sentence adds value without 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 8 parameters and no output schema, the description covers most filters but misses skip/pagination details and does not describe the return format (e.g., array of deployments). Annotations compensate for safety but not for completeness of output.
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 0% schema description coverage, the description must explain parameters. It describes the required spaceName and most optional filters (projects, environments, tenants, channels, taskState, take) with clear purpose. However, it omits the skip parameter, which is present in the schema but not addressed.
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 lists deployments in an Octopus Deploy space, specifying the required space name and optional filters. It distinguishes itself from sibling tools like deploy_release or get_deployment_from_url by focusing on listing deployments.
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 advises considering deployment state for latest deployments, but it does not explicitly state when to use this tool over alternatives like get_deployment_from_url for specific deployments, nor does it mention scenarios to avoid using it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_environmentsList all environments in an Octopus Deploy spaceARead-onlyIdempotent
List environments in a space
This tool lists all environments in a given space. The space name is required. Use this tool as early as possible to understand which environments are configured. Optionally filter by partial name match using partialName parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | ||
| partialName | No | ||
| skip | No | ||
| take | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds context about filtering by partialName but does not mention pagination or other behavioral traits. With annotations covering the core safety profile, a 3 is appropriate for the added value.
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, efficient and front-loaded with the main action. It could be slightly more structured but is concise and readable.
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 no output schema and 4 parameters, the description is incomplete. It covers the required parameter and one optional, but ignores pagination (skip, take), leaving gaps for an agent to understand full usage.
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 0%, so the description must add meaning. It explains spaceName (required) and partialName (optional filter) but omits skip and take entirely, leaving two parameters undocumented. This is insufficient for a 4-parameter tool.
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 lists all environments in a space, with a specific verb ('list') and resource ('environments'). It also notes the required spaceName, making the purpose unambiguous and distinct from sibling tools like list_deployments or list_projects.
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 advises using this tool early to understand configured environments, providing clear context. However, it lacks guidance on when not to use it or alternatives, which is acceptable given there are no direct siblings for listing environments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList all projects in an Octopus Deploy spaceARead-onlyIdempotent
This tool lists all projects in a given space. Projects let you manage software applications and services, each with their own deployment process, lifecycles, and variables. Projects are where you define what you are deploying and how it should be deployed. The space name is required, if you can't find the space name, ask the user directly for the name of the space. Optionally filter by partial name match using partialName parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | ||
| partialName | No | ||
| skip | No | ||
| take | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it's safe. The description adds that it lists all projects but does not disclose pagination behavior despite the presence of skip/take parameters in the schema. No contradictions.
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 four sentences, front-loaded with the main purpose, and concise. It could be slightly more structured but is generally effective with no wasted 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?
The tool has 4 parameters and no output schema. The description explains what projects are but does not mention return format or pagination details. For a list tool, this is a notable omission, making it moderately 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 has 0% description coverage, so the description must compensate. It explains spaceName and partialName well, but does not describe skip and take (pagination parameters). Thus, it adds partial value but leaves gaps.
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 verb 'lists' and resource 'projects in a given space', with additional context that projects manage software deployments. It distinguishes from sibling tools like 'create_release' or 'deploy_release' by focusing on listing rather than creating or deploying.
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 the required parameter 'spaceName' and provides guidance to ask the user if not found. It also mentions optional partial name filter. However, it does not explicitly state when not to use or alternative tools, but the context is clear enough for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_spacesList all spaces in an Octopus Deploy instanceBRead-onlyIdempotent
List all spaces in the Octopus Deploy instance. Spaces is the main organizational unit in Octopus Deploy, Spaces keep the different projects, infrastructure and tenants completely separate. Spaces typically represent team or project boundary, but not customer boundary (use tenants for those). Always use this tool first to check that the requested space exists.
| Name | Required | Description | Default |
|---|---|---|---|
| partialName | No | ||
| skip | No | ||
| take | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the safety profile is clear. The description adds business context (spaces keep projects/infrastructure/tenants separate) and usage hints but no additional behavioral traits beyond what annotations convey.
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 that are front-loaded with purpose, then context, then usage hint. Each sentence adds value, though some redundancy could be trimmed. Overall efficient for the information conveyed.
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 simplicity of the tool and the lack of output schema, the description should explain parameters and the structure of results. It fails to do so, making it incomplete for an agent to use correctly. Annotations cover safety but not functional completeness.
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 0%, so the description bears full responsibility for parameter meaning. However, the description does not mention any of the three parameters (partialName, skip, take), leaving agents without guidance on how to filter or paginate results.
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 'List all spaces in the Octopus Deploy instance' with a specific verb and resource. It also explains what spaces are and distinguishes them from tenants, helping differentiate from sibling tools like find_tenants.
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 explicit guidance: 'Always use this tool first to check that the requested space exists.' Also clarifies that spaces represent team/project boundaries, not customer boundaries (use tenants for those), giving context on when to use this tool vs. alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_resourceRead an Octopus resource by URIARead-onlyIdempotent
Universal fetch for any 'octopus://' URI returned by any other tool. Use this whenever you see fields like 'resourceUri' or 'taskResourceUri' in a response and need the full body.
How to use:
Pass the URI string verbatim. Examples: 'octopus://spaces/Default/releases/Releases-42', 'octopus://spaces/Default/tasks/ServerTasks-7', 'octopus://spaces/Default/tasks/ServerTasks-7/details'.
The response 'mimeType' tells you how to interpret 'text': 'application/json' ā parse as JSON.
This tool is the backstop for clients that do not natively implement the MCP 'resources/read' primitive. Clients that DO support resources/read (Claude Code, MCP Inspector) can call it directly and skip this tool. Either path returns byte-identical bodies.
Tools that return resource URIs include: find_releases, get_deployment_from_url, get_task_from_url, and others. When in doubt, call read_resource on any 'octopus://' string you encounter.
Note: there is intentionally no octopus://...tasks/{id}/log resource. Call the grep_task_log tool to search task logs without inhaling the full body.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | Any 'octopus://...' URI returned by another tool (e.g. in the resourceUri or taskResourceUri field). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, destructive=false, idempotent=true. Description adds context: returns byte-identical bodies, how to interpret response (mimeType/text), and that it's a backstop for clients without resources/read. No contradictions.
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?
Well-structured with clear sections and headings. Each sentence adds value, but slightly verbose; could be more concise. Still, very effective.
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?
Comprehensive: explains purpose, usage, response interpretation (mimeType/text), limitations (no task log resource), and even mentions alternative (grep_task_log). All gaps covered despite no output 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?
Schema coverage 100% with one parameter. Description adds value by specifying 'pass the URI string verbatim', providing concrete examples, and explaining the origin of URIs (from other tools).
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 it is a 'Universal fetch for any octopus:// URI' returned by other tools, specifies the exact use case, and distinguishes itself from siblings by noting that clients with native resources/read support can skip this 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?
Explicit instructions: pass URI verbatim, examples provided, when to use (whenever you see resourceUri fields), when not to use (task log, directing to grep_task_log instead), and lists sibling tools that return URIs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_runbookRun a runbook in Octopus DeployADestructive
Run a runbook against one or more environments in Octopus Deploy.
Runbooks execute operational processes (DB backups, smoke tests, environment refresh, etc.) against the specified environments. For tenanted runs, supply tenants and/or tenantTags.
Two project kinds:
DB-backed projects: by default the runbook's published snapshot is used; pass runbookSnapshotId to pick a specific snapshot.
Config-as-Code projects: pass gitRef (branch name like 'main', tag, or commit SHA). Snapshots don't apply ā the gitRef is the version pin. Use find_runbooks with the same gitRef to discover runbook names.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | The space name | |
| projectName | Yes | The project name | |
| runbookName | Yes | The runbook name (within the project) | |
| environmentNames | Yes | Array of environment names. At least one environment must be provided. | |
| tenants | No | Array of tenant names for tenanted runs (optional) | |
| tenantTags | No | Array of tenant tags for tenanted runs (e.g., ['Region/US-West', 'Tier/Production']) | |
| runbookSnapshotId | No | DB-backed runbooks only. Specific snapshot ID. Defaults to the runbook's published snapshot if omitted. Not applicable to Config-as-Code runbooks. | |
| gitRef | No | Config-as-Code runbooks only. A branch name (e.g. 'main'), tag, or commit SHA. Use get_branches to list available refs. Mutually exclusive with runbookSnapshotId. | |
| promptedVariableValues | No | Prompted variable values as key-value pairs | |
| useGuidedFailure | No | Use guided failure mode | |
| forcePackageDownload | No | Force package download | |
| specificMachineNames | No | Run on specific machines only | |
| excludedMachineNames | No | Exclude specific machines from the run | |
| skipStepNames | No | Skip specific runbook steps | |
| runAt | No | Schedule run for later (ISO 8601 date string) | |
| noRunAfter | No | Don't run after this time (ISO 8601 date string) | |
| confirm | No | Required only when the MCP client does not support elicitation. Set to true to confirm the run; otherwise the tool aborts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description notes that runbooks execute operational processes (potentially destructive, aligning with destructiveHint:true). It discloses key behavioral details: snapshot vs gitRef for project types, and the confirm parameter requirement when client lacks elicitation support. 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?
Description is two paragraphs, front-loaded with the main action. Every sentence adds value. Could be slightly more structured (e.g., bullet points for project types), but overall concise and 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 17 parameters and no output schema, the description covers main variations: tenanted runs, project types, scheduling (runAt, noRunAfter), and references related tools (find_runbooks, get_branches). Might lack details about return values or error handling, but for a runbook execution tool, it is reasonably 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%, so baseline is 3. Description adds value beyond schema by explaining the mutual exclusivity of runbookSnapshotId and gitRef, and the context for using gitRef with Config-as-Code projects. This cross-parameter guidance improves semantics.
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 runs a runbook against one or more environments, with examples of operational processes. It distinguishes two project kinds (DB-backed vs Config-as-Code) and implies differentiation from siblings like find_runbooks, deploy_release, etc.
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 guidance on tenanted runs (tenants/tenantTags) and project-specific parameters (runbookSnapshotId vs gitRef). Does not explicitly list alternatives or when not to use this tool, but context from sibling names makes it clear this is for executing existing runbooks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_feature_toggleUpdate a feature toggleADestructive
Adjust an existing customer feature toggle in an Octopus Deploy project.
Narrow surface ā flip an environment on/off, change rollout percentages, or update the toggle-level description / default state. Internally fetches the current toggle, applies your patches in memory, and PUTs the merged body, so unmentioned environments and unmentioned fields are preserved.
Deliberately not exposed: name/slug rename, tag changes, rollout group attach/detach, tenant targeting, segments, minimum version, adding or removing environment configurations entirely. For those, use the Octopus UI.
Patches that reference an environment not already configured on the toggle are rejected with reason: environment_not_configured. The tool does not add new environment configurations.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceName | Yes | Space name. | |
| projectId | Yes | Project ID (e.g. Projects-123). Feature toggles are scoped per project. | |
| slug | Yes | The toggle's Slug (not its Id). Find it via find_feature_toggles. | |
| defaultIsEnabled | No | Toggle-level default. The value returned for environments that have no explicit per-environment configuration. | |
| description | No | Toggle-level description (max 1000 chars). Markdown supported in the UI. | |
| environments | No | Per-environment patches. Environments not listed here are preserved as-is. Each entry must reference a deploymentEnvironmentId that already exists on the toggle; unknown environments are rejected rather than silently added. Each environment may appear at most once in this array ā duplicates are rejected. | |
| confirm | No | Required only when the MCP client does not support elicitation. Set to true to confirm the update; otherwise the tool aborts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint: true. The description adds behavioral context: it fetches the current toggle, applies patches in memory, PUTs the merged body, preserving unmentioned fields. It also explains rejection of unknown environment references. This adds value beyond 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 well-structured and concise. It starts with the primary purpose, then details the scope, explicitly lists exclusions, and explains error conditions. Every sentence adds value without 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 complexity (7 parameters, destructive action, no output schema), the description covers essential behavioral aspects, error handling, and usage boundaries. It lacks mention of return values, but that is acceptable without an output schema. Overall comprehensive.
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 all 7 parameters with descriptions (100% coverage). The description adds supplementary context, such as explaining that unmentioned environments are preserved, duplicates are rejected, and the confirm parameter's conditional requirement.
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 purpose: 'Adjust an existing customer feature toggle in an Octopus Deploy project.' It specifies the narrow surface (flip environments, change rollout, update description/default state) and explicitly lists what is not exposed, distinguishing it from other operations.
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 guidance: it states what is deliberately not exposed and directs users to the Octopus UI for those cases. It also explains that patches referencing unknown environments are rejected with a specific reason, and that slugs are obtained via find_feature_toggles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have clearly distinct purposes targeting different Octopus entities (releases, deployments, accounts, certificates, etc.). However, the generic 'execute' and 'read_resource' tools overlap with the specific tools' functionality, potentially causing confusion for an agent deciding which tool to use.
Tool names consistently follow a verb_noun pattern (e.g., create_release, find_accounts, list_projects). Minor deviations include 'execute' (verb only) and 'read_resource' (generic noun), but the overall pattern is predictable and readable.
30 tools is on the heavy side for an MCP server. While Octopus Deploy is a complex product with many operations, the number feels slightly excessive. Many tools are find/list variations that could potentially be consolidated without losing clarity.
The tool surface heavily favors read operations (find_, list_, get_) while lacking specific write tools for most entities like accounts, certificates, and environments. The generic 'execute' tool can fill some gaps but requires deep API knowledge, leading to agent failures for common write tasks.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Read-only AI coding tools for change verification, release readiness, capacity, and guidance.
Plan Salesforce deploys, open pull requests and trigger pipelines from your AI client.
The Cortex MCP server provides read-only access to real-time engineering context from the Cortex developer portal, allowing AI coding assistants to answer natural language questions about your organization's catalog (microservices, libraries, domains, teams, infrastructure), scorecards (engineering standards and best practices), initiatives (goals and deadlines), and Engineering Intelligence metrics. It includes tools for querying documentation, tracking personal entities, and accessing AI-assisted insights across the entire Cortex ecosystem.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to interact with Mender IoT platform for device management, deployment monitoring, and fleet analysis through natural language commands. Provides read-only access to device status, deployment logs, releases, and system monitoring capabilities.2MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Azure DevOps to manage work items, Git repositories, branches, commits, and projects through natural language commands.1,0285MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to interact with Azure DevOps APIs for managing projects, work items, repositories, pull requests, and pipelines through natural language.19MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to interact with Azure DevOps entities like projects, repositories, work items, pull requests, and pipelines.2017MIT
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/OctopusDeploy/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server