Skip to main content
Glama
PrefectHQ

prefect-mcp-server

Official
by PrefectHQ

prefect-mcp-server

WARNING

This project is under active development and may change drastically at any time.

This is an experimental MCP server for Prefect. APIs, features, and behaviors are subject to change without notice. We encourage you to try it out, provide feedback, and contribute. Please create issues or open PRs with your ideas and suggestions.

An MCP server for interacting with prefect resources.

The server gives MCP clients read-only tools for inspecting Prefect Cloud and self-hosted Prefect instances, plus a docs proxy so assistants can look up current Prefect CLI, SDK, and deployment guidance.

Choose Your Setup

Use case

Recommended setup

Authentication

Claude Code or Codex

Prefect plugin for your client

Prefect Cloud OAuth

Claude Tag or Cowork

The same Prefect plugin

Organization-managed Prefect Cloud OAuth

Local MCP client

uvx stdio server

Active local Prefect profile or env vars

Self-hosted Prefect or custom Cloud workspace

Self-hosted HTTP or stdio server

API key, basic auth, env vars, or headers

Team-operated shared server

HTTP deployment with per-request headers

User or service-account credentials in headers

Related MCP server: n8n-manager-mcp

Claude Code Plugin

The easiest setup for Claude Code is the Prefect plugin:

# add from marketplace
/plugin marketplace add prefecthq/prefect-mcp-server

# install the plugin
/plugin install prefect

This connects Claude to Prefect's hosted, read-only MCP server for diagnostics, documentation, and current release notes. Claude opens Prefect Cloud OAuth during installation so you can select the workspaces it may access.

NOTE

The plugin does not read~/.prefect/profiles.toml or require a local Prefect installation. For self-hosted Prefect or explicit credentials, use the local uvx setup below.

Codex Plugin

The same hosted MCP server and workflow guidance are available as a Codex plugin:

# add from marketplace
codex plugin marketplace add prefecthq/prefect-mcp-server

# install the plugin
codex plugin add prefect@prefect

Like the Claude Code plugin, Codex authenticates directly with Prefect Cloud OAuth. The plugin contains no API keys or placeholder credentials.

The same plugin bundle is suitable for Cowork and Claude Tag because it references the hosted MCP URL instead of launching a process on the user's machine. Claude Tag administrators attach it and its Prefect credential to the appropriate Access bundle.

Prefect's privacy policy and terms and conditions apply to the hosted service.

Run Locally

When running the MCP server locally with stdio transport, it automatically uses your local Prefect configuration from ~/.prefect/profiles.toml if available.

# minimal setup - inherits from local Prefect profile
claude mcp add prefect \
  -- uvx --from prefect-mcp prefect-mcp-server

# or explicitly set credentials
claude mcp add prefect \
  -e PREFECT_API_URL=https://api.prefect.cloud/api/accounts/[ACCOUNT_ID]/workspaces/[WORKSPACE_ID] \
  -e PREFECT_API_KEY=your-cloud-api-key \
  -- uvx --from prefect-mcp prefect-mcp-server
NOTE

For self-hosted Prefect servers with basic auth,use PREFECT_API_AUTH_STRING instead of PREFECT_API_KEY.

TIP

Prefect Cloud users on Team, Pro, and Enterprise plans can use service accounts for API authentication. Pro and Enterprise users can restrict service accounts to read-only access since this MCP server requires no write permissions.

Deploy Your Own Server

Deploy your own server when you need a custom Prefect API target, self-hosted Prefect, a private network, or an API-key-based team deployment.

  1. Fork this repository on GitHub:

    gh repo fork prefecthq/prefect-mcp-server
  2. Deploy it on Prefect Horizon or FastMCP Cloud.

  3. Configure the server:

    • server path: src/prefect_mcp_server/server.py

    • requirements: pyproject.toml

    • environment variables:

      • PREFECT_API_URL: https://api.prefect.cloud/api/accounts/[ACCOUNT_ID]/workspaces/[WORKSPACE_ID]

      • PREFECT_API_KEY: your Prefect Cloud API key

      • PREFECT_API_AUTH_STRING: basic auth credentials for self-hosted Prefect, if needed

      • OPENAI_APPS_CHALLENGE_TOKEN: domain-verification token for an OpenAI public plugin submission, if needed

  4. Add the deployed HTTP URL to your MCP client:

    claude mcp add prefect --transport http https://your-server-name.fastmcp.app/mcp
NOTE

For self-hosted deployments, environment variables are configured on the deployed MCP server, not in your MCP client configuration. The MCP host authenticates access to the MCP server, while this server uses the configured Prefect credentials to access Prefect.

Prefect operates a hosted MCP deployment that uses HTTP MCP OAuth instead of asking users to create or paste API keys. This is the endpoint used by the Prefect plugin.

