coding

Concierge: Stage-Based Tool Access for MCP Agents

Concierge provides stage-based tool access control for MCP agents, enabling developers to progressively unlock capabilities as agents advance through defined

Someone built a clever solution for MCP servers that keeps agents from calling tools in the wrong order.

The problem: When you hook up 50+ tools to an agent, it sometimes does dumb stuff like trying to checkout before adding items to a cart. Adding system prompts to explain the order rarely helps.

Concierge organizes MCP tools into stages, so agents only see relevant tools at each step:


app = Concierge(FastMCP("my-server"))

app.stages = {
 "browse": ["search_products"],
 "cart": ["add_to_cart"],
 "checkout": ["pay"]
}

app.transitions = {
 "browse": ["cart"],
 "cart": ["checkout"]
}

Now the agent can’t jump to pay() until it’s actually in the checkout stage. Bonus: reduces context bloat since you’re not serving all 50 tools on every message.

Works with existing MCP setups, and apparently handles semantic search for massive tool collections too.

https://github.com/concierge-hq/concierge