AgentStack (agentstack.tech)

Backend for AI agents: one batched tool over ~668 actions (hosting, storage, auth, payments).

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
50%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'agentstack.execute' doesn't follow camelCase/snake_casein agentstack.execute

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,169Tokens (tool definitions)
~11.6 KBTypical response size
Moderate attention impact (0.91% of 128k context)

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-http

What it can do

Tool inventory

Tools (1)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded1 tools
verifiedversion not recorded1 tools