A user can also add the hosted MCP URL directly to a compatible client:

claude mcp add prefect \
  --transport http https://prefect.fastmcp.app/mcp

The MCP client discovers OAuth metadata from the server, opens a browser for Prefect Cloud authentication, and asks the user to choose the workspaces this MCP client may read. After authentication, the assistant can list the consented workspaces and call the same read-only Prefect tools against those workspaces.

Cloud OAuth mode:

  • uses HTTP MCP OAuth, not stdio credentials

  • does not require PREFECT_API_KEY in the MCP client

  • limits workspace-scoped tools to the workspaces selected during consent

  • requires workspace-scoped tool calls to include a workspace_id

  • keeps the shared read-only tool definitions from this repository

Useful first prompts:

  • "Tell me what Prefect workspaces you can access."

  • "Look across all authorized workspaces and summarize recent failed flow runs."

  • "Compare deployment health between my staging and production workspaces."

Unattended Service-Account Clients

Browser OAuth is the right flow for human-operated MCP clients. Workflow agents and other noninteractive runtimes should use service-account MCP OAuth credentials issued by Prefect Cloud, exchange those credentials for an MCP bearer token, and connect to the hosted MCP URL with an Authorization header.

export PREFECT_MCP_CLOUD_CLIENT_ID=...
export PREFECT_MCP_CLOUD_CLIENT_SECRET=...

uvx --from prefect-mcp prefect-mcp-cloud-token

Agents can also exchange credentials in process before constructing their MCP client:

from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport
from prefect_mcp_server.cloud_oauth import exchange_client_credentials_token

token = await exchange_client_credentials_token()
transport = StreamableHttpTransport(
    url="https://prefect.fastmcp.app/mcp",
    headers={"Authorization": f"Bearer {token.access_token}"},
)

async with Client(transport) as client:
    print(await client.list_tools())

The token response includes expires_in. Treat an agent as long-running if it may keep using the MCP connection longer than that returned lifetime. In that case, request a new token with the same client credentials before reusing the MCP connection. This follows the OAuth client-credentials pattern: the client credentials are the renewable secret, and the access token is the time-limited bearer credential sent to the MCP server.

Cloud OAuth Deployment Entrypoint

Prefect-operated Cloud OAuth deployments use a dedicated entrypoint:

  • server path: src/prefect_mcp_server/cloud.py

  • required runtime flag: PREFECT_MCP_CLOUD_ENABLED=true

This entrypoint reuses the same read-only tool definitions as the local/API-key server, adds Prefect Cloud OAuth, and adds Cloud OAuth-only workspace discovery. If OAuth is not configured, the Cloud OAuth entrypoint fails at import time instead of starting an unprotected server.

Cloud OAuth mode is selected by deploying src/prefect_mcp_server/cloud.py. The hosted server validates Prefect Cloud-issued MCP OAuth access tokens against Prefect Cloud's JWKS endpoint, so the MCP runtime does not need access to Cloud token-signing secrets.

Cloud OAuth settings use the PREFECT_MCP_CLOUD_ prefix:

Environment variable

Purpose

PREFECT_MCP_CLOUD_ENABLED

Set to true for hosted Cloud OAuth mode

PREFECT_MCP_CLOUD_API_BASE_URL

Optional override for the Prefect API base URL

PREFECT_MCP_CLOUD_AUTH_BASE_URL

Optional override for auth helper endpoints

PREFECT_MCP_CLOUD_AUTH_JWKS_URI

Optional override for the Prefect Cloud MCP OAuth JWKS endpoint

PREFECT_MCP_CLOUD_AUTHORIZATION_SERVER

Optional override for advertised OAuth authorization server

PREFECT_MCP_CLOUD_AUTH_AUDIENCE

Optional override for the expected token audience; defaults to the hosted MCP resource URL (<public base URL>/mcp)

PREFECT_MCP_CLOUD_CLIENT_ID

Optional service-account MCP OAuth client id for unattended token exchange

PREFECT_MCP_CLOUD_CLIENT_SECRET

Optional service-account MCP OAuth client secret for unattended token exchange

PREFECT_MCP_CLOUD_PUBLIC_BASE_URL

Public base URL for the hosted MCP server

PREFECT_MCP_PUBLIC_BASE_URL

Legacy alias for the public base URL

For centrally-hosted deployments where multiple users connect to the same MCP server instance, credentials can be passed via HTTP headers instead of environment variables. This enables each request to authenticate with its own Prefect workspace.

Supported headers:

  • X-Prefect-Api-Url: Prefect API URL, required for both Cloud and self-hosted Prefect

  • X-Prefect-Api-Key: Prefect Cloud API key

  • X-Prefect-Api-Auth-String: basic auth credentials for self-hosted Prefect, formatted as username:password

Claude Code CLI:

