Skip to main content

cloud-finops-mcp

MCP server exposing the OptimNow Cloud FinOps skill (reference library + named-pattern playbooks) as queryable tools for any MCP-aware client (Claude Code, Cursor, Codex CLI, Windsurf, Aider, Cline, etc.).

The skill itself ships in canonical Claude Agent-Skills format and is also installable via the cross-tool installer (./install.sh) for direct context injection. This MCP server is the enrichment path: instead of loading the full skill into the prompt, the agent calls tools to discover, filter, and fetch only what it needs.

What the server exposes

Six tools, all read-only, split across two surfaces.

References - long-form provider and discipline files (~300-500 lines each):

Tool Purpose
list_references() List all references with their FCP metadata.
get_reference(name) Fetch the full markdown body of one reference.
find_references(domain?, capability?, phase?, persona?, maturity?) Faceted query over the FinOps Capability/Phase frontmatter.

The reference faceted query supports any combination of:

  • domain - FinOps Framework domain (e.g. Optimize Usage & Cost, Quantify Business Value)
  • capability - FinOps capability (matches both primary and secondary)
  • phase - Inform, Optimize, Operate
  • persona - matches both primary and collaborating personas
  • maturity - Crawl, Walk, Run

Playbooks - small named-pattern runbooks (~80-130 lines each):

Tool Purpose
list_playbooks() List all named-pattern playbooks with their metadata.
get_playbook(name) Fetch the full markdown body of one playbook.
find_playbooks(scope?, service?, waste_category?, confidence?) Faceted query over the playbook frontmatter.

The playbook faceted query supports:

  • scope - aws, azure, gcp, or cross-cloud
  • service - provider service (e.g. AWS NAT Gateway); exact-match
  • waste_category - orphaned, idle, overprovisioned, commitment-mismatch, schedule-blindness, modernization, ai-ml-inefficiency, egress
  • confidence - obvious, likely, possible (OptimNow three-tier model)

All filters across both surfaces AND together. String matches are case-insensitive and exact (no substring matching).

When to use which surface:

  • A playbook answers "how do I detect/fix this specific pattern?" (zombie NAT, snapshot sprawl, idle ELB). It includes problem statement, symptoms, a detection query (CUR / KQL / BigQuery SQL / CLI), fix steps, and the anti-pattern.
  • A reference answers anything broader: billing mechanics, commitment strategy, allocation methodology, persona-specific framings, or cross-pattern reasoning.

Install

pip install cloud-finops-mcp

Or run without installing via uv:

uvx cloud-finops-mcp

Configure your MCP client

After install, point your client at the cloud-finops-mcp console script.

Claude Code

Project-level (.mcp.json at the repo root) or user-level (~/.claude/mcp.json):

{
  "mcpServers": {
    "cloud-finops": {
      "command": "cloud-finops-mcp"
    }
  }
}

Restart Claude Code, then run /mcp to confirm the server is connected.

Cursor

~/.cursor/mcp.json:

{
  "mcpServers": {
    "cloud-finops": {
      "command": "cloud-finops-mcp"
    }
  }
}

Codex CLI

~/.codex/config.toml:

[mcp_servers.cloud-finops]
command = "cloud-finops-mcp"

Windsurf

~/.windsurf/mcp.json:

{
  "mcpServers": {
    "cloud-finops": {
      "command": "cloud-finops-mcp"
    }
  }
}

Any other MCP client

The server speaks MCP over stdio. Point any compatible client at cloud-finops-mcp (or python -m cloud_finops_mcp).

Streamable HTTP (hosted deployments)

stdio is the default and is what every local client above spawns. For a hosted deployment, the same six tools are served over streamable HTTP:

cloud-finops-mcp --transport http
  • Route is /mcp (the SDK default, and what hosting platforms probe).
  • Binds 0.0.0.0; port comes from $PORT, falling back to 8000. --host and --port override both.
  • Runs stateless: a new transport and session per request, no server-side session affinity. The server is a read-only retrieval surface with no per-user state, so this costs nothing and is what allows horizontal or serverless scaling.
  • No extra dependency. uvicorn and starlette already ship as hard dependencies of mcp, so there is no [http] extra to install.

Nothing about the tools changes between transports. tests/test_e2e_http.py mirrors the stdio suite over HTTP so the two cannot silently diverge.

Note that a self-hosted MCP server added to Claude as a custom connector will not render the bundled MCP Apps viewer, however conformant it is: Claude gates interactive rendering to connectors accepted into its Connectors Directory. See the Lessons learned entry in the repo's CLAUDE.md.

