astro-flow-mcp
Click on "Deploy 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., "@astro-flow-mcpsearch capabilities for dark frame processing"
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.
Astro Flow MCP
Astro Flow 的 stdio MCP 桥接服务。它只通过 HTTP 调用 Astro Flow 扩展,不加载节点适配器,也不在 MCP 进程中运行 Siril。扩展负责工作流校验、幂等请求和执行。
状态: 独立源码仓库,版本 0.1.0;已实现 7 个 MCP 工具及 HTTP 客户端。源码位于 GitHub,可在本地构建分发包;尚未发布到包索引,也没有自动发布流程。实际运行需另行启动 ComfyUI Astro Flow 扩展 提供的 /astro-flow/v1 接口。
安装与启动
需要 Python 3.10 或更新版本。开发安装示例:
uv venv --python python3.10 .venv
uv pip install --python .venv/bin/python -e '.[dev]'
ASTRO_FLOW_URL=http://127.0.0.1:8188 .venv/bin/astro-flow-mcp命令使用 stdio 传输;stdout 专供 MCP 协议。MCP 客户端配置示例(将路径替换为本机绝对路径):
{
"mcpServers": {
"astro-flow": {
"command": "/absolute/path/to/astro-flow-mcp/.venv/bin/astro-flow-mcp",
"env": {
"ASTRO_FLOW_URL": "http://127.0.0.1:8188"
}
}
}
}ASTRO_FLOW_URL 默认是 http://127.0.0.1:8188。设置 ASTRO_FLOW_TOKEN 后,所有 HTTP 请求会带上 Authorization: Bearer <token>;是否允许无 token 的本机请求由扩展决定。请求超时为 30 秒,客户端不会自动重试编辑或提交。编辑或提交发生传输超时时,请先读取画布或运行状态;若要重试同一次请求,必须保留相同的 request_id 和请求体。扩展不可达时,工具返回明确错误。
Related MCP server: PacedLoop MCP Server
工具
MCP 工具 | HTTP 请求 | 用途 |
|
| 搜索可用节点能力 |
|
| 查看参数与连接说明 |
|
| 列出打开的画布 |
|
| 读取节点、连线和修订号 |
|
| 按修订号编辑 |
|
| 提交执行 |
|
| 读取状态、产物和错误 |
当前扩展每次编辑只接受一个操作。操作类型限于 add_node、remove_node、set_parameter、connect、disconnect,目前只支持 AstroSirilMetadata 节点。add_node 要求 node_type="AstroSirilMetadata" 和 parameters(含 input_path 字符串及 timeout 数字),可选 position: [x,y]。set_parameter 使用 node_id、name、value;remove_node 使用 node_id;connect 使用 source_node、source_slot、target_node、target_slot;disconnect 使用 target_node、target_slot。扩展负责校验这些字段。运行时当前只支持含一个 metadata 输出节点的工作流。
调用前先通过能力工具了解可用节点,再读取画布以取得当前 revision。每个预期变更使用新的 request_id;重送同一次变更时保留原 ID 和相同请求体。遇到修订冲突,重新读取画布再决定后续编辑。
例如,读取 c1 得到 revision="r1" 后,可向 edit_workflow 传入:
{
"canvas_id": "c1",
"request_id": "9c82dcf9-2e5f-43a6-aa7a-e44e748851b5",
"expected_revision": "r1",
"operations": [
{"type": "set_parameter", "node_id": "node-1", "name": "input_path", "value": "/data/light.fit"}
]
}上例节点 ID 仅供展示;请以 get_workflow 的实际节点为准。成功时工具直接返回扩展的 JSON 对象。get_run 当前返回产物文件路径,不返回输出 JSON 文件正文;需要内容时由调用方另行读取该文件。扩展错误 { "error": { "code": "...", "message": "..." } } 会成为 MCP 工具错误,并带 HTTP 状态码。若浏览器端超时返回 canvas_timeout,编辑可能已应用;先重新读取画布,再决定是否继续。
验证与构建
.venv/bin/python -m pytest -q
.venv/bin/python -m build --no-isolation测试覆盖 HTTP 路径、请求体、Bearer token、错误、无自动重试,以及真实 stdio MCP 握手/工具发现/调用。上面的本地构建命令使用已安装构建依赖的虚拟环境并加 --no-isolation。CI 在 push 和 pull request 时测试、构建;手动触发 workflow_dispatch 时保存构建产物。发布到包索引需要人工决定与执行,CI 不会自动上传。
更多实现状态见 docs/STATUS.md。
Available Tools
7 toolsdescribe_capabilityB
Get one capability's parameter and connection details.
| Name | Required | Description | Default |
|---|---|---|---|
| capability_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verb 'Get' clearly signals a read operation, and the description states what information is returned. However, with no annotations, it does not explicitly confirm side-effect-free behavior, access requirements, or error conditions, though the output schema helps cover the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes to conveying the tool's core function, making it appropriately concise for a simple getter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter getter with an output schema, the description is minimally adequate, but it lacks usage context and parameter sourcing guidance. It does not mention how to find the capability_id or when this tool should be preferred over related siblings.
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%, and the description does not explain the capability_id parameter beyond what the property title already implies. It does not mention how to obtain a valid capability_id or any format constraints, leaving the agent to infer meaning from the tool name alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and names the resource ('one capability's parameter and connection details'), making the tool's purpose clear. It also implicitly distinguishes itself from search_capabilities by focusing on a single capability's details, though it does not explicitly name sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives like search_capabilities or get_workflow. The phrase 'one capability' implies a single-capability lookup, but no when-to-use or when-not-to-use context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_workflowA
Apply Astro Flow operations to a canvas at a known revision.
Send exactly one operation. Allowed types: add_node, remove_node, set_parameter, connect, disconnect. Supply a unique request_id for idempotency. On revision conflict, read the canvas again before deciding whether to submit another edit. The server validates node types and operation details.
| Name | Required | Description | Default |
|---|---|---|---|
| canvas_id | Yes | ||
| operations | Yes | ||
| request_id | Yes | ||
| expected_revision | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses idempotency via a unique request_id, revision-conflict handling, server-side validation, and the single-operation constraint. This is unusually transparent for a mutation 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?
Six short sentences, each carrying critical information: purpose, single-operation rule, allowed types, idempotency, conflict handling, and validation. No filler; constraints are front-loaded for immediate visibility.
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 covers the core behaviors an agent needs: what to submit, how to ensure idempotency, and how to recover from conflicts. The main gap is the lack of per-operation payload schemas (e.g., what fields add_node requires), but the server-validation note and enumerated types reduce the risk of misuse.
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 must add meaning. It explains request_id (idempotency), expected_revision (known revision/conflict), and operations (allowed types, exactly one). It does not detail the internal fields of each operation type, but it does compensate for the schema's complete lack of 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 opens with a specific verb-resource pair: 'Apply Astro Flow operations to a canvas at a known revision.' It also enumerates the exact operation types (add_node, remove_node, set_parameter, connect, disconnect), making it distinct from siblings like get_workflow (read) and submit_workflow (likely full submission) without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: send the edit at a known revision, send exactly one operation, and on revision conflict read the canvas again before retrying. It does not explicitly name alternatives or state when not to use this tool, but the guidance is concrete enough for an agent to apply correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_runA
Read a submitted run's status, artifacts, and errors.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The verb 'Read' accurately discloses that this is a non-mutating operation, which is the primary behavioral trait. However, it adds nothing beyond that — no mention of error behavior for missing runs, auth needs, latency, or partial-result possibilities.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single nine-word sentence with the verb front-loaded and zero filler. Every word contributes meaning, and the returns are listed compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with an output schema present (so return-value details are covered elsewhere), the description captures the operation, the input, and the key outputs. The only missing context, explicit sibling routing and deeper behavior, is minor for this scale of 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 0%, so the description must compensate. 'A submitted run' does indirectly clarify that run_id refers to the identifier of a previously submitted run, but it does not explain the ID format or how to obtain it. Given the single, semantically obvious parameter, this is adequate but not rich.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') with a clear resource ('a submitted run') and enumerates what the agent receives back (status, artifacts, errors). It is distinguishable from siblings by resource type — runs versus workflows, capabilities, and canvases — though it does not explicitly name an alternative, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: when you need a run's status, artifacts, or errors, this is the tool. There is no explicit when-to-use/when-not-to-use statement, no mention of alternatives, and no exclusion criteria such as 'use get_workflow for workflow data instead.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflowA
Read the current nodes, links, and revision of a canvas.
| Name | Required | Description | Default |
|---|---|---|---|
| canvas_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. 'Read' adequately signals non-mutating behavior, and specifying that it returns current nodes, links, and revision gives a snapshot-like expectation. However, it does not mention side effects, permissions, or any limitations, leaving some ambiguity for a tool with zero annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence with no filler. It front-loads the verb and specifies the three key components returned (nodes, links, revision), making it highly efficient for an agent 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?
For a simple read operation with one parameter and an output schema, the description is largely sufficient to guide invocation. It does not explain when to use the tool relative to siblings or provide parameter details, but the overall complexity is low and the return structure exists in the 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?
The schema has one parameter, canvas_id, but schema description coverage is 0%. The description does not explain the meaning, format, or provenance of canvas_id beyond the parameter name itself. Since the description does not compensate for the lack of schema documentation, parameter understanding relies entirely on inference from the parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('a canvas') and clearly identifies the exact content returned: current nodes, links, and revision. This clearly distinguishes it from sibling tools like submit_workflow or edit_workflow, which are write 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 clearly implies use when the agent needs the current state of a canvas rather than modifying or submitting it. It does not explicitly name alternatives or exclusion conditions, but the read-only framing provides adequate context for choosing this tool over its mutating siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_canvasesA
List currently open Astro Flow workflow canvases.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. 'List' clearly implies a read-only operation, and 'currently open' provides state context. However, it does not disclose any prerequisites, session requirements, or why openness matters for invocation, and there is no explicit statement about 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 a single, front-loaded sentence with no filler. Every word contributes meaning: subject, action, resource, and state condition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, simple listing operation with an output schema, the description is nearly complete. It clearly states what is listed. It could slightly benefit from noting that the tool returns the open canvases (already covered by output schema) or from referencing when one would want this, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the rubric establishes a baseline of 4 for such cases. The description does not need to explain parameters, and the schema confirms no inputs are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a precise resource ('currently open Astro Flow workflow canvases'). The qualifier 'currently open' clearly distinguishes this from tools like get_workflow, which presumably retrieves a specific workflow rather than enumerating open canvases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when you need to see currently open canvases in Astro Flow. However, it does not explicitly contrast this with alternatives like get_workflow or describe_capability, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_capabilitiesB
Search Astro Flow node capabilities. An empty query lists all capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of disclosing safety and side effects. It only says 'Search,' implying a read operation but never explicitly stating it. It also omits details about what is returned, limits, or any side effects, leaving the agent underinformed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: the first states the core purpose, the second adds a useful behavioral note about the query parameter. No redundancy, well-front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, the description omits any guidance on when to use this tool versus describe_capability and doesn't explicitly state it's read-only. It's adequate for a simple search tool but has notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does by explaining that an empty query lists all capabilities, giving practical meaning to the query parameter. However, it lacks formatting details or examples, so it only meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('search') and resource ('Astro Flow node capabilities'). It distinguishes from siblings like describe_capability by using 'search' rather than 'describe' or 'get', but it doesn't explicitly name alternatives, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus the sibling describe_capability or other tools. The only usage hint is about the query parameter (empty query lists all), which concerns parameter behavior, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_workflowB
Submit a canvas for execution at a known revision, using a unique request_id.
| Name | Required | Description | Default |
|---|---|---|---|
| canvas_id | Yes | ||
| request_id | Yes | ||
| expected_revision | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It hints at idempotency via 'unique request_id' and revision-checking via 'known revision', but it does not state side effects, validation failures, or whether execution starts immediately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler; every phrase earns its place by adding a constraint or the core action.
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 state-changing submission tool with no annotations and three required parameters, the description is too thin. It does not explain what happens after submission, how to correlate with get_run, or how errors like revision mismatch are surfaced, even though an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning to expected_revision ('known revision') and request_id ('unique'), but provides no format, constraints, or relationship details for canvas_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('submit') and resource ('canvas for execution') and adds the key constraints of a known revision and unique request_id. It is clear enough to distinguish from siblings like get_workflow or edit_workflow, though it does not explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'at a known revision' implies the appropriate context for calling the tool, but there is no explicit guidance on when to prefer this over sibling tools or what preconditions must hold before submission.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.0- First observed
describe_capability - First observed
edit_workflow - First observed
get_run - First observed
get_workflow - First observed
list_canvases - First observed
search_capabilities - First observed
submit_workflow
TDQS
Scored across 7 tools
Each tool targets a distinct resource and action: workflow submission, run status, capability search/describe, canvas listing/reading/editing. There is no overlap in purpose, and descriptions further clarify boundaries.
All tool names follow a consistent verb_noun pattern with lowercase and underscores (submit_, get_, search_, describe_, list_, edit_). The naming is uniform and predictable.
Seven tools is well-scoped for an Astro Flow workflow server, covering execution, monitoring, capability discovery, and canvas editing without unnecessary bloat or thinning.
The core lifecycle is covered: reading/editing canvases, submitting workflows, retrieving run status, and exploring capabilities. A minor gap exists—there is no run listing or cancellation—but it does not break the primary workflows.
Maintenance
Related MCP Connectors
Create, browse, remix, collaborate on, and run durable AI workflow nodes from MCP hosts.
Query, browse, and automate OmegaAI workspaces from any MCP client. Streamable HTTP with OAuth 2.0.
Workflow diagnostics, capability routing, and x402 settlement for MCP-compatible agents.
Read and write Mission Control state via MCP — projects, tasks, subtasks, templates, status updates.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables interaction with the Procesio automation platform to list, view, and manage workflows. It allows users to launch process instances and monitor their status through MCP-compatible clients.12Apache 2.0
- FlicenseNot gradedqualityDmaintenanceEnables interaction with the hosted PacedLoop API to manage workflows and monitor process runs. It provides tools for workflow CRUD operations, run execution management, and access to detailed performance analytics within MCP-capable clients.-
- AlicenseNot gradedqualityBmaintenanceA local stdio MCP bridge for managing n8n from Hermes Agent, exposing tools to check health, list/inspect workflows, view executions, and activate/deactivate workflows securely without exposing n8n over the network.MIT
- FlicenseCqualityCmaintenanceEnables local Copilot use to interact with SDLC workflow tools (workflow tasks, internal-readiness, epic/ticket/repo-task, change-request, and journey) via a stdio MCP server that proxies to a local Workflow Service.42-