claude mcp add-json prefect '{
  "type": "http",
  "url": "https://your-server.fastmcp.app/mcp",
  "headers": {
    "X-Prefect-Api-Url": "https://api.prefect.cloud/api/accounts/[ACCOUNT_ID]/workspaces/[WORKSPACE_ID]",
    "X-Prefect-Api-Key": "your-api-key"
  }
}'

Claude Desktop app:

{
  "mcpServers": {
    "prefect": {
      "type": "http",
      "url": "https://your-server.fastmcp.app/mcp",
      "headers": {
        "X-Prefect-Api-Url": "https://api.prefect.cloud/api/accounts/[ACCOUNT_ID]/workspaces/[WORKSPACE_ID]",
        "X-Prefect-Api-Key": "your-api-key"
      }
    }
  }
}

Python with FastMCP client:

from fastmcp.client import Client
from fastmcp.client.transports import StreamableHttpTransport

headers = {
    "X-Prefect-Api-Url": "https://api.prefect.cloud/api/accounts/[ACCOUNT_ID]/workspaces/[WORKSPACE_ID]",
    "X-Prefect-Api-Key": "your-api-key",
}

transport = StreamableHttpTransport(
    url="https://your-server.fastmcp.app/mcp",
    headers=headers,
)
client = Client(transport=transport)

async with client:
    result = await client.call_tool("get_identity", {})
    print(result)
NOTE

When HTTP headers are provided, they take precedence over environment variables. If no headers are present, the server falls back to the configured environment variables or local Prefect profile.

Other MCP Clients

This MCP server works with any MCP-compatible client. Most local clients use the same stdio command and optional environment variables.

Cursor (.cursor/mcp.json):

{
  "mcpServers": {
    "prefect": {
      "command": "uvx",
      "args": ["--from", "prefect-mcp", "prefect-mcp-server"],
      "env": {
        "PREFECT_API_URL": "https://api.prefect.cloud/api/accounts/[ACCOUNT_ID]/workspaces/[WORKSPACE_ID]",
        "PREFECT_API_KEY": "your-api-key"
      }
    }
  }
}

Codex CLI:

codex mcp add prefect -- uvx --from prefect-mcp prefect-mcp-server

codex mcp add prefect \
  --env PREFECT_API_URL=https://api.prefect.cloud/api/accounts/[ACCOUNT_ID]/workspaces/[WORKSPACE_ID] \
  --env PREFECT_API_KEY=your-api-key \
  -- uvx --from prefect-mcp prefect-mcp-server

Or edit ~/.codex/config.toml directly:

[mcp.prefect]
command = "uvx"
args = ["--from", "prefect-mcp", "prefect-mcp-server"]

[mcp.prefect.env]
PREFECT_API_URL = "https://api.prefect.cloud/api/accounts/[ACCOUNT_ID]/workspaces/[WORKSPACE_ID]"
PREFECT_API_KEY = "your-api-key"

Gemini CLI:

gemini mcp add prefect uvx --from prefect-mcp prefect-mcp-server

gemini mcp add prefect \
  -e PREFECT_API_URL=https://api.prefect.cloud/api/accounts/[ACCOUNT_ID]/workspaces/[WORKSPACE_ID] \
  -e PREFECT_API_KEY=your-api-key \
  uvx --from prefect-mcp prefect-mcp-server

Or edit ~/.gemini/settings.json directly:

{
  "mcpServers": {
    "prefect": {
      "command": "uvx",
      "args": ["--from", "prefect-mcp", "prefect-mcp-server"],
      "env": {
        "PREFECT_API_URL": "https://api.prefect.cloud/api/accounts/[ACCOUNT_ID]/workspaces/[WORKSPACE_ID]",
        "PREFECT_API_KEY": "your-api-key"
      }
    }
  }
}

Kiro (~/.kiro/settings/mcp.json):

{
  "mcpServers": {
    "prefect": {
      "command": "uvx",
      "args": ["--from", "prefect-mcp", "prefect-mcp-server"],
      "env": {
        "PREFECT_API_URL": "https://api.prefect.cloud/api/accounts/[ACCOUNT_ID]/workspaces/[WORKSPACE_ID]",
        "PREFECT_API_KEY": "your-api-key"
      }
    }
  }
}

VS Code with GitHub Copilot (.vscode/mcp.json):

{
  "servers": {
    "prefect": {
      "command": "uvx",
      "args": ["--from", "prefect-mcp", "prefect-mcp-server"],
      "env": {
        "PREFECT_API_URL": "https://api.prefect.cloud/api/accounts/[ACCOUNT_ID]/workspaces/[WORKSPACE_ID]",
        "PREFECT_API_KEY": "your-api-key"
      }
    }
  }
}

Windsurf (~/.codeium/windsurf/mcp_config.json):

