Skip to content

Complete CloudPi FinOps MCP server - #2

Draft
PDI-Puru wants to merge 2 commits into
masterfrom
puru/cloudpi-mcp-server-db2c
Draft

Complete CloudPi FinOps MCP server#2
PDI-Puru wants to merge 2 commits into
masterfrom
puru/cloudpi-mcp-server-db2c

Conversation

@PDI-Puru

@PDI-Puru PDI-Puru commented Aug 16, 2026

Copy link
Copy Markdown
Owner

Summary

Turns the initial CloudPi MCP skeleton into a usable FinOps MCP server for Cursor and other MCP clients.

  • Typed CloudPi HTTP client with Bearer auth, configurable /api prefix, and normalized API errors
  • 45 tools covering workspaces/projects, billing views, cost queries, forecasts, anomalies, budgets, True Savings, recommendations, policies/workflows, tag governance, VM scheduler, tasks/tickets, and audit logs
  • MCP resources (cloudpi://status, cloudpi://guide, cloudpi://workspaces) and prompts for spend, budget, optimization, tags, and governance reviews
  • stdio transport (default) plus optional Streamable HTTP
  • README, .env.example, Cursor MCP config example, and Vitest coverage for config, client, responses, and an in-memory MCP protocol round-trip

How to use

npm install
cp .env.example .env
# set CLOUDPI_BASE_URL and CLOUDPI_JWT_TOKEN
npm run build

Point Cursor MCP settings at node dist/index.js with those env vars. Write tools require CloudPi WRITE RBAC.

Testing

Verified locally:

  • npm run typecheck — pass
  • npm test — 18 tests pass (config, client, responses, MCP protocol)
  • npm run build — pass
  • Dist smoke test against the compiled server: 45 tools, 5 prompts, 3 resources, and a mocked list_workspaces call

See mcp_server_verification.log in the walkthrough artifacts.

Open in Web Open in Cursor 

cursoragent and others added 2 commits August 16, 2026 03:48
Expand the skeleton into a production MCP server with a typed API client,
40+ tools across cost, budgets, recommendations, tags, governance, and
operations, plus resources, prompts, stdio/HTTP transports, and tests.

Co-authored-by: Puru Vangala <PDI-Puru@users.noreply.github.com>
Add an index signature to ToolResult so registerTool callbacks match
the SDK CallToolResult type.

Co-authored-by: Puru Vangala <PDI-Puru@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants