Gatherings MCP Server
# gatherings MCP Server
A Model Context Protocol server for managing gatherings and expense sharing.
This is a TypeScript-based MCP server that helps track expenses and payments for social events, making it easy to calculate reimbursements and settle balances between friends.
## Architecture Note
**Important**: This project uses a non-standard architecture for a Node.js application. The TypeScript MCP server acts as a wrapper around a Python backend implementation. The Node.js server receives MCP requests, translates them to command-line calls to the Python script, and returns the results.
While this architecture works for our current needs, it's not the most efficient or maintainable approach for a production application.
### TODO
- Refactor the implementation to use a more standard architecture:
- Either fully migrate the backend to TypeScript/JavaScript
- Or implement proper inter-process communication between Node.js and Python components
- Or replace with a REST API approach where the Python backend provides an API that the MCP server consumes
- Improve error handling between the Node.js and Python components
- Add automated tests for the integration between components
- Optimise Dockerfile
## Features
### Tools
- `create_gathering` - Create a new gathering
- Takes `gathering_id` and `members` as required parameters
- `add_expense` - Add an expense for a member
- Takes `gathering_id`, `member_name`, and `amount` as required parameters
- `calculate_reimbursements` - Calculate reimbursements for a gathering
- Takes `gathering_id` as a required parameter
- `record_payment` - Record a payment made by a member
- Takes `gathering_id`, `member_name`, and `amount` as required parameters
- `rename_member` - Rename an unnamed member
- Takes `gathering_id`, `old_name`, and `new_name` as required parameters
- `show_gathering` - Show details of a gathering
- Takes `gathering_id` as a required parameter
- `list_gatherings` - List all gatherings
- `close_gathering` - Close a gathering
- Takes `gathering_id` as a required parameter
- `delete_gathering` - Delete a gathering
- Takes `gathering_id` as a required parameter, optional `force` parameter
- `add_member` - Add a new member to a gathering
- Takes `gathering_id` and `member_name` as required parameters
- `remove_member` - Remove a member from a gathering
- Takes `gathering_id` and `member_name` as required parameters
## Development
Install dependencies:
```bash
npm install
```
Build the server:
```bash
npm run build
```
For development with auto-rebuild:
```bash
npm run watch
```
## Installation
### Configuration
To use with Claude Desktop, add the server config:
```json
{
"mcpServers": {
"gatherings": {
"command": "node",
"args": ["/path/to/gatherings-server/build/index.js"],
"env": {
"GATHERINGS_DB_PATH": "gatherings.db",
"GATHERINGS_SCRIPT": "/path/to/gatherings-server/gatherings.py"
},
"disabled": false,
"autoApprove": [],
"alwaysAllow": [
"create_gathering",
"add_expense",
"calculate_reimbursements",
"record_payment",
"rename_member",
"show_gathering",
"list_gatherings",
"close_gathering",
"delete_gathering",
"add_member",
"remove_member"
],
"timeout": 300
}
}
}
```
#### Configuration Options
- `command` and `args`: Specifies how to run the server
- `env`: Environment variables
- `GATHERINGS_DB_PATH`: Path to the database file
- `GATHERINGS_SCRIPT`: Path to the Python script for handling gathering operations
- `alwaysAllow`: List of tools that will be automatically allowed without prompting
- `timeout`: Maximum execution time in seconds
### Debugging
Since MCP servers communicate over stdio, debugging can be challenging. We recommend using the [MCP Inspector](https://github.com/modelcontextprotocol/inspector), which is available as a package script:
```bash
npm run inspector
```
The Inspector will provide a URL to access debugging tools in your browser.
TDQS
Scored across 11 tools
Each tool has a clearly distinct purpose with no overlap: add_expense, add_member, calculate_reimbursements, close_gathering, create_gathering, delete_gathering, list_gatherings, record_payment, remove_member, rename_member, and show_gathering all target specific actions on distinct resources (expenses, members, gatherings, payments). An agent can easily differentiate them without confusion.
All tool names follow a consistent verb_noun pattern using snake_case, such as add_expense, create_gathering, list_gatherings, and show_gathering. There are no deviations in style or convention, making the set predictable and readable.
With 11 tools, the count is well-scoped for managing gatherings, expenses, members, and payments. Each tool serves a clear purpose (e.g., CRUD operations for gatherings and members, financial actions like expenses and reimbursements), and none feel redundant or unnecessary for the domain.
The tool set provides strong coverage for core gathering management workflows, including creation, listing, showing, closing, and deletion of gatherings, as well as member and expense handling. Minor gaps exist, such as no tools for updating gathering details or expenses directly, but agents can work around these by using combinations like rename_member or recreating items.