by concierge-hq
🚀 The reliability layer for building next gen MCP servers
# Add to your Claude Code skills
git clone https://github.com/concierge-hq/concierge<strong>The fabric for reliable MCP servers and AI applications.</strong>
</div>The Model Context Protocol (MCP) is a standardized way to connect AI agents to tools. Instead of exposing a flat list of every tool on every request, Concierge progressively discloses only what's relevant. Concierge guarantees deterministic results and reliable tool invocation.
[!NOTE] Concierge requires Python 3.9+. We recommend installing with uv for faster dependency resolution, but pip works just as well.
pip install concierge-sdk
Scaffold a new project:
concierge init my-store # Generate a ready to run project
cd my-store # Enter project
python main.py # Start the MCP server
Or wrap an existing MCP server two lines, nothing else changes:
# Before
from mcp.server.fastmcp import FastMCP
app = FastMCP("my-server")
# After: just wrap it
from concierge import Concierge
app = Concierge(FastMCP("my-server"))
<br />
<br />
No comments yet. Be the first to share your thoughts!
[!TIP] Concierge works at the MCP protocol level. It dynamically changes which tools are returned by
tools/listbased on the current workflow step. The agent and client don't need to know Concierge exists, they just see fewer, more relevant tools at each point.
from concierge import Concierge
from mcp.server.fastmcp import FastMCP
app = Concierge(FastMCP("my-server"))
# Your @app.tool() decorators stay exactly the same.
# You can additionally add app.stages and app.transitions.
[!NOTE] The wrap and go gives you progressive tool disclosure immediately. Add
app.stagesandapp.transitionswhen you want full workflow control, no code changes required.
Instead of exposing everything at once, group related tools together. Only the current step's tools are visible to the agent:
app.stages = {
"browse": ["search_products", "view_product"],
"cart": ["add_to_cart", "remove_from_cart", "view_cart"],
"checkout": ["apply_coupon", "complete_purchase"],
}
Control which steps can follow which. The agent moves forward (or backward) only along paths you allow:
app.transitions = {
"browse": ["cart"], # Can only move to cart
...