{
  "mcpServers": {
    "prefect": {
      "command": "uvx",
      "args": ["--from", "prefect-mcp", "prefect-mcp-server"],
      "env": {
        "PREFECT_API_URL": "https://api.prefect.cloud/api/accounts/[ACCOUNT_ID]/workspaces/[WORKSPACE_ID]",
        "PREFECT_API_KEY": "your-api-key"
      }
    }
  }
}
TIP

Most MCP clients follow a similar configuration pattern. If your client is not listed here, check its documentation for MCP server configuration. Thecommand, args, and env values above usually work with minor adjustments to the config format.

Capabilities

This server enables MCP clients to interact with Prefect read-only APIs:

Monitoring and inspection

  • View dashboard overviews with flow run statistics and work pool status

  • Query deployments, flows, flow runs, task runs, work pools, and automations with advanced filtering

  • Retrieve detailed execution logs from flow runs

  • Track events across your workflow ecosystem

  • Review rate limit usage for Prefect Cloud

Documentation access

  • Search current Prefect documentation through the mounted docs MCP server

  • Find current CLI and SDK syntax for write operations

  • Look up deployment, work pool, and automation patterns

Intelligent debugging

  • Get contextual guidance for troubleshooting failed flow runs

  • Diagnose deployment issues, including concurrency problems and unhealthy work pools

  • Identify root causes of workflow failures

Development

# clone the repo
gh repo clone prefecthq/prefect-mcp-server && cd prefect-mcp-server

# install dev deps and pre-commit hooks
just setup

# run tests
just test

Evals

This project includes scenario tests that connect Pydantic AI agents to the MCP server and validate that they can solve realistic Prefect support tasks. See evals/README.md.

Evals should be written like support case reproductions: set up a workspace state that represents a real customer problem, ask the agent the kind of question a user or support engineer would ask, and verify the final answer identifies the concrete cause or next action. Protocol behavior such as OAuth token validation belongs in unit tests; evals should prove that the MCP server helps an agent solve user-facing Prefect problems.

uv run pytest evals

mcp-name: io.github.PrefectHQ/prefect-mcp-server

Available Tools

14 tools
docs_search_prefectB

Search the Prefect knowledgebase for documentation on concepts, usage examples, and best practices.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesa search query to find relevant document excerpts from Prefect's knowledgebase
top_kNoHow many document excerpts to return.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only states what the tool does (search) but omits traits like rate limits, authentication needs, output format hints, or whether it's read-only. The minimal description leaves agents uninformed about side effects or constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no wasted words, front-loaded with the core action and resource. Efficient and to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description need not detail return values. It adequately covers the tool's domain (concepts, usage examples, best practices). Some mention of scope (e.g., that it returns excerpts) would improve completeness, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description adds no further semantic detail beyond the schema's explanations (e.g., 'a search query' vs description's generic phrasing). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Search') and resource ('Prefect knowledgebase'), and distinguishes from sibling tools like get_flows or get_automations which retrieve specific data objects rather than documentation excerpts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. The description does not mention when not to use it, nor does it suggest alternatives for different use cases. Given siblings cover automation, dashboard, deployments, etc., some differentiation would help.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_automationsA

Get automations with optional filters.

Returns compact summaries by default (trigger_type, action_count). Filter by specific ID(s) for full detail including trigger config, actions, actions_on_trigger, and actions_on_resolve.

Filter operators:

  • id.any_: Match specific automation IDs

  • name.any_: Match automation names

  • enabled.eq_: Filter by enabled state

Examples: - List all automations: get_automations() - Full detail: get_automations(filter={"id": {"any_": [""]}}) - Get by name: get_automations(filter={"name": {"any_": ["my-automation"]}}) - Only enabled: get_automations(filter={"enabled": {"eq_": True}})

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of automations to return
filterNoJSON filter object for querying automations
workspace_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
errorYes
detailNo
successYes
automationsYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the full burden. It discloses default compact summaries and full detail via ID filtering. It could mention read-only nature but is otherwise thorough for a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with bullet points and examples, front-loaded with the core purpose. Every sentence adds value, and there is no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has three parameters, an output schema, and moderate complexity, the description covers all necessary context: filter operators, default behavior, and usage examples. It is complete for agent selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant value beyond the input schema by explaining filter operators, examples, and the effect on returned detail level. Schema coverage is 67%, and the description compensates well for the filter parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets automations with optional filters, distinguishing it from sibling tools like get_flows or get_deployments by resource type. It uses specific verbs and provides filter operators and examples.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage examples and filter operators, guiding when to use filters for summary vs full detail. However, it does not explicitly state when not to use this tool or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dashboardB

Get a high-level dashboard overview of the Prefect instance.

