AgentStack (agentstack.tech)
Backend for AI agents: one batched tool over ~668 actions (hosting, storage, auth, payments).
Should I use this
Quality & Safety
Findings (1)
- LOWin agentstack.execute
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"agentstack": {
"url": "https://agentstack.tech/mcp"
}
}
}Remote endpoints
https://agentstack.tech/mcpstreamable-httpWhat it can do
Tool inventory
Tools (1)
🟢agentstack.execute(steps, context, options)
AgentStack MCP = Work Graph control plane. After session + context.project_id: agents.work_next (mcp_work_loop_v1) -> plan_claim -> plan_execute (CAS/leases). Follow packet.next_action; catalog/discovery.search only if no packet. One-shot CRM/upload may call domain actions directly. Spine: agents.plan_get -> agents.work_next -> agents.plan_claim -> agents.plan_execute. Cheap batch: work_next, plan_get, plan_claim. One/sync: plan_propose, plan_apply_proposal, plan_recovery_scan, context.get. Skip catalog when packet.next_action is set. Session: auth.get_profile -> project -> context.project_id on every batch. Setup GET /mcp/prompts/get?name=agentstack_session_setup. Packs: GET /mcp/actions execute_budget.packs (session.v1, batch.v1). Sync mcp_batch 60000ms whole batch; one heavy step per execute (agents.run wait=true; agents.plan_apply_proposal, agents.plan_propose, agents.plan_recovery_scan, context.get). LLM lane ai_stream 180000ms. async=true then discovery.job_status (GET /mcp/jobs/{job_id}). Single tool agentstack.execute; catalog_actions_public from /mcp/actions/summary. Prefer logic.* and integrations.*; not rules.*; not webhooks.*. Do not pick tools from catalog when packet.next_action is present.
Input Schema
{
"type": "object",
"properties": {
"steps": {
"type": "array",
"minItems": 1,
"description": "Steps; one heavy LLM per sync execute.",
"items": {
"type": "object",
"description": "One catalog action.",
"properties": {
"id": {
"type": "string",
"description": "Step id in batch."
},
"action": {
"type": "string",
"description": "Dotted action from /mcp/actions."
},
"params": {
"type": "object",
"description": "Action params.",
"additionalProperties": true
},
"if": {
"type": "object",
"description": "Run when predicate matches.",
"additionalProperties": true
},
"dependsOn": {
"type": "array",
"description": "Prior step ids (DAG).",
"items": {
"type": "string"
}
},
"depends_on": {
"type": "array",
"description": "Alias of dependsOn.",
"items": {
"type": "string"
}
}
},
"required": [
"id",
"action"
]
}
},
"context": {
"type": "object",
"description": "session.v1; project_id required.",
"properties": {
"project_id": {
"type": "integer",
"description": "Tenant project id."
},
"generation_env_uuid": {
"type": "string",
"description": "Sandbox env_uuid."
}
},
"additionalProperties": true
},
"options": {
"type": "object",
"description": "batch.v1 controls.",
"properties": {
"async": {
"type": "boolean",
"description": "Queue; poll discovery.job_status."
},
"workflow_run_id": {
"type": "string",
"description": "Inverse workflow run id."
},
"goal": {
"type": "string",
"description": "Goal text for playbook."
},
"observed": {
"type": "object",
"description": "workflow_runtime.observed echo.",
"properties": {
"completed_steps": {
"type": "array",
"description": "Done step ids.",
"items": {
"type": "string"
}
},
"workflow_revision": {
"type": "integer",
"description": "Cursor revision."
},
"succeeded": {
"type": "array",
"description": "Succeeded actions.",
"items": {
"type": "string"
}
},
"workflow_state_key": {
"type": "object",
"description": "Guidance binding key.",
"properties": {
"workflow_run_id": {
"type": "string",
"description": "Run id."
},
"project_id": {
"type": "integer",
"description": "Project."
},
"principal_id": {
"type": "integer",
"description": "User."
},
"graph_home": {
"type": "string",
"description": "project|user."
}
},
"additionalProperties": true
},
"goal_verification": {
"type": "object",
"description": "Release criteria.",
"additionalProperties": true
},
"evidence": {
"type": "object",
"description": "Playbook evidence.",
"additionalProperties": true
},
"current_step_id": {
"type": "string",
"description": "Active step id."
}
},
"additionalProperties": true
},
"density": {
"type": "string",
"description": "strict|guided|autonomous",
"enum": [
"strict",
"guided",
"autonomous"
]
},
"enforce_approval": {
"type": "boolean",
"description": "Pause risky steps."
},
"stopOnError": {
"type": "boolean",
"description": "Stop on first failure."
},
"continueOnError": {
"type": "boolean",
"description": "Continue after failure."
},
"executionMode": {
"type": "string",
"description": "sequential|dag|smart",
"enum": [
"sequential",
"dag",
"smart"
]
},
"goal_text": {
"type": "string",
"description": "Alias for goal."
},
"focus_node_id": {
"type": "string",
"description": "Graph node from work_next."
},
"plan_execute_mode": {
"type": "boolean",
"description": "Bind plan_execute lane."
},
"routed_goal": {
"type": "object",
"description": "Routed goal snapshot.",
"properties": {
"intent_id": {
"type": "string",
"description": "Intent id."
},
"goal_text": {
"type": "string",
"description": "Goal text."
},
"response_mode": {
"type": "string",
"description": "tools|workflow."
},
"step_actions": {
"type": "array",
"description": "Suggested actions.",
"items": {
"type": "string"
}
},
"semantic_contract": {
"type": "object",
"description": "Effect constraints.",
"additionalProperties": true
}
},
"additionalProperties": true
},
"semantic_strict": {
"type": "boolean",
"description": "Enforce goal anchor match."
},
"envelope": {
"type": "string",
"description": "compact|expand",
"enum": [
"compact",
"expand"
]
},
"recipe_id": {
"type": "string",
"description": "MCP recipe id."
},
"recipe_params": {
"type": "object",
"description": "Recipe params.",
"additionalProperties": true
},
"idempotency_key": {
"type": "string",
"description": "Retry receipt key."
}
},
"additionalProperties": true
}
},
"required": [
"steps"
],
"description": "batch.v1 execute; packs on /mcp/actions; discovery.describe per action."
}Community
Evidence