{"repo":"msradam/theodosia","free":true,"listed":false,"github":"https://github.com/msradam/theodosia","clone":"git clone https://github.com/msradam/theodosia.git","description":"Put an AI agent on rails: mount a Burr state machine as an MCP server so the agent can only take the next allowed step, with every step recorded and replayable.","language":"Python","stars":15,"topics":["agent-orchestration","fastmcp","llm-agents","mcp","model-context-protocol","observability","python","state-machine","apache-burr","theodosia"],"license":"Apache-2.0","category":"mcp-servers","readme_excerpt":"Theodosia Theodosia mounts a Burr Application as an MCP server. Every Burr action is reachable through a single step(action, inputs) tool; the server checks reachability against the graph before each action runs, refuses out-of-order calls with the legal next moves, and records every attempt. Install Python 3.11, 3.12, or 3.13 (Burr does not yet support 3.14). On a fresh Python 3.14 install you will see \"no version that satisfies the requirement theodosia\"; create a 3.11–3.13 venv first. Optional extras: theodosia[observability] , theodosia[ui] , theodosia[claude] , theodosia[mellea] , theodosia[all] . On a slim Docker image ( python:3.13-slim , Alpine) the install pulls a psutil build that needs gcc and python3-dev . Either use the full python:3.13 image, or apt-get install -y gcc python3-dev before pip install . Try it without an API key Walks the coffee-order FSM through Theodosia's step tool in-process and prints the timeline with state diffs and one structured refusal. No LLM, no network, same output every run. Quickstart Save as coffee.py and run python coffee.py to serve over stdio. Pass a factory (a callable returning a built Application ) so each MCP session gets its own isolated state. Passing an already-built Application works too but shares state across sessions. Exercise the server in-process with FastMCP's Client : A client that calls pay before take order gets a structured refusal it can recover from (shown trimmed; the full payload also carries the requested a","default_branch":null,"files":null,"tree":[],"storefront":"/r/msradam","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/msradam/theodosia/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}