For agents
TomorrowCentral for agents
One MCP server, one API key. Today it exposes Cloud Cost Sentinel: read-only AWS cost analysis that finds idle and underutilized resources and shows the evidence behind every call.
- MCP endpoint
https://api.tomorrowcentral.com/mcp- Transport
- Streamable HTTP (stateless). SSE is not used.
- Authentication
- API key header
X-Api-Key: tc_sk_..., orAuthorization: Bearer tc_sk_... - MCP server name
tomorrowcentral- MCP Registry
com.tomorrowcentral/aws-cloud-cost-sentinel- REST API
https://api.tomorrowcentral.com/v1- Machine-readable
- /llms.txt, /.well-known/mcp.json
Cloud Cost Sentinel
What it does
It reads an AWS account through a cross-account role you create, inspects resource metadata and CloudWatch metrics, and reports resources that look idle, unattached, or underused. Each finding carries the evidence it was based on: what was measured and over what window (30 days by default), an advisory verdict (removable, investigate, keep), a heuristic confidence from 0 to 1, est_monthly_savings in USD, and monitoring_gaps naming what could not be observed.
Verdicts are advice for a person to act on. A verdict of removable means the evidence suggests nothing is using the resource, not that deleting it is safe, and a finding marked protected (covered by a retention tag or policy) is not actionable at all.
What it does not do
- It cannot create, modify, stop, terminate or delete any AWS resource. There is no such tool on this server, and the role you grant carries no write permission.
- It does not read secret values, object contents, or application data.
- It does not cover every AWS service. Anything outside the list below is not inspected, so a clean scan is not a claim that your whole bill is optimized.
- It is AWS only today. Azure and GCP are not supported. The tools are named for the capability rather than the cloud, so when another provider is added it appears on the same tools with a connection of that type, and
create_cloud_connectionrefuses any provider it cannot actually scan rather than linking it as AWS.
Supported analysis
| Group | Resource kinds | Evidence used |
|---|---|---|
| Compute | EC2 instances, RDS instances | CPU and network averages over the observation window, stopped-instance age, database connections |
| Storage | EBS volumes, EBS snapshots | Attachment state, age, whether a snapshot still backs an image |
| Network | Elastic IPs, NAT Gateways, load balancers | Association state, bytes processed per day, requests per day, target health |
| VPC | VPCs, interface endpoints, site-to-site VPN, Transit Gateway attachments, Client VPN endpoints | Traffic per day, attached interfaces, whether anything routes through it |
| Other | Secrets Manager secrets, CloudFront distributions, WAF web ACLs | Last access date, requests per day, whether any resource is associated |
Available MCP tools
Ten tools, one workflow. The read-only column refers to TomorrowCentral state: every tool here is read-only against AWS, including the three that write on our side.
| Tool | Purpose | Inputs | Returns | Writes |
|---|---|---|---|---|
| run_cost_scan | Start a cloud cost scan of a linked account. The provider comes from the connection; AWS is the only one supported today. | connection_id (optional; omit for sample data), idempotency_key (optional) | job_id, status, mode, next step | Creates a scan job, consumes quota. Reads AWS, changes nothing there. |
| list_cost_findings | Read the findings of a completed scan, optionally filtered by verdict. | job_id, verdict (optional: removable | investigate | keep) | Per finding: kind, name, region, verdict, verdict_label, confidence, est_monthly_savings, recommended_action, evidence, monitoring_gaps, protected. Plus summary, totals and account. | No |
| get_job | Check a job's status while a scan runs. | job_id | status (QUEUED, RUNNING, COMPLETED, FAILED), poll_after_seconds | No |
| get_job_result | Get the full raw result document of a completed job. | job_id | The complete analyzer output, inside an untrusted-data envelope | No |
| list_connections | List the AWS accounts this API key is allowed to scan. | none | connection_id, account_id, region, label, status | No |
| get_connection | Inspect one linked account, including why verification last failed. | connection_id | status, region, role_arn, last_error | No |
| create_cloud_connection | Begin linking a new cloud account (AWS today). Cannot be completed by an agent alone: creating the role needs the account owner. | account_id (12 digits), label (optional), region (optional), provider (optional, aws) | connection_id and a pre-filled CloudFormation launch_url for the human | Creates a connection record here. Creates nothing in your cloud. |
| verify_connection | Check whether the read-only role exists yet, and mark the connection VERIFIED if it does. | connection_id | status, role_arn, last_error | Promotes the connection to VERIFIED. Repeat-safe. |
| list_tools_available | List the TomorrowCentral tools this platform currently offers. | none | tool id, name, what it does | No |
| whoami | Confirm which account an API key belongs to, and its plan. | none | tenant, plan tier | No |
Connect from Claude Code
claude mcp add --transport http tomorrowcentral \ https://api.tomorrowcentral.com/mcp \ --header "X-Api-Key: tc_sk_your_key_here"
Create the key first at /dashboard/api-keys. It is shown once. A key can be scoped to specific tools and specific linked accounts, given an expiry, and revoked at any time.
Generic MCP configuration
Any client that speaks Streamable HTTP and can send a header:
{
"mcpServers": {
"tomorrowcentral": {
"type": "http",
"url": "https://api.tomorrowcentral.com/mcp",
"headers": {
"X-Api-Key": "tc_sk_your_key_here"
}
}
}
}A local stdio alternative exists for development (python -m mcp_server with TC_API_KEY and TC_API_BASE_URL set), but the hosted endpoint above is the supported path.
AWS access model
You run a CloudFormation template we generate. It creates one role, tomorrow-central-cost-readonly, that our platform account can assume, gated by an ExternalId unique to your connection. No access key is created, and nothing is copied by hand. Revoking access means deleting that stack.
| Permission | Why |
|---|---|
| sts:GetCallerIdentity | Confirm which account the role landed in |
| ce:GetCostAndUsage, ce:GetDimensionValues, ce:GetCostForecast | Real spend per service, so estimates can be reconciled against the bill |
| cloudwatch:GetMetricStatistics, GetMetricData, ListMetrics, DescribeAlarms | The utilization evidence behind every verdict |
| ec2:Describe* (regions, instances, volumes, snapshots, images, addresses, NAT gateways, VPCs, endpoints, VPN, Transit Gateway, Client VPN, network interfaces) | Resource inventory |
| rds:DescribeDBInstances | Database inventory |
| elasticloadbalancing:Describe* (load balancers, target groups, target health, tags) | Load balancer inventory and whether anything is behind it |
| secretsmanager:ListSecrets | Secret metadata only. Never GetSecretValue, so secret contents are unreadable |
| cloudfront:ListDistributions | Distribution inventory |
| wafv2:ListWebACLs, GetWebACL, ListResourcesForWebACL | Web ACL inventory and associations |
Every action is a List, Describe or Get. There is no Create, Modify, Delete or Terminate anywhere in the policy, which is what makes the read-only guarantee checkable rather than a promise.
Example prompts
- Analyze my AWS account for infrastructure that appears unused or underutilized. Rank findings by confidence and estimated monthly cost. Do not make any changes.
- Review my AWS infrastructure for probable cost waste. For every recommendation, show the usage evidence and the observation period behind it.
- Which resources have high-confidence evidence of inactivity, and which ones merely have low utilization? Keep those two lists separate.
- Run a cost scan, then summarize only the findings the scanner could not fully observe, and say what monitoring is missing.
Pacing, quotas and retries
Scans are asynchronous. Start one, then poll get_job roughly every 10 seconds; the response carries poll_after_seconds as the minimum wait. A scan usually finishes in 1 to 3 minutes.
- Free plan
- 10 scans per month, per account.
- Per API key
- 5 scan jobs per day. 20 reads and 5 writes per minute.
- Duplicate scans
- Starting a scan for a connection that already has one in flight returns the running job with coalesced: true, and consumes nothing.
- Repeat scans
- A key re-scanning the same account inside 6 hours gets the existing result rather than a new run.
- Retries
- Errors carry a stable
error_code. Rate limits carryRetry-Afterandretry_after_seconds. Send anIdempotency-Keyon writes if you may retry: replaying returns the original job rather than starting a second one.
Security and data
- Read-only against your cloud. Enforced twice: no tool on this server mutates anything, and the role you grant has no write permission.
- No stored cloud credentials. We assume your role for short-lived access per scan. Nothing long-lived is kept.
- Tenant isolation. An API key sees only its own tenant's connections, jobs and results, and can be narrowed further to named tools and named accounts.
- Scan output is treated as untrusted. Resource names and tags are written by whoever owns the account, so results come back inside a labelled envelope telling the model to treat them as data, never as instructions.
- MCP calls are recorded. Calls to the hosted endpoint are logged for product analytics, including the JSON-RPC request body (tool name and arguments, capped at 16 KB), the outcome and the latency, kept for 90 days. Scan results and API keys are never written to that log. Use the local stdio server if you would rather not send request bodies to us.
- Revoking. Revoke a key at /dashboard/api-keys (immediate), and remove our AWS access by deleting the CloudFormation stack in your account.
Details in the privacy policy and terms.
Reporting a vulnerability: use itmtb.com/contact-us and mark it as a security report. Include what you did, what you observed, and what is needed to reproduce it. Please do not test against other tenants' data or run denial-of-service traffic at the API.
Pricing
Cloud Cost Sentinel is free to use today, capped at the limits above. Agent traffic is metered the same way human traffic is, against the same account. There is no paid tier for machine access yet; when there is, it will be published here before it applies.
Support
Questions, a broken scan, or a resource type you want covered: contact us or reach itmtb Technologies at itmtb.com/contact-us.