Returns current flow run statistics, work pool status, and all active concurrency limits (global/tag-based, deployment, work pool, and work queue). Essential for diagnosing flow run delays and bottlenecks.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorYes
successYes
flow_runsYesStatistics about flow runs.
active_work_poolsYes
concurrency_limitsYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It explains what the tool returns (statistics, status, concurrency limits) but does not disclose behavioral traits like side effects, permissions, or error conditions. Adequate but limited.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with purpose and content details. Efficient with no fluff, though slightly verbose in listing all concurrency limit types.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema, the description does not need to explain return values. However, it fails to describe the single optional parameter, leaving a gap. Adequate for the main functionality but incomplete for full usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one parameter (workspace_id) with 0% description coverage, meaning the schema provides no meaning. The tool description does not mention or explain this parameter at all, leaving the agent without guidance on when or how to use it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets a high-level dashboard overview and lists specific data returned (flow run statistics, work pool status, concurrency limits). It distinguishes from siblings by aggregating multiple types into one overview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions it is 'essential for diagnosing flow run delays and bottlenecks,' implying a usage context. However, it does not explicitly state when to use this tool versus alternatives or provide any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_deploymentsA

Get deployments with optional filters.

Returns compact summaries by default. Filter by specific ID(s) for full detail including parameters, parameter_openapi_schema, job_variables, work_pool details, and recent_runs.

Filter operators:

  • any_: Match any value in list

  • all_: Match all values

  • like_: SQL LIKE pattern matching

  • not_any_: Exclude values

  • is_null_: Check for null/not null

  • eq_/ne_: Equality comparisons

Examples: - List all deployments: get_deployments() - Full detail: get_deployments(filter={"id": {"any_": [""]}}) - Active deployments: get_deployments(filter={"paused": {"eq_": False}}) - Production deployments: get_deployments(filter={"tags": {"all_": ["production"]}})

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of deployments to return
filterNoJSON filter object for advanced querying. Supports all Prefect DeploymentFilter fields.
workspace_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
errorYes
detailNo
successYes
deploymentsYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must carry full burden. Discloses compact vs full detail, filter operators, and examples. However, does not state idempotence, read-only nature, or pagination behavior beyond limit parameter. Adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is succinct and front-loaded with key behavior ('Get deployments with optional filters'). Filter operators are listed in a structured, easy-to-read format. Could be slightly shorter, but effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters and an output schema, description covers filter usage well and explains return detail differences. Missing mention of what happens with large result sets (though limit is present) and default behavior when no filter is applied. Overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Extensive explanation of filter operators with examples (any_, all_, like_, etc.) and how to use them. Adds significant meaning beyond the schema's terse description of the filter object. Limit and workspace_id are also clarified in schema, but filter gets rich documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'get' and resource 'deployments'. Distinguishes from siblings by specifying it retrieves deployment objects, while siblings target other entities (flows, runs, etc.). Examples and filter details reinforce purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Describes when to use filters and how to get full detail vs compact summaries. Provides explicit examples. Lacks when-not-to-use guidance, but the tool's scope is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_flow_run_logsA

Get execution logs for a flow run.

Retrieves log entries from the flow run execution, including timestamps, log levels, and messages.

Examples: - Get logs: get_flow_run_logs(flow_run_id="...") - Get more logs: get_flow_run_logs(flow_run_id="...", limit=500)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of log entries to return
flow_run_idYesUUID of the flow run to get logs for
workspace_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
logsYes
errorYes
limitYes
successYes
truncatedYes
flow_run_idYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden for behavioral traits. It does not disclose whether the operation is read-only, any rate limits, or ordering of results. The description only states what is retrieved, lacking deeper behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a clear purpose statement and examples. However, the two examples are very similar and could be combined. It is front-loaded with the primary action, making it efficient for quick scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 parameters, one required, output schema exists), the description adequately covers the core functionality. It does not mention pagination or default ordering, but the limit parameter addresses page size. For a log retrieval tool, it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67% (two of three parameters have descriptions in the schema). The description adds little beyond the schema, only using placeholders in examples. It does not explain the workspace_id parameter's role or format beyond the schema, so it meets the baseline but adds minimal extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool retrieves execution logs for a flow run, including specific attributes like timestamps, log levels, and messages. It distinguishes itself from sibling tools like get_task_runs and get_flow_runs by focusing specifically on logs for a flow run.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides examples of usage but does not give explicit guidance on when to use this tool versus alternatives like get_task_runs for task-level logs. There is no mention of when not to use it or prerequisites, but the examples help imply typical usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_flow_runsA

Get flow runs with optional filters.

Returns compact summaries by default. Filter by specific ID(s) for full detail including parameters, inlined deployment info, and work pool info.

Filter operators:

  • any_: Match any value in list

  • all_: Match all values

  • like_: SQL LIKE pattern matching

  • not_any_: Exclude values

  • is_null_: Check for null/not null

  • after_/before_: Time comparisons

  • gt_/gte_/lt_/lte_: Numeric comparisons

