Python MCP server (mcp SDK + FastMCP) on FastAPI to manage Holded invoices (invoicing).
- Python 3.10+
HOLDED_API_KEYenvironment variable
uv sync
export HOLDED_API_KEY="your_api_key"
uv run uvicorn holded_mcp.app:app --host 0.0.0.0 --port 8000MCP endpoint:
http://localhost:8000/mcp
This repo also ships a CLI to call the same Holded endpoints.
export HOLDED_API_KEY="your_api_key"
holded-cli list --limit 5If you did not install it globally yet, prefix with uv run from the repo:
uv sync
export HOLDED_API_KEY="your_api_key"
uv run holded-cli list --limit 5To use holded-cli from any folder and keep it updated as you edit the repo:
uv tool install -e .
uv tool update-shellOr run the helper:
scripts/install-cli.shExamples (global install):
holded-cli get <document_id>
holded-cli create --payload @invoice.json
holded-cli update <document_id> --payload @invoice.json
holded-cli approve <document_id>
holded-cli delete <document_id>
holded-cli pay <document_id> --date 1700000000 --amount 100.0
holded-cli send <document_id> --emails "[email protected],[email protected]"
holded-cli pdf <document_id>- In the repo:
uv sync
export HOLDED_API_KEY="your_api_key"- In
~/.codex/config.toml:
[mcp_servers.holded]
command = "uv"
args = ["run", "--quiet", "python", "server.py"]
cwd = "/Users/antonio/Projects/antoniolg/holded-mcp"
env_vars = ["HOLDED_API_KEY"]HOLDED_API_KEY(required)HOLDED_BASE_URL(optional, defaults tohttps://api.holded.com/api/invoicing/v1)HOLDED_TIMEOUT_SECONDS(optional, defaults to20)