Ops MCP Server (Finamatik)

연락처, 거래, 작업, 메모, 재고 및 판매 주문에 대한 10개의 타입이 지정되고 감사된 도구로, 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.

ToolKindGuardrail
search_contacts(query, limit)readquery at least 2 characters, limit capped at 50
get_contact(contact_id)readfull view: deals, open tasks, last notes, last orders
list_tasks(status, assignee, due_before, limit)readISO date validated
check_inventory(sku, low_stock_only)read
pipeline_summary()readdeals by stage, open value, closing in 30 days
add_note(contact_id, text)write1 to 2,000 characters, contact must exist
create_task(contact_id, title, due_date, assignee)writeno past due dates, assignee enum
complete_task(task_id)writeidempotent
update_deal_stage(deal_id, stage)writestage enum
create_order(contact_id, sku, qty, dry_run=true)writestock 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.