Ops MCP Server (Finamatik)
十個類型化、經稽核的工具,涵蓋聯絡人、交易、任務、筆記、庫存與銷售訂單,適用於 Claude Desktop、Claude Code 或任何 MCP 用戶端。唯讀模式會移除寫入工具;訂單預設為預覽,僅在 dry_run 為 false 時提交;每次呼叫皆受稽核。SQLite 後端位於單一類別中,可替換為任何 CRM 或 ERP API。MIT 授權。
文件
Ops MCP server
An MCP server (Python, official mcp SDK, FastMCP) that lets Claude Desktop, Claude Code or any MCP client work with a company's operations data through ten typed, audited tools over contacts, deals, tasks, notes, inventory and sales orders, plus three resources and a briefing prompt. Built and tested on sample data by Finamatik. The SQLite backend is one class (backend.py) and is the only thing to swap for a real CRM, ERP or project system.
| Tool | Kind | Guardrail |
|---|---|---|
search_contacts(query, limit) | read | query at least 2 characters, limit capped at 50 |
get_contact(contact_id) | read | full view: deals, open tasks, last notes, last orders |
list_tasks(status, assignee, due_before, limit) | read | ISO date validated |
check_inventory(sku, low_stock_only) | read | |
pipeline_summary() | read | deals by stage, open value, closing in 30 days |
add_note(contact_id, text) | write | 1 to 2,000 characters, contact must exist |
create_task(contact_id, title, due_date, assignee) | write | no past due dates, assignee enum |
complete_task(task_id) | write | idempotent |
update_deal_stage(deal_id, stage) | write | stage enum |
create_order(contact_id, sku, qty, dry_run=true) | write | stock check; preview first, commit only with dry_run=false |
Safety model: tool annotations (readOnlyHint, destructiveHint, idempotentHint) so clients can ask before writes; OPS_MCP_READ_ONLY=1 removes the write tools from the tool list entirely; every call is appended to audit.jsonl (timestamp, tool, arguments, ok or error, duration); validation errors come back as MCP tool errors the model can act on.
Install and run
pip install finamatik-ops-mcp
finamatik-ops-mcp # stdio, what Claude Desktop uses; seeds sample data on first start
OPS_MCP_READ_ONLY=1 finamatik-ops-mcp # read only: the write tools are not registered at all
Data lives in ~/.finamatik-ops-mcp/ (ops.db and audit.jsonl). Move it with OPS_MCP_HOME, or point at specific files with OPS_MCP_DB and OPS_MCP_AUDIT.
Claude Desktop, claude_desktop_config.json:
{ "mcpServers": { "ops-mcp": { "command": "finamatik-ops-mcp", "env": { "OPS_MCP_READ_ONLY": "0" } } } }
Claude Code: claude mcp add ops-mcp -- finamatik-ops-mcp
Remote: OPS_MCP_TRANSPORT=streamable-http finamatik-ops-mcp serves /mcp on port 8000; put authentication in front of it.
From source:
git clone https://github.com/finamatik/ops-mcp-server && cd ops-mcp-server
pip install -e ".[test]"
python3 server.py # same server, run from the checkout
python3 -m pytest tests -q # 6 end to end tests through a real MCP client
npx @modelcontextprotocol/inspector --config inspector.config.json --server ops-mcp
Requires Python 3.10 or later and the official mcp SDK 1.27 or later (pinned below 2.0; the 2.x SDK renamed FastMCP).
Files
finamatik_ops_mcp/server.py tools, resources, prompt and the main() entry point. finamatik_ops_mcp/backend.py data layer and sample seed (40 contacts, 25 deals, 30 tasks, 10 SKUs, 20 orders). server.py and backend.py at the root are thin shims so python3 server.py still works from a checkout. tests/test_server.py. inspector.config.json. server.json is the MCP registry manifest. .github/workflows/publish.yml publishes a GitHub release to PyPI with trusted publishing.
MIT licence, copyright Finamatik Business Solutions FZE LLC. Questions and production use: info@finamatik.com.