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, logged 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.
Release files for finamatik-ops-mcp 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| finamatik_ops_mcp-0.1.1.tar.gz | 14.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| finamatik_ops_mcp-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 27.5 kB
Release files / finamatik_ops_mcp-0.1.1.tar.gz
| Download URL | finamatik_ops_mcp-0.1.1.tar.gz |
|---|---|
| Size | 14.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7708c7246728e1aa3e4450f71e91b18637cd02435639c461c0f5d71681e1a3db
|
|
BLAKE2b-256 checksum How to use checksums |
621354c5a003d69c869821fcbd2374aa632a6e07f33196ed2dc398e3fea3444a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency logRelease files / finamatik_ops_mcp-0.1.1-py3-none-any.whl
| Download URL | finamatik_ops_mcp-0.1.1-py3-none-any.whl |
|---|---|
| Size | 12.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a0b64bafb4cf450917412b9eedbdbde77a5f368b5fcafc4df317c6a91a17f008
|
|
BLAKE2b-256 checksum How to use checksums |
235489632883661958c4ff8517658a9a587eb23f269cfffeb24069d9433c82f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency log