About Otis
Otis is an MCP server for consultants and small agencies to manage client billing through an AI assistant. It records business and client details, work, expenses, invoices, and payments, while enforcing invoice numbering and immutable issued invoices.
Key features
- 01Client and business records
- 02Billable time, services, expenses, and AI usage
- 03Draft and issued invoice management
- 04Full and partial payment tracking
- 05Business record export
- 06Rules-based totals and invoice numbering
Use cases
- 01Record consulting work and expenses
- 02Prepare invoices for approval
- 03Track client payments and references
- 04Export business billing records
MCP support
Otis provides billing tools to MCP clients through a hosted remote endpoint or a self-hosted deployment. Users authenticate with an email code via OAuth.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://mcp.otisbase.com/mcpclaude mcp add --transport http com-otisbase-otis https://mcp.otisbase.com/mcp{"mcpServers":{"com-otisbase-otis":{"type":"http","url":"https://mcp.otisbase.com/mcp"}}}Open in Cursor{"servers":{"com-otisbase-otis":{"type":"http","url":"https://mcp.otisbase.com/mcp"}}}Open in VS Code{"mcpServers":{"com-otisbase-otis":{"type":"http","url":"https://mcp.otisbase.com/mcp"}}}{"mcpServers":{"com-otisbase-otis":{"serverUrl":"https://mcp.otisbase.com/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
Details
From the project READMEOtis MCP
The source code of Otisbase, a free MCP server for client billing, built for consultants and small agencies.
Otis has no app or dashboard. Your AI assistant is the interface: it records clients, work, expenses and payments in Otis, and issues the invoices you approve. Otis stores the records and enforces the rules. It numbers invoices, calculates totals, requires your exact total before it issues an invoice, and never rewrites an issued invoice. Otis runs no AI model; every result comes from the records and the rules in this repository.
This repository is the complete service that runs at mcp.otisbase.com: the MCP server, email sign-in and the storage layer. It runs on Cloudflare Workers. The otisbase.com website is maintained separately.
Use the hosted service
Add this URL as a remote MCP server in your assistant:
https://mcp.otisbase.com/mcp
Sign-in uses OAuth with an email code, so there is no API key. How to install has a guide for Claude, ChatGPT, Claude Code, Codex, Cursor, Muse, Grok Bot and Mistral Vibe. The hosted service is free. Records are stored in the EU.
- MCP docs: the endpoint, the rules and every tool.
- Otis Plugins: the plugin for Claude and Codex: a menu and nine workflow skills.
- Skills: what each skill does.
What Otis records
| Area | Records |
|---|---|
| Business | Business details, tax settings and invoice numbering, used by its owner |
| Clients | Clients and their billing details |
| Work | Billable time, services, reported AI usage and expenses |
| Invoices | Drafts, issued invoices with immutable contents, discounts and tax |
| Payments | Full and partial payments, with references that prevent duplicates |
| Export | A complete export of the business records |
How it works
| Part | Implementation |
|---|---|
| Runtime | One Cloudflare Worker (src/index.ts) |
| MCP server | @modelcontextprotocol/server over Streamable HTTP at /mcp (src/mcp.ts) |
| Sign-in | @cloudflare/workers-oauth-provider with an email code (src/auth.ts) |
| Business records | SQLite in one Durable Object per business (src/business-store.ts) |
| Accounts and sign-ins | Durable Objects (src/account-store.ts, src/sign-in-store.ts) |
| OAuth state | Workers KV |
| Cloudflare Email Sending, for sign-in codes and security notices | |
| Data location | Durable Objects in the EU jurisdiction (src/regions.ts) |
| Sign-in pages | Server-rendered HTML with its own small stylesheet (src/html.ts, src/shell.ts) |
Every business operation checks the caller's current membership. Amounts are integers in minor units. Writes take a request ID, so a retried call does not record the same fact twice.
Repository layout
| Path | Contents |
|---|---|
src/ | Worker, MCP tools, sign-in, storage, billing rules and public docs |
test/ | Integration tests in Cloudflare's local runtime |
scripts/ | Live endpoint checks, sign-in check and the plugin generator |
spec/ | The product specification: scope, billing rules, service and design |
Read the spec before you change behavior. Start with spec/01-README.md. The spec wins over the decision log.
Develop
You need Node 24 or newer.
npm ci
npm run check
npm test
Tests run in Cloudflare's local runtime. Email delivery is simulated in tests.
To run the Worker locally:
npm run dev -- --local --ip 127.0.0.1 --port 8788
Then open http://127.0.0.1:8788/health. The local runtime uses local storage only.
npm run plugins:build generates the Claude and Codex plugins into plugins/ from src/workflows.ts. They are published to otisbase/otis-plugins.
Self-host
You can run your own copy on a Cloudflare account. Edit wrangler.jsonc before you deploy:
- Set
account_idto your Cloudflare account. - Create a KV namespace for OAuth state and put its ID in
kv_namespaces. For EU storage, create it in the EU jurisdiction. - Replace the two
routeswith your own domains. - Set the
vars:ORIGIN: the URL of the MCP host.SITE_ORIGIN: the URL of your website. Website pages opened on the MCP host redirect there, and the sign-in pages link to its Terms and Privacy Policy.EMAIL_FROM: the sender for sign-in codes. The domain must be set up for Cloudflare Email Sending.FEEDBACK_TO: the address that receives feedback sent through thefeedback_sendtool.DO_JURISDICTION:eukeeps Durable Objects in the EU. Remove it to let Cloudflare choose.SIGN_IN_ENABLED:trueto allow sign-in.
- Set
ratelimits.namespace_idto an ID that is unique in your account.
Then deploy:
npx wrangler login
npm run deploy
The sign-in pages and emails name Otisbase. Change them in src/html.ts, src/auth.ts and src/notify.ts, and publish your own terms and privacy policy, before you offer your copy to other people.
Contribute
Bug reports, fixes and ideas are welcome. See CONTRIBUTING.md. To report a security problem, see SECURITY.md. You can also send feedback from your assistant: ask it to send feedback to Otis.
License
The code is released under the MIT License.
These items are not covered by the MIT License:
- The Otisbase and Otis names and logos.
- The Geist fonts in
src/fonts/, under the SIL Open Font License.
The copy and check icons in src/html.ts come from Phosphor Icons (MIT).
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.