Examples: - List recent runs: get_flow_runs() - Get specific run: get_flow_runs(filter={"id": {"any_": [""]}}) - Failed runs: get_flow_runs(filter={"state": {"type": {"any_": ["FAILED"]}}}) - Production runs: get_flow_runs(filter={"tags": {"all_": ["production"]}})

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of flow runs to return
filterNoJSON filter object for advanced querying. Supports all Prefect FlowRunFilter fields.
workspace_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
errorYes
detailNo
successYes
flow_runsYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that default returns compact summaries and filtering by specific ID provides full detail. It does not mention permissions, rate limits, or read-only nature, but the behavior is clearly described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at under 150 words, well-structured with a clear purpose, operator list, and examples. Every sentence adds value without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description needs not detail return values. It covers the main functionality, filter usage, and output granularity. Minor omission: no mention of the default sorting or pagination, but still adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% with two parameters described. The description adds significant value by explaining filter operators, providing examples, and clarifying how the filter parameter works, which goes beyond the schema's basic description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves flow runs with optional filters. It is specific about the resource and action, and differentiates from siblings like get_flows and get_task_runs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the filter parameter for specific IDs vs. the default compact summaries, and provides filter operators and examples. However, it does not explicitly state when not to use this tool or compare with alternatives like get_flow_run_logs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_flowsA

Get flows with optional filters.

Returns a list of flows registered in the workspace.

Filter operators:

  • any_: Match any value in list

  • like_: SQL LIKE pattern matching

  • all_: Match all values

Examples: - List all flows: get_flows() - Get specific flow: get_flows(filter={"id": {"any_": [""]}}) - Flows by name pattern: get_flows(filter={"name": {"like_": "etl-%"}}) - Flows by tags: get_flows(filter={"tags": {"all_": ["production"]}})

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of flows to return
filterNoJSON filter object for advanced querying. Supports all Prefect FlowFilter fields.
workspace_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
errorYes
flowsYes
successYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It explains that the tool returns a list of flows and supports filtering with operators. It does not disclose any risks, side effects, or required permissions. The description adds value beyond the schema by explaining the filter operators, but lacks explicit read-only assurance or mention of pagination behavior (though limit is documented).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise, using bullet points for operators and examples for clarity. It front-loads the purpose and then provides actionable details. No extraneous sentences; each part contributes to understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (not shown but indicated), the description does not need to detail return values. It covers the core functionality, filter operators, and parameter defaults (via schema). It is complete enough for an agent to understand when and how to use this tool, though it could mention workspace_id context more explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 67% description coverage (two of three parameters have descriptions in the schema). The description adds significant meaning by explaining the filter operators (any_, like_, all_) and providing concrete examples for each parameter. This helps an agent construct valid filter objects beyond what the schema's terse description ('JSON filter object') provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get flows with optional filters' and 'Returns a list of flows registered in the workspace.' This provides a specific verb and resource. While it distinguishes from siblings like get_flow_runs and get_deployments by focusing on flows themselves, it does not explicitly differentiate from related tools like get_automations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a list of filter operators and examples, giving implicit guidance on how to use filters (e.g., any_, like_, all_). However, it does not explicitly state when to use this tool versus alternatives such as get_flow_runs or get_deployments, nor does it mention any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_identityA

Get identity and connection information for the current Prefect instance.

Returns API URL, type (cloud/oss), and user information if available. Essential for understanding which Prefect instance you're connected to.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorYes
successYes
identityYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears full burden. It indicates a read-only operation returning specific data, and mentions conditional availability of user info ('if available'). It could explicitly state that it requires authentication and is idempotent, but the description is sufficient for a simple read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no wasted words. The first sentence states the purpose, the second lists return fields, and the third provides a use case. It is front-loaded and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers main functionality and return values. It mentions the use case and conditional data. However, it could mention when the workspace_id parameter is needed (e.g., Prefect Cloud OAuth mode). Given the output schema exists (not shown), the description is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one optional parameter (workspace_id) with a description, so schema coverage appears high. The tool description does not add information about this parameter, relying on the schema. Thus the description adds no extra value beyond the schema, warranting a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 'identity and connection information', specifying the returned data (API URL, type, user info). It distinguishes from siblings like get_flows and get_deployments by focusing on instance identity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use it: 'Essential for understanding which Prefect instance you're connected to.' It provides clear context but lacks explicit guidance on when not to use or alternatives, though the uniqueness among siblings makes this less critical.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_object_schemaC

