Wallos MCP Server
Enables Claude Desktop to manage subscriptions, categories, currencies, payment methods, and household members in a self-hosted Wallos instance.
README
Wallos MCP Server

An MCP (Model Context Protocol) server that enables Claude Desktop to interact with your Wallos subscription management instance.
Overview
This MCP server provides tools for managing subscriptions, categories, currencies, payment methods, and household members in Wallos through Claude Desktop. It acts as a bridge between Claude and your self-hosted Wallos instance.
Features
- š View and manage subscriptions
- š Organize with categories
- š± Handle multiple currencies
- š³ Manage payment methods
- š„ Configure household members
- š Access statistics and insights
- š Check upcoming payments
Prerequisites
- Wallos instance (self-hosted or Docker)
- Bun runtime (https://bun.sh)
- Claude Desktop
- Wallos user credentials
Installation
- Clone this repository:
git clone https://github.com/yourusername/wallos-mcp.git
cd wallos-mcp
- Install dependencies:
bun install
- Configure environment:
cp .env.example .env
# Edit .env with your Wallos instance details
- Build the project:
bun run build
- Add to Claude Desktop config:
{
"mcpServers": {
"wallos": {
"command": "bun",
"args": ["/path/to/wallos-mcp/dist/index.js"],
"env": {
"WALLOS_URL": "http://localhost:8282",
"WALLOS_USERNAME": "your_username",
"WALLOS_PASSWORD": "your_password"
}
}
}
}
Available Tools
create_subscription
Create a new subscription with automatic entity creation. This powerful tool handles all the complexity of creating related entities automatically.
Features:
- š Currency by Code: Specify currencies using codes (USD, EUR, GBP, etc.) - automatically creates if doesn't exist
- š Flexible Frequency: Natural language billing periods ('daily', 'weekly', 'monthly', 'quarterly', 'bi-weekly', '3 months')
- š·ļø Smart Entity Creation: Automatically creates missing categories, payment methods, and household members
- š„ Payer Management: Specify payer by name with optional email - creates household member if needed
- š Intelligent Date Handling: Smart calculation of next payment date, always ensuring it's in the future
Parameters:
name(required): Subscription service nameprice(required): Subscription price amountcurrency_code: Currency code (e.g., USD, EUR) - creates if neededcurrency_id: Use existing currency ID (alternative to currency_code)billing_period: Flexible period ('monthly', 'quarterly', '2 weeks', etc.)billing_frequency: Multiplier for billing period (default: 1)category_name: Category name (creates if needed, prioritized over category_id)category_id: Use existing category IDpayment_method_name: Payment method name (creates if needed)payment_method_id: Use existing payment method IDpayer_user_name: Household member name (creates if needed)payer_user_email: Email for new household memberpayer_user_id: Use existing household member IDstart_date: Subscription start date (YYYY-MM-DD)next_payment: Next payment date (auto-calculated if not provided)auto_renew: Whether subscription auto-renews (default: true)notes: Additional notes (supports multiline)url: Service URLnotify: Enable renewal notificationsnotify_days_before: Days before renewal to notify
Example Usage:
{
"name": "Netflix Premium",
"price": 15.99,
"currency_code": "USD",
"billing_period": "monthly",
"category_name": "Entertainment",
"payment_method_name": "Credit Card",
"payer_user_name": "John Smith",
"payer_user_email": "john@family.com",
"start_date": "2024-01-15",
"auto_renew": true,
"notify": true,
"notify_days_before": 3,
"notes": "Premium family plan\n4K streaming\n4 simultaneous screens",
"url": "https://netflix.com"
}
list_subscriptions
View all subscriptions with comprehensive filtering options.
Parameters:
member_ids: Comma-separated member IDs (e.g., "1,3,5")category_ids: Comma-separated category IDspayment_method_ids: Comma-separated payment method IDsstate: Filter by state ('active' or 'inactive')sort: Sort field (name, id, next_payment, price, etc.)disabled_to_bottom: Sort inactive subscriptions to bottomconvert_currency: Convert prices to main currency
get_master_data
Retrieve all master data (categories, currencies, payment methods, household members) in a single call.
Category Management Tools
add_category: Create a new categoryupdate_category: Update category namedelete_category: Remove a category (unless it's the default)
Implementation Plan
Phase 1: Core Infrastructure ā
- [x] Repository setup
- [x] TypeScript configuration
- [x] MCP SDK integration setup
- [x] Complete CI/CD pipeline with GitHub Actions
- [x] Docker build and security scanning
- [x] Comprehensive development tooling (justfile)
- [x] Code quality tools (Super Linter, ESLint, Prettier)
- [ ] Wallos API client with session management
- [ ] Error handling and logging
Phase 2: Subscription Management
- [x]
list_subscriptions- View all subscriptions with filters - [x]
create_subscription- Create new subscription with automatic entity creation - [ ]
edit_subscription- Modify existing subscription - [ ]
delete_subscription- Remove subscription - [ ]
get_subscription- Detailed subscription info - [ ]
clone_subscription- Duplicate subscription - [ ]
toggle_subscription- Enable/disable subscription
Phase 3: Master Data Tools
- [ ]
manage_categories- CRUD operations for categories - [ ]
manage_payment_methods- Add/edit/remove payment methods - [ ]
manage_currencies- Currency management with exchange rates - [ ]
manage_household- Household member operations
Phase 4: Analytics & Insights
- [ ]
get_statistics- Spending statistics and trends - [ ]
upcoming_payments- Next payment schedule - [ ]
spending_by_category- Category breakdown - [ ]
get_budget_status- Budget vs actual spending - [ ]
export_data- Export subscriptions to CSV/JSON
Phase 5: Advanced Features
- [ ]
search_logos- Find logos for subscriptions - [ ]
bulk_operations- Mass update subscriptions - [ ]
notifications_status- Check notification settings - [ ]
calculate_savings- Identify savings opportunities - [ ]
sync_exchange_rates- Update currency rates
Architecture
Tech Stack
- Language: TypeScript
- Runtime: Node.js
- MCP SDK: @modelcontextprotocol/sdk
- HTTP Client: axios
- Session Management: tough-cookie
- Environment: dotenv
Project Structure
wallos-mcp/
āāā src/
ā āāā index.ts # MCP server entry point
ā āāā wallos-client.ts # Wallos API wrapper
ā āāā tools/ # MCP tool implementations
ā ā āāā subscriptions.ts # Subscription management tools
ā ā āāā categories.ts # Category tools
ā ā āāā currencies.ts # Currency tools
ā ā āāā payments.ts # Payment method tools
ā ā āāā household.ts # Household tools
ā ā āāā analytics.ts # Statistics and insights
ā āāā types/ # TypeScript type definitions
ā ā āāā index.ts # Main types export
ā ā āāā wallos.ts # Wallos API types
ā ā āāā mcp.ts # MCP-specific types
ā āāā utils/ # Utility functions
ā āāā session.ts # Session management
ā āāā logger.ts # Logging utilities
ā āāā validators.ts # Input validation
āāā tests/ # Test files
āāā dist/ # Compiled JavaScript
āāā .env.example # Environment template
āāā .gitignore
āāā package.json
āāā tsconfig.json
āāā README.md
API Communication Flow
-
Authentication:
- MCP server starts ā Creates session with Wallos
- Stores session cookie for subsequent requests
- Handles session expiry and renewal
-
Request Flow:
Claude Desktop ā MCP Tool ā Wallos Client ā Wallos API ā SQLite DB ā ā Response ā JSON Response ā PHP Endpoint -
Session Management:
- Persistent session across tool calls
- Automatic re-authentication on expiry
- Secure credential storage in environment
Security Considerations
- Credentials stored in environment variables
- Session-based authentication with Wallos
- Input validation on all tool parameters
- No direct database access (API-only)
- Respects Wallos user permissions
CI/CD Pipeline
GitHub Actions Workflows
- Code Quality & Linting: TypeScript checking, ESLint, Prettier formatting, security audits
- Test & Build: Unit testing and build verification with Node.js compatibility (18, 20, 22)
- Docker Build: Multi-platform builds with security scanning
- Super Linter: Comprehensive code quality checks with 10+ linters
- Automatic Publishing: Docker images to GitHub Container Registry
Quality Assurance
# Local development workflow
just lint # ESLint + TypeScript + Markdown linting
just fmt # Prettier + markdownlint formatting
just superlint # Comprehensive Super Linter (fast)
just superlint-verbose # Detailed debugging output
All workflows run automatically on pushes and pull requests with smart validation modes.
Development
Quick Start with Just
# Initial setup (installs deps, creates .env)
just setup
# Start development server
just start
# Run all quality checks
just check
# Build and test
just build && just test
Manual Setup
# Install dependencies
bun install
# Run in development mode
bun run dev
# Run tests
bun test
# Build for production
bun run build
Testing Tools Locally
# Start local MCP server
bun run start:local
# Test with MCP client
bunx @modelcontextprotocol/cli test
Tool Reference
For detailed information about available tools, see the Available Tools section above.
Currently Implemented Tools
Subscription Management
create_subscription- Create new subscription with auto entity creationlist_subscriptions- List subscriptions with filters
Master Data
get_master_data- Get all categories, currencies, payment methods, household
Category Management
add_category- Add new categoryupdate_category- Update category namedelete_category- Delete category (except default)
Contributing
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
Roadmap
- [ ] Batch operations support
- [ ] Caching layer for frequently accessed data
- [ ] WebSocket support for real-time updates
- [ ] Multi-user household support
- [ ] Backup and restore tools
- [ ] Integration with calendar services
- [ ] Natural language subscription entry
License
MIT License - See LICENSE file for details
Support
Acknowledgments
- Wallos by Ellite
- Model Context Protocol by Anthropic
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.