AI layer (MCP)
Tool reference
All 20 StackTracker MCP tools with params and JSON-RPC examples.
The server exposes 20 tools: 9 read and 11 write. Read tools return data and change nothing. Write tools mutate your workspace and revalidate cached data right after they run.
Every call uses the tools/call method. The body shape is:
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"<tool>","arguments":{}}}Projects and portfolio
list_projects— READ — list all projects (name, slug, currency, hourly_rate, tagline). Params: none.create_project— WRITE — create a project (slug auto-derived from name). Params: name (required), slug (optional), hourly_rate (number, default 50), currency (default "EUR").get_project_metrics— READ — full ROI picture for one project: cash, hours and priced time, revenue, net, ROI with and without time, monthly burn, verdict. Params: project.get_portfolio_overview— READ — totals across all projects plus per-project rows and a combined sum; flags mixed currencies. Params: none.set_hourly_rate— WRITE — update a project's hourly rate. Params: project, hourly_rate (positive number).
Costs
get_cost_breakdown— READ — cash per cost category (expenses plus subscription charges), optional month range. Params: project, from (optional, YYYY-MM), to (optional, YYYY-MM).log_expense— WRITE — record money spent (one-off or variable). Params: project, vendor, amount (positive), date (optional), category (optional), description (optional).add_category— WRITE — create a custom cost category. Params: project, name, emoji (optional).
Subscriptions and renewals
list_subscriptions— READ — active subscriptions with id, vendor, plan, amount, cadence, next renewal. Params: project.add_subscription— WRITE — create a subscription and anchor its renewal schedule. Params: project, vendor, amount (positive), currency (optional), cadence (monthly | yearly, default monthly), next_renewal_date, category (optional), plan (optional).cancel_subscription— WRITE — mark a subscription inactive by id (history kept). Params: id.upcoming_renewals— READ — renewals due in the next N days. Params: project, days (int, default 30).upcoming_cashflow— READ — day-by-day cash out from renewals, one project or all. Params: project (optional), days (int, max 365, default 30).find_cheaper_alternatives— READ — match subscriptions against an alternatives catalog and estimate yearly savings. Params: project.scan_import— WRITE — bulk-add CLI-scanned tools as candidates at price 0, deduped with aliases. Params: project, tools (array of objects, each with avendorfield).
Time
log_time— WRITE — record hours worked. Areas: backend, frontend, design, marketing, content, sales, support, ops, research, other. Params: project, hours (positive), area (default "other"), date (optional), notes (optional).get_time_summary— READ — hours by work area, priced at the project hourly rate. Params: project.
Revenue and social
log_revenue— WRITE — record money earned. Sources: stripe, revenuecat, manual, ads, sponsorship, affiliate, lifetime_deal. Params: project, amount (positive), source (default "manual"), date (optional), notes (optional).log_social_posts— WRITE — record published social posts. Platforms: x, linkedin, tiktok, instagram, youtube, reddit, producthunt, other. Params: project, platform (default "x"), count (int, default 1), date (optional).
Maintenance
delete_entry— WRITE — delete a logged row. Params: table (one of expenses | time_entries | revenue_entries), id.
Worked examples
A read call, get_project_metrics:
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_project_metrics","arguments":{"project":"stacktracker"}}}A write call, log_expense:
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"log_expense","arguments":{"project":"stacktracker","vendor":"Vercel","amount":20,"date":"2026-07-20","category":"Hosting","description":"Pro plan"}}}