Get a schema for an object type.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_typeYesName of the object type to get a schema for

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only says 'Get', implying a read operation, but fails to highlight that the object_type is constrained to a single value (automation). It does not mention idempotency, rate limits, 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.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise but under-specified. It lacks any structure or additional detail that would help an agent. Every sentence should earn its place; this one is too minimal to be fully useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (which likely documents return values), the description still needs to explain the tool's purpose and constraints. It fails to mention the restriction to automation, making it incomplete 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (the parameter has a description and an example). The tool description adds no additional meaning beyond what the schema already provides, so it meets the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool retrieves a schema for an object type, which is clear but overly generic. It does not mention that the only supported object_type is 'automation', making it less precise than it could be. It loosely distinguishes from siblings that retrieve instances (e.g., get_flows) rather than schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. It does not specify that it is limited to the 'automation' type, nor does it provide context on prerequisites or use cases. An agent would have no help deciding to use this over 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_runsA

Get task runs with optional filters.

Returns a list of task runs and their details matching the filters. Note that 'task_inputs' contains dependency tracking information (upstream task relationships), not the actual parameter values passed to the task.

Filter operators:

  • any_: Match any value in list

  • like_: SQL LIKE pattern matching

  • not_any_: Exclude values

  • is_null_: Check for null/not null

Examples: - List recent tasks: get_task_runs() - Get specific task: get_task_runs(filter={"id": {"any_": [""]}}) - Failed tasks: get_task_runs(filter={"state": {"type": {"any_": ["FAILED"]}}}) - Tasks by pattern: get_task_runs(filter={"name": {"like_": "%process%"}})

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of task runs to return
filterNoJSON filter object for advanced querying. Supports all Prefect TaskRunFilter fields.
workspace_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
errorYes
successYes
task_runsYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It warns that 'task_inputs' contains dependency tracking, not parameter values, and explains filter operators. It does not discuss rate limits or authentication, but the read-only nature is implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, includes a concise warning, lists filter operators, and provides examples. Every sentence adds value without unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains purpose, filters, and a key nuance. Output schema exists, so return values need not be elaborated. It lacks mention of pagination or limit behavior, but these are in the schema. Overall sufficient for the complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning beyond the schema by providing filter operator details, examples, and a warning about 'task_inputs'. Schema coverage is 67%, so the description compensates effectively with usage patterns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 'task runs', and distinguishes from sibling tools like get_flow_runs by specifying it returns task run details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes filter operators and examples, but does not explicitly guide when to use this tool over siblings (e.g., get_flow_runs). It lacks exclusions or comparison to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_work_poolsA

Get work pools with optional filters.

Returns compact summaries by default (name, type, status, concurrency_limit). Filter by specific ID(s) for full detail including work queues, active worker counts, and descriptions. Essential for debugging deployment issues related to flow runs being stuck or not starting.

Filter operators:

  • any_: Match any value in list

  • like_: SQL LIKE pattern matching

