{
  "markdown": "# CloudPulse MCP Server\n\n> Cross-cloud infrastructure visibility for AI agents. Diagnose issues across **AWS**, **Vercel**, GCP, and Cloudflare without ever leaving your editor.\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![Node.js ≥18](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org)\n\n---\n\n## Why CloudPulse?\n\n| Pain point                                       | CloudPulse fix                                                 |\n| ------------------------------------------------ | -------------------------------------------------------------- |\n| Frontend error on Vercel → must open AWS console | `get_correlated_logs` merges both timelines automatically      |\n| AI can't see if an SG blocks port 5432           | `diagnose_service_link` inspects the security group rules live |\n| Hitting Lambda concurrency limits silently       | `check_resource_limits` warns at 80% usage                     |\n| Topology unknown before debugging                | `list_cloud_topology` maps every active service in seconds     |\n\n---\n\n## Quick Start\n\n### 1. Install / run with npx\n\n```bash\nnpx cloudpulse-mcp\n```\n\nThe server auto-detects credentials already present on your machine (AWS CLI, environment variables, etc.).\n\n### 2. Configure your AI client\n\n**Claude Desktop** – add to `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"cloudpulse\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"cloudpulse-mcp\"],\n      \"env\": {\n        \"VERCEL_TOKEN\": \"<your-vercel-token>\",\n        \"AWS_PROFILE\": \"default\",\n        \"AWS_REGION\": \"us-east-1\"\n      }\n    }\n  }\n}\n```\n\n**Cursor** – add to `.cursor/mcp.json` in your project:\n\n```json\n{\n  \"mcpServers\": {\n    \"cloudpulse\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"cloudpulse-mcp\"],\n      \"env\": {\n        \"VERCEL_TOKEN\": \"<your-vercel-token>\",\n        \"AWS_REGION\": \"us-east-1\"\n      }\n    }\n  }\n}\n```\n\n**VS Code + GitHub Copilot (Agent Mode)** – requires VS Code 1.99+ and the GitHub Copilot extension.\n\nFirst, build the project:\n\n```bash\nnpm run build\n```\n\nThen create `.vscode/mcp.json` in this repository:\n\n```json\n{\n  \"servers\": {\n    \"cloudpulse\": {\n      \"type\": \"stdio\",\n      \"command\": \"node\",\n      \"args\": [\"${workspaceFolder}/dist/index.js\"],\n      \"env\": {\n        \"VERCEL_TOKEN\": \"${env:VERCEL_TOKEN}\",\n        \"AWS_REGION\": \"${env:AWS_REGION}\",\n        \"AWS_PROFILE\": \"${env:AWS_PROFILE}\"\n      }\n    }\n  }\n}\n```\n\n`${env:VAR}` reads from your shell environment — no secrets in source control.\n\nTo use: open **Copilot Chat**, switch to **Agent mode**, click **Select Tools** and enable the CloudPulse tools, then ask naturally:\n\n```\nWhy can't my Vercel project reach AWS RDS instance \"my-db\"?\n```\n\n---\n\n## Credentials & Security\n\nCloudPulse follows a **read-only, no-storage** policy:\n\n| Credential  | How to provide                                                                        |\n| ----------- | ------------------------------------------------------------------------------------- |\n| AWS         | `AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY`, or `AWS_PROFILE`, or EC2 instance role |\n| Vercel      | `VERCEL_TOKEN` (personal access token from vercel.com/account/tokens)                 |\n| Vercel Team | `VERCEL_TEAM_ID` (optional)                                                           |\n| GCP         | `GOOGLE_APPLICATION_CREDENTIALS`                                                      |\n| Cloudflare  | `CLOUDFLARE_API_TOKEN` + `CLOUDFLARE_ACCOUNT_ID`                                      |\n\n> **No credentials are logged or stored.** All values are read from environment variables at call time.\n\n---\n\n## Available Tools\n\n### `list_cloud_topology`\n\nScan all configured platforms and return a unified service map.\n\n```\nInput (all optional):\n  platforms       – [\"aws\", \"vercel\"]  filter platforms\n  aws_region      – \"us-east-1\"\n```\n\n### `get_correlated_logs`\n\nFetch and merge logs from Vercel + AWS CloudWatch into one timeline.\n\n```\nInput:\n  start_time *    – ISO-8601 or epoch ms  e.g. \"2024-06-01T10:00:00Z\"\n  end_time        – defaults to now\n  trace_id        – filter by trace/request ID across all sources\n  aws_log_group_prefix  – default \"/aws/lambda\"\n  vercel_project  – project name or ID\n  aws_region\n```\n\n### `diagnose_service_link`\n\nCheck why service A can't reach resource B.\n\n```\nInput:\n  source_service *  – \"vercel\" | \"lambda\" | \"ec2\" | ...\n  target_resource * – \"<type>:<id>\"  e.g. \"aws-rds:my-db\", \"external-api:https://...\"\n  port              – auto-detected (5432 for RDS, 443 for APIs, ...)\n  vercel_project\n  aws_region\n```\n\nChecks performed:\n\n- Vercel env vars contain a `DATABASE_URL` / `DB_URL`\n- AWS Security Group allows inbound TCP on the required port\n- External API HEAD reachability test\n\n### `check_resource_limits`\n\nQuery quotas and flag resources nearing their limits.\n\n```\nInput (all optional):\n  platforms        – filter platforms\n  warn_threshold   – usage % to warn at (default 80)\n  aws_region\n```\n\n---\n\n## Roadmap\n\n| Phase                | Status  | Scope                                                                    |\n| -------------------- | ------- | ------------------------------------------------------------------------ |\n| **1 – MVP**          | ✅ Done | Vercel + AWS (Lambda, RDS, CloudWatch, Security Groups, S3)              |\n| **2 – Extend**       | ✅ Done | GCP Cloud Run + Cloud SQL + Logging; Cloudflare Workers + Pages; S3 CORS |\n| **3 – Intelligence** | 🔜      | Pre-built diagnostic playbooks for CORS, 504 timeout, cold-start loops   |\n\n---\n\n## Development\n\n```bash\ngit clone https://github.com/Galadriel-Tech-Solutions/cloudpulse-mcp\ncd cloudpulse-mcp\nnpm install\nnpm run dev        # run from source with tsx\nnpm run build      # compile to dist/\n```\n\n### Project structure\n\n```\nsrc/\n├── index.ts                     # MCP server + tool registration\n├── types.ts                     # shared domain types\n├── utils.ts                     # concurrency, formatting helpers\n├── providers/\n│   ├── aws/\n│   │   ├── index.ts             # client factory + isAWSConfigured()\n│   │   ├── cloudwatch.ts        # CloudWatch Logs\n│   │   ├── lambda.ts            # Lambda function listing\n│   │   ├── rds.ts               # RDS/Aurora instances & clusters\n│   │   ├── ec2.ts               # Security Group inspection\n│   │   ├── s3.ts                # S3 buckets + CORS checks\n│   │   └── quotas.ts            # Service Quotas API\n│   ├── gcp/\n│   │   ├── index.ts             # isGCPConfigured() + resolveGCPProject()\n│   │   ├── cloud-run.ts         # Cloud Run services\n│   │   ├── cloud-sql.ts         # Cloud SQL instances (sqladmin v1beta4)\n│   │   └── logging.ts           # Cloud Logging\n│   ├── cloudflare/\n│   │   └── index.ts             # Pages, Workers, Worker tail logs (WebSocket)\n│   └── vercel/\n│       └── index.ts             # Vercel REST API v9\n└── tools/\n    ├── list-cloud-topology.ts\n    ├── get-correlated-logs.ts\n    ├── diagnose-service-link.ts\n    └── check-resource-limits.ts\n```\n\n### Adding a new cloud platform\n\n1. Create `src/providers/<platform>/index.ts` exporting:\n   - `is<Platform>Configured(): boolean`\n   - Provider-specific data functions\n2. Wire the functions into the relevant tools under `src/tools/`\n3. Add the platform name to the `CloudPlatform` union in `src/types.ts`\n\n---\n\n## License\n\nMIT © CloudPulse Contributors\n",
  "bytes": 7429,
  "sha": "8285daedb3db3e71e329054f599e9623453d9f8f063c9f6b809b06ffb64b4d4a",
  "repo_slug": "galadriel-tech-solutions/cloudpulse-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_lhf552004_cloudpulse_306d3323/readme"
}