shelter-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@shelter-mcpWhat's my safe-to-spend runway and do I have any alerts?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Shelter MCP Server
Connect Claude, Codex, Cursor, and other MCP-compatible agents to scoped financial context from your own Shelter account.
The server is read-only. It can retrieve forecasts, runway, alerts, opportunities, and affordability guidance, but it cannot move money or access Plaid credentials.
Requirements
Node.js 20 or newer
A Shelter account with connected financial data
A scoped API key from shelter.money/developer
No Plaid developer account is required.
Related MCP server: Finance MCP Server
Quick start
Create an API key, then configure your MCP client to run:
npx -y @shelter.money/mcpwith SHELTER_API_KEY in the server environment.
Claude Desktop
{
"mcpServers": {
"shelter": {
"command": "npx",
"args": ["-y", "@shelter.money/mcp"],
"env": {
"SHELTER_API_KEY": "wv_your_key_here"
}
}
}
}Restart Claude Desktop after saving its configuration.
Codex
codex mcp add shelter --env SHELTER_API_KEY=wv_your_key_here -- npx -y @shelter.money/mcpCursor
Add this server to Cursor's MCP settings:
{
"shelter": {
"command": "npx",
"args": ["-y", "@shelter.money/mcp"],
"env": {
"SHELTER_API_KEY": "wv_your_key_here"
}
}
}Available tools
shelter_status— connection and authority statusshelter_runway— safe-to-spend runway and upcoming pressureshelter_forecast— manifest-bound cash-flow forecastshelter_alerts— current financial alertsshelter_opportunities— actionable savings opportunitiesshelter_context— scoped financial context for agent reasoningshelter_affordability— purchase affordability simulationshelter_coach_daily— daily coaching summaryshelter_coach_advice— coaching for a requested topicshelter_ask— ask Guardian a financial question
The package also provides financial checkup, spending review, and purchase-planning prompts.
Environment variables
Variable | Required | Description |
| Yes | Scoped key created in Shelter. Keep it secret. |
| No | API base URL. Defaults to |
| HTTP mode only | Local HTTP port. Defaults to |
If SHELTER_API_KEY is missing, the server still exposes its tool definitions but returns suppressed responses with no financial values. It never substitutes sample money data for a user's real financial state.
Security model
End-user identity comes only from the scoped Shelter API key.
Keys are stored by Shelter as SHA-256 hashes and shown only once when created.
Keys can be scoped and revoked from the Shelter developer page.
The hosted Agent API applies authentication, authorization, rate limits, and audit logging.
The MCP package does not contain Shelter backend code, deployment secrets, Plaid tokens, or bank credentials.
Financial responses fail closed when authoritative data is unavailable.
Treat the API key like a password. Do not commit it or place it directly in command history on shared machines. See SECURITY.md for vulnerability reporting.
Development
npm ci
npm run typecheck
npm run buildRun the stdio server from the built package:
SHELTER_API_KEY=wv_your_key_here node dist/bin/shelter-mcp.jsA stateless Streamable HTTP entrypoint is also built for controlled hosting:
SHELTER_API_KEY=wv_your_key_here npm startThe HTTP entrypoint binds to 0.0.0.0 and is not the recommended personal-client setup. Use stdio unless you operate and secure the HTTP environment yourself.
Architecture
This public repository contains only the MCP adapter. It calls Shelter's hosted, read-only Agent API. Shelter's private financial calculations, authentication gateway, database schema, and service credentials are not part of this package.
License
Available Tools
10 toolsshelter_affordabilityARead-onlyIdempotent
Check if you can afford a specific purchase — impact on safe-to-spend, recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | The major-unit amount of the purchase or expense | |
| currency | Yes | Uppercase ISO 4217 currency code, such as CAD or USD | |
| description | Yes | What the purchase or expense is for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds functional behavioral context by explaining that the tool computes the impact on safe-to-spend and provides a recommendation, giving the agent a clearer picture of what the tool produces.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no wasted words. The hyphenated addition clearly explains the output value without restating the tool name or duplicating schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple read-only check with three well-documented parameters, the description provides enough context: what is checked, what is affected, and the nature of the output. With no output schema, a bit more detail about the recommendation format could be useful, but it is not required for selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides clear, complete descriptions for all three parameters (amount, currency, description), so the description adds no extra parameter-level semantics. Baseline 3 is appropriate because the schema fully carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check') and a clear resource ('a specific purchase') while defining the output as impact on safe-to-spend and a recommendation. This clearly separates it from sibling tools like shelter_status and shelter_runway, which address broader or different financial questions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrasing clearly signals when to use the tool: when evaluating a specific purchase against a safe-to-spend position. It does not explicitly name alternatives or give when-not-to-use conditions, but the context is specific enough for an agent to select it over sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shelter_alertsARead-onlyIdempotent
Get active financial alerts — unusual spending, upcoming bills, low balance warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| severity | No | Filter alerts by severity level |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds context about 'active' alerts and the types of alerts, but doesn't disclose more behaviors beyond that. It doesn't contradict annotations, but adds limited value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that clearly states the purpose and scope. It front-loads the key verb ('Get') and resource ('active financial alerts'), and includes examples of alert types. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description is adequate. It explains what the tool returns (alerts) and the filtering option. It doesn't explain any return format, but since no output schema exists, some ambiguity remains, but it's minor for a simple read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single parameter 'severity' is fully documented with an enum. The description doesn't mention the parameter, but it's not necessary because the schema is explicit. The parameter is optional and has a clear enum, so no extra explanation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get active financial alerts' and specifies the types ('unusual spending, upcoming bills, low balance warnings'). It distinguishes from siblings like shelter_status and shelter_forecast by focusing on alerts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking financial alerts, but does not explicitly state when to use this tool versus alternatives. It lacks 'when not to use' guidance, but the sibling list provides context. No explicit alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shelter_askARead-onlyIdempotent
Ask Guardian AI any question about your finances — spending, bills, trends, or advice.
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes | A natural-language question about your finances |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, non-mutating, open-ended query. The description adds examples of the type of questions (spending, bills, trends, advice) but does not disclose any limitations, response format, or potential for non-financial queries. Since annotations cover the safety profile, the additional context is modest but not contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence that immediately conveys the purpose. It is front-loaded with the main verb and object, followed by clarifying examples. There is no redundancy or filler, making it highly efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only, open-world Q&A tool, the description provides sufficient context to understand its role. It does not mention the response format (e.g., whether the answer is text, JSON, or includes warnings), but given the simplicity and the annotations, this is not a critical gap. The tool's position among specialized siblings is clear, and the description is complete enough for an agent to select it appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'question' parameter, which already states 'A natural-language question about your finances.' The description adds value by providing concrete examples of query categories (spending, bills, trends, advice), enriching the meaning of what a valid question might contain. Though the baseline for full coverage is 3, the examples elevate understanding of the parameter's intended usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: 'Ask Guardian AI any question about your finances.' The verb is specific ('ask'), the resource is identified ('Guardian AI', your finances), and the examples (spending, bills, trends, advice) outline the scope. It also naturally distinguishes itself from sibling tools, which are more specialized (e.g., shelter_status, shelter_runway), by positioning this as a general-purpose assistant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for general finance questions, but it does not explicitly say when to use it over the specialized sibling tools (e.g., shelter_status for status, shelter_forecast for forecasts). The phrase 'any question' suggests a fallback, but no alternative tools are mentioned or excluded. Usage context is thus implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shelter_coach_adviceARead-onlyIdempotent
Get targeted financial advice on a specific topic — debt, savings, bills, subscriptions, or negotiation.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | The financial topic to get advice on |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds minimal behavioral context beyond that, such as what output to expect, and mostly restates purpose rather than disclosing additional behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise, front-loaded sentence that states the action and scope immediately. Every word contributes, and there is no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity tool with one parameter and rich safety annotations, so the description is largely sufficient for an agent to invoke it correctly. The only minor gap is that with no output schema, the description could clarify the form of the returned advice, though 'financial advice' reasonably implies a text response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the single topic parameter with an enum and description, so baseline is 3. The description lists most enum values but omits 'general', adding little semantic value beyond what the schema already provides and potentially understating the allowed topic set.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Get targeted financial advice') and a resource ('financial advice') with a clear topic scope. It does not explicitly differentiate from siblings like shelter_ask or shelter_coach_daily, but the 'targeted' and 'specific topic' framing gives a solid sense of purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys clear usage context: use this tool when you need advice focused on one listed financial topic. It does not name alternatives or state when not to use it, but the explicit topic list effectively scopes its appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shelter_coach_dailyBRead-onlyIdempotent
Get today's personalized financial coaching tip based on your recent spending.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Focus area for today's tip |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, lowering the bar for additional disclosure. The description adds that the tip is personalized and based on recent spending, which is a useful data-dependency signal, but it does not explain behavior when spending data is unavailable or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one clear, front-loaded sentence with no filler, redundancy, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with strong annotations and one well-documented optional parameter, the description covers the core behavior adequately. It omits mention of the optional category parameter's effect and the exact return format, but the schema covers the parameter and 'tip' reasonably implies the output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully covers the single optional parameter with a clear enum and description, so the description does not need to repeat it. The description adds no category-specific semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Get today's personalized financial coaching tip') and clarifies it is based on recent spending. However, it does not explicitly distinguish this from sibling tool shelter_coach_advice, which may overlap in purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives. There is no mention of exclusions, conditions, or how it differs from shelter_coach_advice or other coach-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shelter_contextARead-onlyIdempotent
Get a natural-language summary of the user's financial situation for use as conversation context.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | Level of detail — "summary" for a brief overview, "full" for comprehensive context |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, indicating a safe, non-mutating read. The description adds that it returns a natural-language summary, which is useful but does not add deeper behavioral context beyond what annotations provide. It doesn't mention any auth or rate limits, but with such strong annotations, the baseline for transparency is met.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that directly states the tool's purpose. It is front-loaded and contains no extraneous information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 optional parameter, 100% schema coverage) and strong annotations (read-only, idempotent), the description is adequately complete for an agent to invoke it. However, it does not elaborate on what the summary includes or how it relates to sibling tools, but the output is presumably just a summary string, so additional detail might be unnecessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the only parameter 'detail' fully described in the schema ('Level of detail — "summary" for a brief overview, "full" for comprehensive context'). The description does not add additional parameter semantics beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to get a natural-language summary of the user's financial situation for conversation context. It uses a specific verb (get) and resource (financial situation summary), and the title 'Financial Context' reinforces this. It does not explicitly distinguish from siblings, but the purpose is distinct enough given the sibling names (e.g., shelter_status, shelter_runway) that it stands alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage as conversation context, but does not explicitly state when to use it over siblings. It mentions 'for use as conversation context,' which suggests it is for generating context before responding to user queries, but no exclusions or alternatives are given. The sibling tools like shelter_status are likely more specific, but the description does not guide the agent to prefer this tool for general context vs. specific status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shelter_forecastARead-onlyIdempotent
Verified 14-day view of Shelter's canonical 30-day balance forecast.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Verified 14-day view of the canonical 30-day run |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering safety. The description adds behavioral context that this is a 'verified' and 'canonical' view, implying data quality and authoritative sourcing, which goes beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the core purpose without redundancy. Every word contributes meaningful information, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only forecast tool with one parameter, the description provides sufficient context: it indicates the view's verification and canonical status. However, it does not describe the return format or specific data fields, which might be expected without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; the single parameter 'days' has a const 14 and its own description. The tool description merely repeats the '14-day' aspect without adding further semantics or contextual detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides a verified 14-day view of a canonical 30-day balance forecast. It identifies the specific resource (balance forecast) and scope (14 days), but does not explicitly differentiate from sibling tools like shelter_runway or shelter_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided on when to use this tool versus sibling tools. The description implies it is a verified canonical view, but lacks direct alternatives or exclusions, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shelter_opportunitiesARead-onlyIdempotent
Find savings opportunities — unused subscriptions, negotiable bills, spending patterns to optimize.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter opportunities by category |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds examples of opportunity types (subscriptions, bills) which give some content insight, but no further behavioral traits like pagination or filtering behavior are described. The addition is minimal, so a moderate score is warranted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence (12 words), front-loaded with the core action, and every word contributes value. There is no redundant phrasing or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 optional param, no output schema, read-only annotations), the description covers the essential purpose and scope. However, with multiple sibling tools, a brief note on when to use this versus others would increase completeness, but it is not critical for this straightforward read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single optional 'category' parameter with an enum and a clear description ('Filter opportunities by category'). The tool description does not add any extra meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Find savings opportunities' and lists concrete examples (unused subscriptions, negotiable bills, spending patterns), specifying the resource and scope. It is distinct from sibling tools like shelter_status or shelter_forecast, which do not overlap in intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The priority of finding savings opportunities is clear from the wording, but no explicit exclusions or alternatives are mentioned. Given the many siblings, some guidance on when to choose this tool over others would strengthen it, yet the context is clear enough for this simple use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shelter_runwayARead-onlyIdempotent
How many days until you run out of money — daily budget, next payday, safe-to-spend.
| Name | Required | Description | Default |
|---|---|---|---|
| includeBreakdown | No | Include a day-by-day breakdown of projected spending |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the description doesn't need to restate these. It adds the context of daily budget and payday, which is useful, but it doesn't disclose any additional behavioral traits such as how the breakdown works or if there are any assumptions about spending. The description is consistent with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, using an em-dash to provide a compact summary in one line. It gets to the point without fluff. It could be slightly more structured, but for a simple tool it's efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional parameter, the description provides enough context. The annotations cover safety, and the parameter is clear. The output is not detailed, but given the simplicity, it's adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, includeBreakdown, is well-documented in the schema with a clear description. The tool description does not need to add more since schema coverage is 100%. However, the description could mention how the breakdown affects the output, but that's optional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: calculating how many days until money runs out, with a summary of budget, payday, and safe-to-spend. It distinguishes from siblings like shelter_status and shelter_forecast by focusing on the cash runway metric. However, it could be more specific about the output being a number of days or a time period.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for financial planning (daily budget, next payday, safe-to-spend) but does not explicitly state when to use this vs. alternatives like shelter_forecast or shelter_affordability. No direct comparison or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shelter_statusARead-onlyIdempotent
Get a snapshot of your financial status — safe-to-spend, balances, upcoming bills, health score.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | Force a fresh calculation instead of using cached data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful context by framing the call as a snapshot and listing the exact categories returned, which helps the agent set expectations about the response. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one clear, front-loaded sentence. The em-dash list efficiently conveys scope without filler, and every phrase adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only status tool with one optional parameter, no output schema, and strong annotations, this description is sufficiently complete. It conveys what the snapshot contains, though it does not describe output format or the caching/refresh behavior in prose; the schema covers refresh adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single optional refresh boolean, so the schema already fully documents the parameter. The description's 'snapshot' wording indirectly relates to caching, but it adds no parameter-specific detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('financial status'), then enumerates concrete components: safe-to-spend, balances, upcoming bills, health score. The word 'snapshot' clearly distinguishes this current-state tool from outcome-focused siblings like shelter_forecast and shelter_runway.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent can infer this is for pulling a current financial status snapshot. However, the description gives no explicit when-to-use guidance or alternatives, despite many adjacent sibling tools such as shelter_forecast, shelter_alerts, and shelter_affordability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v1.0.7- First observed
shelter_affordability - First observed
shelter_alerts - First observed
shelter_ask - First observed
shelter_coach_advice - First observed
shelter_coach_daily - First observed
shelter_context - First observed
shelter_forecast - First observed
shelter_opportunities - First observed
shelter_runway - First observed
shelter_status
TDQS
Scored across 10 tools
Most tools have distinct purposes: status provides a snapshot, runway focuses on days of money, forecast is a specific projection, alerts, opportunities, context, affordability, coach daily, coach advice, and ask all serve different functions. However, shelter_status and shelter_runway both include safe-to-spend and upcoming bills, and shelter_coach_advice and shelter_ask could be confused for similar advice-seeking, creating minor overlap.
All tools follow a consistent pattern: shelter_ + lowercase snake_case noun or noun phrase (e.g., shelter_status, shelter_coach_daily). The prefix is uniformament and the style is identical across the set, making it predictable for an agent.
With 10 tools, the count is well within the optimal range for a personal finance assistant. Each tool covers a distinct aspect of financial status, insights, or advice, and none feel redundant or unnecessary for the stated purpose.
The tool set covers a wide range of read-only financial information: status, forecast, runway, alerts, opportunities, affordability, and coaching. However, it lacks any action-oriented tools (e.g., updating a budget, setting alerts, or initiating transactions), which might be a gap if the server intended to support more than advisory functions. Still, for a likely read-only assistant, the surface is fairly complete.
Maintenance
Related MCP Connectors
Personal finance for AI agents — onboard, import statements, categorize & budget over MCP.
- financeOAuthcom.zoninga
Personal finance for AI agents: accounts, budgets, goals, 9-strategy debt payoff, reports. OAuth 2.1
Read-only access to Genie accounts, transactions, investments, and financial summaries.
Connects AI agents to live, verified financial data from 18,000+ institutions — ready to reason from
Related MCP Servers
- FlicenseCqualityBmaintenanceEnables AI agents to access and analyze financial data from Toshl Finance, including accounts, categories, budgets, and entries, through MCP resources and tools.274-
- FlicenseNot gradedqualityCmaintenanceExposes personal-finance tools like accounts, transactions, spending analysis, budgets, bills, reminders, portfolio, and goals via MCP, enabling any MCP client to query financial data.-
- AlicenseNot gradedqualityCmaintenanceLets you query your personal finances in plain language, log expenses, and correct transaction categories through a secure MCP endpoint.MIT
- AlicenseNot gradedqualityCmaintenanceProvides read-only access to self-hosted cash-flow forecasts, balances, transactions, and credit-card data, letting AI clients answer spending and upcoming-obligation questions without modifying financial settings.MIT