CashChat MCP Server
Click on "Install 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., "@CashChat MCP ServerShow me my spending summary for this week"
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.
CashChat MCP Server
Connect your financial data to AI assistants like Claude
CashChat MCP Server exposes your CashChat financial data to AI assistants via the Model Context Protocol (MCP). It supports both local stdio connections and remote URL-based connections with OAuth 2.0 authentication.
Features
š OAuth 2.0 Authentication - Secure URL-based connections for Claude Desktop
š° Transaction Management - Query, add, update, and delete transactions
š Financial Analytics - Get spending summaries and category breakdowns
āļø Settings Control - Manage currency preferences and AI agent instructions
š Multiple Deployment Options - Run locally, Node.js server, or Cloudflare Workers
š MCP Standard Compliant - Works with any MCP-compatible AI assistant
Related MCP server: MCP Agent - AI Expense Tracker
Quick Start
For Claude Desktop Users (URL-based connection)
This is the recommended way to connect CashChat to Claude Desktop using a publicly accessible server.
1. Get Your CashChat API Key
Sign up at CashChat and get your API key from the settings page.
2. Connect to the Public Server
Add this configuration to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"cashchat": {
"url": "https://cashchat.supastellar.dev/sse",
"oauth": {
"authUrl": "https://cashchat.supastellar.dev/oauth/authorize",
"tokenUrl": "https://cashchat.supastellar.dev/oauth/token",
"clientId": "cashchat-mcp-server",
"scopes": ["read", "write"]
}
}
}
}3. Restart Claude Desktop
Restart Claude Desktop and you'll be prompted to authorize the connection. Click "Authorize" and you're ready to go!
4. Try It Out
In Claude Desktop, try asking:
"What did I spend on groceries this month?"
"Add a transaction: $50 for dinner at Joe's Restaurant"
"Show me my spending summary for this week"
Local Development & Self-Hosting
Prerequisites
Node.js 18 or higher
npm or yarn
CashChat API key
Installation
Clone the repository:
git clone https://github.com/supastellar/cashchat-mcp
cd cashchat-mcpInstall dependencies:
npm installConfigure environment variables:
cp .env.example .envEdit .env and add your CashChat API key:
CASHCHAT_API_KEY=your_api_key_here
PORT=3000
SERVER_URL=http://localhost:3000Build the project:
npm run buildStart the server:
npm run start:serverThe server will be running at http://localhost:3000.
Testing Locally
Connect Claude Desktop to your local server by updating the config:
{
"mcpServers": {
"cashchat": {
"url": "http://localhost:3000/sse",
"oauth": {
"authUrl": "http://localhost:3000/oauth/authorize",
"tokenUrl": "http://localhost:3000/oauth/token",
"clientId": "cashchat-mcp-server",
"scopes": ["read", "write"]
}
}
}
}Note: Claude Desktop may require HTTPS for OAuth. For local testing with HTTPS, use a tool like ngrok or localtunnel.
Legacy stdio Mode (for local-only setup)
If you prefer the classic stdio-based local connection without OAuth:
Claude Desktop Config (stdio mode)
{
"mcpServers": {
"cashchat": {
"command": "node",
"args": ["/absolute/path/to/cashchat-mcp/build/index.js"],
"env": {
"CASHCHAT_API_KEY": "your_api_key_here"
}
}
}
}This mode runs the server as a subprocess and communicates via stdin/stdout. No HTTP server or OAuth required.
Available Tools
The MCP server provides 8 tools for interacting with your financial data:
Transaction Tools
get_transactions
Retrieve transactions with optional filters.
Parameters:
startDate(optional): Start date (YYYY-MM-DD)endDate(optional): End date (YYYY-MM-DD)category(optional): Filter by categorylimit(optional): Max results (default: 50)offset(optional): Pagination offset
Example:
Get my transactions from January 2024add_transaction
Add a new transaction.
Parameters:
amount(required): Transaction amountcategory(required): Category (e.g., Food, Transport)date(required): Date (YYYY-MM-DD)type(optional): 'expense' or 'income' (default: expense)note(optional): Descriptionname(optional): Merchant name
Example:
Add a transaction: $75 for groceries at Whole Foods on 2024-01-15update_transaction
Update an existing transaction.
Parameters:
id(required): Transaction IDamount(optional): New amountcategory(optional): New categorynote(optional): New notename(optional): New merchant name
delete_transaction
Delete a transaction.
Parameters:
id(required): Transaction ID to delete
Analytics Tools
get_summary
Get spending summary for a time period.
Parameters:
period(required): 'day', 'week', 'month', or 'year'date(optional): Reference date (defaults to today)
Example:
Show me my spending summary for this monthget_categories
List all available transaction categories.
Example:
What categories can I use?Settings Tools
get_settings
Get your CashChat settings.
update_settings
Update your CashChat settings.
Parameters:
preferredCurrency(optional): Currency code (USD, CAD, EUR, etc.)agentInstructions(optional): Custom instructions for AI assistant
Deployment
For production deployment instructions, see DEPLOYMENT.md.
Quick Deployment Options
Railway (Recommended)
Click the button above
Add your
CASHCHAT_API_KEYDeploy!
Cloudflare Workers
npm install -g wrangler
wrangler login
wrangler secret put CASHCHAT_API_KEY
wrangler deploySee DEPLOYMENT.md for detailed instructions.
Architecture
URL-Based Mode (HTTP + SSE + OAuth)
āāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāā
ā Claude Desktop ā ā CashChat MCP ā
ā ā ā Server (HTTP) ā
āāāāāāāāāāāāāāāāāā⤠āāāāāāāāāāāāāāāāāāāā¤
ā ā ā ā
ā 1. OAuth Flow ā āāāāāāāāāŗā /oauth/* ā
ā ā ā ā
ā 2. SSE Connect ā āāāāāāāāāŗā /sse ā
ā ā ā ā
ā 3. MCP Tools ā āāāāāāāāāŗā MCP Server ā
ā ā ā ā
āāāāāāāāāāāāāāāāāāā āāāāāāāāāā¬āāāāāāāāāā
ā
ā¼
āāāāāāāāāāāāāāāāāāāā
ā CashChat API ā
ā (Backend) ā
āāāāāāāāāāāāāāāāāāāāLegacy stdio Mode
āāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāā
ā Claude Desktop ā ā CashChat MCP ā
ā ā ā Server (stdio) ā
āāāāāāāāāāāāāāāāāā⤠āāāāāāāāāāāāāāāāāāāā¤
ā ā ā ā
ā stdio pipe ā āāāāāāāāāŗā MCP Server ā
ā ā ā ā
āāāāāāāāāāāāāāāāāāā āāāāāāāāāā¬āāāāāāāāāā
ā
ā¼
āāāāāāāāāāāāāāāāāāāā
ā CashChat API ā
ā (Backend) ā
āāāāāāāāāāāāāāāāāāāāSecurity
OAuth 2.0 with PKCE support for secure authorization
Bearer token authentication for API requests
HTTPS required in production
Token expiration (30 days default)
Scope-based permissions (read/write)
Production Security Recommendations
Use HTTPS only (no HTTP in production)
Set
OAUTH_CLIENT_SECRETfor additional securityImplement rate limiting
Use a proper database for token storage (not in-memory)
Rotate API keys regularly
Monitor access logs
Troubleshooting
"Connection refused" error
Check if the server is running
Verify the URL in your Claude Desktop config
Ensure firewall allows the port
OAuth authorization fails
Confirm
SERVER_URLis publicly accessibleCheck that URLs in Claude config match your server
Verify HTTPS is enabled (required by Claude Desktop)
"Invalid API key" error
Check your
CASHCHAT_API_KEYis correctVerify the API key is active in your CashChat account
Tools not showing up in Claude
Restart Claude Desktop after config changes
Check server logs for errors
Verify OAuth flow completed successfully
For more help, see DEPLOYMENT.md or open an issue.
Development
Project Structure
cashchat-mcp/
āāā src/
ā āāā index.ts # Legacy stdio server
ā āāā server.ts # HTTP/SSE server with OAuth
ā āāā worker.ts # Cloudflare Workers version
ā āāā types.ts # TypeScript types
ā āāā api/
ā ā āāā client.ts # CashChat API client
ā āāā auth/
ā ā āāā tokenStore.ts # OAuth token storage
ā ā āāā middleware.ts # Auth middleware
ā ā āāā oauthRoutes.ts # OAuth endpoints
ā āāā tools/
ā āāā transactions.ts # Transaction tools
ā āāā summary.ts # Analytics tools
āāā build/ # Compiled JavaScript
āāā package.json
āāā tsconfig.json
āāā wrangler.toml # Cloudflare Workers config
āāā README.mdScripts
npm run build- Compile TypeScriptnpm run dev- Watch mode for developmentnpm start- Run stdio server (legacy)npm run start:server- Run HTTP/SSE servernpm run dev:server- Development mode with auto-reload
Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch
Make your changes
Add tests if applicable
Submit a pull request
License
MIT License - see LICENSE for details.
Links
CashChat: https://cashchat.supastellar.dev
MCP Documentation: https://modelcontextprotocol.io
Claude Desktop: https://claude.ai/download
Support
Need help?
š Check the DEPLOYMENT.md guide
š Report bugs on GitHub Issues
š¬ Questions? Open a Discussion
Built with ā¤ļø by Supa Stellar
Available Tools
8 toolsadd_transactionC
Add a new transaction to CashChat
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Transaction amount (positive number) | |
| category | Yes | Category (e.g., Food, Transport, Shopping) | |
| date | Yes | Date (YYYY-MM-DD) | |
| note | No | Optional note/description | |
| type | No | Transaction type | expense |
| name | No | Merchant/transaction name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure but only states the basic action. It doesn't mention whether this is a write operation (implied but not explicit), what permissions might be required, whether transactions are reversible, how errors are handled, or what happens on success. For a mutation tool with zero annotation coverage, this is insufficient.
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, efficient sentence that gets straight to the point with zero wasted words. It's appropriately sized for a tool with good schema documentation and no complex behavioral nuances to explain.
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 mutation tool with no annotations and no output schema, the description is inadequate. It doesn't explain what happens after adding a transaction (e.g., returns success confirmation, transaction ID, or error details), doesn't mention constraints beyond what's in the schema, and provides no behavioral context. Given the complexity of a write operation, more completeness is needed.
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 description coverage is 100%, so all parameters are documented in the schema itself. The description adds no additional parameter information beyond what's already in the schema descriptions. This meets the baseline expectation when schema coverage is complete.
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 action ('Add') and resource ('new transaction to CashChat'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'update_transaction', which would require mentioning that this creates new records rather than modifying existing ones.
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 provides no guidance on when to use this tool versus alternatives like 'update_transaction' or 'delete_transaction'. It doesn't mention prerequisites, constraints, or appropriate contexts for creating transactions versus other operations available in the sibling tool set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_transactionC
Delete a transaction from CashChat
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Transaction ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Delete' implies a destructive mutation, the description doesn't specify whether this operation is reversible, what permissions are required, what happens to associated data, or what the response looks like. For a destructive tool with zero annotation coverage, this is a significant gap.
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 extremely concise with a single, clear sentence that states exactly what the tool does. There's zero wasted verbiage, and the information is front-loaded with the core action and target.
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 destructive mutation tool with no annotations and no output schema, the description is inadequate. It doesn't address critical context like whether deletion is permanent, what permissions are needed, what happens upon success/failure, or how this differs from other transaction operations. The description should do more given the tool's complexity and potential consequences.
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%, with the single parameter 'id' clearly documented as 'Transaction ID to delete'. The description doesn't add any additional parameter context beyond what the schema provides, so the baseline score of 3 is appropriate when the schema does the heavy lifting.
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 action ('Delete') and target resource ('a transaction from CashChat'), providing specific verb+resource pairing. However, it doesn't distinguish this tool from potential alternatives like 'update_transaction' or explain what makes deletion different from other transaction modifications.
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 provided about when to use this tool versus alternatives. With sibling tools like 'update_transaction' available, the description doesn't indicate whether deletion is irreversible, when it's appropriate versus updating, or any prerequisites for using this destructive operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categoriesB
Get list of transaction categories
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the action ('Get list'), lacking behavioral details such as whether it requires authentication, returns paginated results, has rate limits, or what format the list is in. It doesn't contradict annotations, but offers minimal transparency beyond the basic operation.
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, efficient sentence that front-loads the core action ('Get list of transaction categories') with zero wasted words. It's appropriately sized for a simple retrieval tool with no parameters.
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 zero-parameter tool with no annotations and no output schema, the description is minimally completeāit states what the tool does. However, it lacks context on usage, behavioral traits, or output format, which could help an agent use it correctly, especially given siblings that might overlap in purpose.
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 has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't mention parameters, focusing on the tool's purpose. Baseline is 4 for zero parameters, as it avoids unnecessary detail.
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 verb ('Get') and resource ('list of transaction categories'), making the purpose immediately understandable. It distinguishes from siblings like 'get_transactions' by specifying categories rather than transactions, though it doesn't explicitly contrast with 'get_settings' or 'get_summary' which might also retrieve lists.
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 provided on when to use this tool versus alternatives like 'get_transactions' or 'get_settings'. The description implies it's for retrieving categories, but doesn't specify use cases, prerequisites, or exclusions, leaving the agent to infer context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_settingsC
Get CashChat user settings
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Get CashChat user settings' implies a read operation, but it doesn't specify whether this requires authentication, what format the settings are returned in, whether there are rate limits, or if it returns all settings or a subset. For a tool with zero annotation coverage, this leaves significant behavioral questions unanswered.
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, efficient sentence that states the core purpose without unnecessary words. It's appropriately sized for a simple read operation. However, it could be slightly more front-loaded with additional context about what 'settings' encompasses, but given the tool's simplicity, this is a minor concern.
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 (0 parameters, no output schema, no annotations), the description is incomplete. It doesn't explain what 'settings' includes, how the data is returned, or how this tool fits into the broader context of sibling tools like 'update_settings'. For a tool in a financial/transactional context with multiple related operations, more contextual information would help an agent use it effectively.
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 tool has 0 parameters with 100% schema description coverage, so the schema fully documents the absence of inputs. The description doesn't need to add parameter information, and it appropriately doesn't mention any parameters. This meets the baseline expectation for a parameterless tool where the schema already provides complete coverage.
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 'Get CashChat user settings' clearly states the verb 'Get' and resource 'CashChat user settings', making the basic purpose understandable. However, it doesn't distinguish this tool from its sibling 'update_settings' or explain what specific settings it retrieves versus other tools like 'get_categories' or 'get_summary'. The purpose is clear but lacks differentiation from related tools.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'get_settings' over 'update_settings' for modifying settings, or how it relates to other read operations like 'get_categories' or 'get_summary'. There's no indication of prerequisites, timing, or contextual factors that would help an agent decide when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_summaryB
Get spending summary for a time period
| Name | Required | Description | Default |
|---|---|---|---|
| period | Yes | Time period | |
| date | No | Reference date (YYYY-MM-DD, defaults to today) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a 'Get' operation (implying read-only), but doesn't mention authentication requirements, rate limits, response format, error conditions, or whether it aggregates data in a specific way. For a tool with no annotation coverage, this leaves significant behavioral gaps.
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, efficient sentence that directly states the tool's function without unnecessary words. It's appropriately sized and front-loaded with the core purpose, making it easy to parse quickly.
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 moderate complexity (2 parameters, no output schema, no annotations), the description covers the basic purpose but lacks details about behavioral traits, usage context, and output expectations. It's minimally adequate but has clear gaps in providing complete context for effective tool selection and invocation.
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 description coverage is 100%, with both parameters ('period' and 'date') fully documented in the schema. The description mentions 'time period' which aligns with the 'period' parameter but doesn't add meaningful semantic context beyond what the schema already provides. This meets the baseline for high schema coverage.
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 verb 'Get' and resource 'spending summary' with the scope 'for a time period', making the purpose immediately understandable. It doesn't specifically differentiate from sibling tools like 'get_transactions' which might provide detailed transaction lists rather than summaries, but the core function is well-defined.
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 provides no guidance on when to use this tool versus alternatives like 'get_transactions' for detailed data or 'get_categories' for categorization insights. It mentions the time period scope but doesn't clarify prerequisites, exclusions, or comparative use cases with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionsC
Get transactions from CashChat with optional filters
| Name | Required | Description | Default |
|---|---|---|---|
| startDate | No | Start date (YYYY-MM-DD) | |
| endDate | No | End date (YYYY-MM-DD) | |
| category | No | Filter by category | |
| limit | No | Max results (default 50) | |
| offset | No | Offset for pagination |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states it 'gets' transactions, implying a read-only operation, but lacks details on permissions, rate limits, pagination behavior (beyond schema hints), or what happens if no filters are applied. This is a significant gap for a tool with 5 parameters and no annotation coverage.
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, efficient sentence with zero waste. It is appropriately sized and front-loaded, clearly stating the core purpose without unnecessary elaboration.
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 complexity (5 parameters, no annotations, no output schema), the description is incomplete. It lacks behavioral context (e.g., pagination details, error handling), usage guidance relative to siblings, and does not compensate for the absence of annotations or output schema, making it inadequate for a tool of this scope.
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%, so the schema fully documents all 5 parameters. The description adds minimal value beyond the schema by mentioning 'optional filters', which is implied by the parameters. Baseline 3 is appropriate as the schema does the heavy lifting.
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 verb 'Get' and resource 'transactions from CashChat', making the purpose understandable. It distinguishes from siblings like 'add_transaction' or 'delete_transaction' by being a read operation, though it doesn't explicitly differentiate from other read tools like 'get_categories' or 'get_summary'.
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 mentions 'optional filters' but provides no guidance on when to use this tool versus alternatives. There are multiple sibling tools (e.g., 'get_summary' for aggregated data, 'get_categories' for category lists), but no explicit when/when-not instructions or named alternatives are included.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_settingsC
Update CashChat user settings
| Name | Required | Description | Default |
|---|---|---|---|
| preferredCurrency | No | Currency code (USD, CAD, INR, etc.) | |
| agentInstructions | No | Custom instructions for AI assistant |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'Update' implying a mutation, but doesn't specify permissions required, whether changes are reversible, or any side effects like rate limits. This leaves significant gaps in understanding the tool's 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 a single, efficient sentence with no wasted words. It's appropriately sized and front-loaded, clearly stating the tool's purpose without unnecessary elaboration.
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 mutation tool with no annotations and no output schema, the description is insufficient. It lacks details on behavioral traits, usage context, and expected outcomes, making it incomplete for effective agent use despite the concise structure.
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%, so the input schema fully documents the two parameters. The description doesn't add any additional meaning beyond what the schema provides, such as explaining how these settings interact or their default values, but the baseline of 3 is appropriate given the high schema coverage.
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 action ('Update') and resource ('CashChat user settings'), making the tool's purpose understandable. However, it doesn't differentiate from sibling tools like 'update_transaction', which also performs updates but on a different resource.
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 provided on when to use this tool versus alternatives. It doesn't mention prerequisites, when not to use it, or how it relates to sibling tools like 'get_settings' for retrieval or 'update_transaction' for different updates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_transactionC
Update an existing transaction in CashChat
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Transaction ID | |
| amount | No | New amount | |
| category | No | New category | |
| note | No | New note | |
| name | No | New name/merchant |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool updates a transaction, implying mutation, but lacks details on permissions, whether changes are reversible, error handling, or rate limits. This is inadequate for a mutation tool with zero annotation coverage.
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, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy for an agent to parse quickly.
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 complexity as a mutation operation, lack of annotations, and no output schema, the description is insufficient. It doesn't cover behavioral aspects like side effects, return values, or error conditions, leaving significant gaps for the agent to operate safely and effectively.
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%, so the input schema already documents all parameters (id, amount, category, note, name) with descriptions. The description adds no additional meaning or context beyond what the schema provides, such as format examples or constraints, meeting the baseline for high coverage.
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 action ('Update') and resource ('an existing transaction in CashChat'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'add_transaction' or 'delete_transaction' beyond the basic verb difference, missing explicit scope or constraint details that would warrant a 5.
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 provided on when to use this tool versus alternatives like 'add_transaction' or 'delete_transaction'. The description implies usage for modifying existing transactions but offers no context on prerequisites, exclusions, or specific scenarios, leaving the agent to infer based on tool names alone.
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. Dates show when Glama detected each change.
8 tool updates
v1.0.0- First observed
add_transaction - First observed
delete_transaction - First observed
get_categories - First observed
get_settings - First observed
get_summary - First observed
get_transactions - First observed
update_settings - First observed
update_transaction
TDQS
Every tool has a clearly distinct purpose targeting specific resources and actions. For example, add_transaction, update_transaction, and delete_transaction handle different lifecycle stages of transactions, while get_categories, get_settings, and update_settings manage separate aspects of the system. There is no ambiguity or overlap in functionality.
All tool names follow a consistent verb_noun pattern using snake_case. The verbs (add, delete, get, update) are applied logically to corresponding nouns (transaction, categories, settings, summary), creating a predictable and readable naming convention throughout the tool set.
With 8 tools, this server is well-scoped for a personal finance/transaction management domain. Each tool earns its place by covering essential operations like CRUD for transactions, settings management, and summary reporting, without being overly sparse or bloated.
The tool surface provides complete coverage for the apparent domain of transaction management. It includes full CRUD for transactions (add, get, update, delete), settings management (get and update), and auxiliary functions like categories and summaries, ensuring agents can handle typical workflows without dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- Era ContextOAuthapp.era
Personal finance, bank account, and shared memory connector for Claude, ChatGPT, Gemini Spark & more
Read-only bank access for your AI agent. Connects Claude, ChatGPT, Cursor, Gemini, Codex.
Chat with your bank data: balances, transactions, budgets, bills. Reads only, never moves money.
- BankSyncOAuthio.banksync
Connect AI agents to bank accounts, transactions, balances, and investments.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access and analyze MonarchMoney personal finance data through natural language queries. Provides comprehensive financial insights including account balances, transaction analysis, budget tracking, and spending patterns with enterprise-grade security.9MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage personal expenses through natural language conversations. Supports adding, searching, and analyzing transactions with automatic categorization and financial insights.3MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to interact with YNAB budgets, performing read-only queries by default and optional write operations like creating transactions and managing categories through natural language.3835328MIT
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to the ClearFi personal finance API for searching transactions, tracking bills, analyzing spending, and managing accounts.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/pam-supastellar/cashchat-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server