Example tool calls

Agent prompt: "Use the cloud-finops MCP to find references for the Optimize phase aimed at Engineering."

Calls find_references(phase="Optimize", persona="Engineering") and gets back the filtered subset (AWS, Azure, GCP, Bedrock, Databricks, etc.) without loading the full skill into the prompt.

Agent prompt: "Pull the AWS reference."

Calls get_reference(name="finops-aws") and gets back the full markdown body (~300 lines) instead of the entire knowledge base.

Agent prompt: "Show me the obvious-confidence AWS waste playbooks."

Calls find_playbooks(scope="aws", confidence="obvious") and gets back the list of high-signal AWS patterns (zombie NAT gateway, orphaned EBS volumes, etc.).

Agent prompt: "Walk me through the zombie NAT gateway pattern."

Calls get_playbook(name="aws-zombie-nat-gateway") and gets back the ~90-line runbook (problem, symptoms, detection query, fix, anti-pattern, see-also).

When to use this vs the installer

If you... Use
Want the skill loaded as static context for every chat The cross-tool installer (./install.sh)
Have a big-codebase session with limited context budget The MCP server (fetch on demand)
Want to filter references by FinOps domain/capability/phase/persona/maturity The MCP server (find_references)
Use a client that doesn't support MCP The cross-tool installer

The two paths are complementary. You can install both.

Development

git clone https://github.com/OptimNow/cloud-finops-skills.git
cd cloud-finops-skills/mcp_server
python scripts/sync_references.py        # populate src/cloud_finops_mcp/data/
pip install -e ".[dev]"
pytest

Versioning

The PyPI package version tracks the skill release. The trigger is a .claude-plugin/plugin.json version bump reaching main, not a hand-cut tag: the auto-tag-on-plugin-bump workflow reads the new version, creates the matching vX.Y.Z tag, and publishes both the skill release zip and a new cloud-finops-mcp wheel, so the bundled references match what the rest of the repo ships. Versions must be full three-part semver (v1.27.0); the workflow rejects anything else.

Because a plugin.json bump publishes, content PRs never touch it. Version bumps live in dedicated release PRs that move plugin.json, .claude-plugin/marketplace.json metadata.version, and this package's pyproject.toml together. See the release-train rule in the repo's CLAUDE.md.

License

CC BY-SA 4.0 - same as the parent skill. Credit OptimNow.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cloud_finops_mcp-1.31.0.tar.gz (405.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cloud_finops_mcp-1.31.0-py3-none-any.whl (454.5 kB view details)

Uploaded Python 3

File details

Details for the file cloud_finops_mcp-1.31.0.tar.gz.

File metadata

  • Download URL: cloud_finops_mcp-1.31.0.tar.gz
  • Upload date:
  • Size: 405.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cloud_finops_mcp-1.31.0.tar.gz
Algorithm Hash digest
SHA256 b9bd9dfb080695a9d96d155c819bc6581b97c3e7596e52f29e197fc214abbf3d
MD5 be708414c0110d4e4a8c70c6a2e0fcb9
BLAKE2b-256 662e65310bbde75ee88064ed870eb9a7d491339eaa724d84c6e6812e3013c916

See more details on using hashes here.

Provenance

The following attestation bundles were made for cloud_finops_mcp-1.31.0.tar.gz:

Publisher: auto-tag-on-plugin-bump.yml on OptimNow/cloud-finops-skills

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cloud_finops_mcp-1.31.0-py3-none-any.whl.

File metadata

File hashes

Hashes for cloud_finops_mcp-1.31.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d4a6008d081f7867528d0596a6a106b1407b0d9aa4724b80651728954b8f7308
MD5 6dff4cf9912108a4bab34b261857479b
BLAKE2b-256 15a7ca5e7af0e96b21faeeb01485d704542cb0317b6feff2be710659c01eeadc

See more details on using hashes here.

Provenance

The following attestation bundles were made for cloud_finops_mcp-1.31.0-py3-none-any.whl:

Publisher: auto-tag-on-plugin-bump.yml on OptimNow/cloud-finops-skills

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.33.0

2 files

1.32.1

2 files

1.32.0

2 files

This release

1.31.0 This release

2 files

1.30.0

2 files

1.29.0

2 files

1.28.1

2 files

1.28.0

2 files

1.27.0

2 files

1.26.1

2 files

1.25.0

2 files

1.24.0

2 files

1.23.1

2 files

1.23.0

2 files

1.22.3

2 files

1.22.2

2 files

1.22.1

2 files

1.21.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page