Examples: - List all pools: get_work_pools() - Full detail: get_work_pools(filter={"id": {"any_": [""]}}) - Kubernetes pools: get_work_pools(filter={"type": {"any_": ["kubernetes"]}})

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of work pools to return
filterNoJSON filter object for advanced querying. Supports all Prefect WorkPoolFilter fields.
workspace_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
errorYes
detailNo
successYes
work_poolsYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It describes the default compact output, full detail with ID filter, and filter operators. It does not mention auth or rate limits, but the read-only nature is inferred.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main purpose, followed by details and examples. It is well-structured but slightly lengthy; however, every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema, the description does not need to explain return values. It covers purpose, filtering, default vs full detail, usage guidelines, and examples, making it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes all three parameters, achieving 67% coverage (context's claim). The description adds value by explaining filter operators and providing examples, enhancing understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it gets work pools with optional filters, and distinguishes between compact summaries and full detail. It implicitly differentiates from sibling tools by focusing specifically on work pools, a unique resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides examples and notes that it's essential for debugging deployment issues. It explains filter operators but does not explicitly state when not to use this tool versus alternatives; however, 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.

orientationC

Use this tool to get oriented with the Prefect MCP server.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description only says 'get oriented' without disclosing what happens (e.g., returns capabilities list, instructions). The description does not compensate for missing annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with the action word 'Use'. No wasted words, but could still add more substance without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although the tool is simple with no parameters and an output schema exists, the description is vague. It could explain what 'orientation' provides (e.g., introduction to endpoints) to be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, schema coverage is 100% trivially. Baseline 3 is appropriate; the description adds nothing about parameters since there are none.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'get oriented with the Prefect MCP server', which is a clear verb+resource. It distinguishes from siblings like 'get_flows' or 'docs_search_prefect' by being the only orientation tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says 'Use this tool' but provides no guidance on when to use it vs. alternatives, no explicit context or exclusions. Implied for first-time users, but no explicit when-not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_eventsA

Read and filter events from the Prefect instance.

Provides a structured view of events with filtering capabilities.

Note: When no time range is specified, events from the last 1 hour are returned by default. Use occurred_after/occurred_before parameters to query a different time range.

Common event type prefixes:

  • prefect.flow-run: Flow run lifecycle events

  • prefect.deployment: Deployment-related events

  • prefect.work-queue: Work queue events

  • prefect.agent: Agent events

Examples: - Recent flow run events: read_events(event_type_prefix="prefect.flow-run") - Last 24 hours: read_events(occurred_after="") - Specific time range: read_events(occurred_after="2024-01-01T00:00:00Z", occurred_before="2024-01-02T00:00:00Z")

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of events to return
workspace_idNo
occurred_afterNoISO 8601 timestamp to filter events after
occurred_beforeNoISO 8601 timestamp to filter events before
event_type_prefixNoFilter events by type prefix

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
errorYes
totalYes
eventsYes
successYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the default time range and filtering behavior, but does not mention pagination, ordering, or performance implications. The limit parameter's maximum is only in the schema, not in the description. Adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections: general purpose, a note about default time range, list of common event type prefixes, and concrete examples. Every sentence adds value, and the most critical information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (5 parameters) and that an output schema exists, the description covers the main usage scenarios: default behavior, time filtering, and event type filtering. It omits details like pagination and sorting, but the examples provide practical guidance. Overall, it is sufficiently complete for a read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (80%), but the description adds value by explaining the default time range behavior and providing common event type prefixes and examples. This goes beyond the schema, which only lists property descriptions and examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads and filters events from the Prefect instance. It specifies the resource (events) and action (read), and distinguishes it from sibling tools like get_flow_runs and get_task_runs which focus on different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: it explains the default time range (last 1 hour), how to filter by time using occurred_after/occurred_before, and event type prefixes with examples. It does not explicitly state when not to use the tool or mention alternative tools, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

review_rate_limitsA

Review rate limit usage for this Prefect Cloud account (Cloud only).

Prefect Cloud API access is governed by rate limits in different categories (runs, deployments, flows, work_pools, writing-logs, etc.). When you see HTTP 429 errors or "Too Many Requests" responses from the Prefect API, use this tool to identify which operation groups were throttled and when.

Queries all common rate limit operation groups and groups consecutive throttled minutes into periods, showing which operation groups were affected during each stretch.

Note: These are not API authentication keys - they're categories of API operations that are rate limited together (e.g., "runs" includes all flow run API calls, "writing-logs" includes log write operations).

Useful for diagnosing why API calls are being rate limited. The response shows:

  • Distinct time periods where throttling occurred

  • Which operation groups were throttled during each period

  • Total denied requests and peak denials per minute for each group

Examples: - Check recent throttling: review_rate_limits() - Custom time range: review_rate_limits(since="2025-09-30T00:00:00Z", until="2025-10-01T00:00:00Z")

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoStart time for usage data (ISO 8601). Defaults to 3 days ago.
untilNoEnd time for usage data (ISO 8601). Defaults to 1 minute ago.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorYes
sinceYes
untilYes
successYes
summaryYes
account_idYes
throttling_periodsYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but the description thoroughly explains what the tool does, including grouping throttled minutes, showing periods and operation groups, and clarifying these are not API keys. It also notes 'Cloud only' constraint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a summary, context, usage guidance, output details, and examples. Every sentence is purposeful and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 optional params, output schema exists), the description covers when to use, output structure, and constraints. Minor omission: no mention of data retention limits, but overall complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters. The description adds value by providing usage examples that illustrate typical invocations, which helps semantics beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Review rate limit usage for this Prefect Cloud account (Cloud only),' specifying a clear verb and resource. No sibling tool covers rate limits, so it distinguishes well.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'When you see HTTP 429 errors or "Too Many Requests" responses.' No alternatives are needed as no sibling tools are similar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.6/5.0
Disambiguation5/5

All tools have clearly distinct purposes: each targets a specific Prefect entity (automations, dashboard, deployments, flow runs, flows, etc.) with no overlapping functionality. The descriptions make it easy for an agent to select the appropriate tool.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern with underscores, predominantly using 'get_' for retrieval operations. Minor deviations like 'docs_search_prefect', 'read_events', and 'orientation' are still clear and fit the overall schema.

Tool Count5/5

With 14 tools, the server is well-scoped for Prefect monitoring and inspection. Each tool serves a distinct function without unnecessary redundancy, covering all key entities and operations relevant to the domain.

Completeness3/5

The tool set covers all major entities for observation (flows, deployments, runs, work pools, automations, events, rate limits), but lacks any mutation or management capabilities (create, update, delete). This is a notable gap for a comprehensive Prefect interface, though internally consistent for a read-only server.

Maintenance

ActivityActive
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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/PrefectHQ/prefect-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server