Storno CLI
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., "@Storno CLIShow me my latest invoices"
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.
Storno CLI — MCP Server
A Model Context Protocol (MCP) server that exposes the entire Storno.ro e-invoicing API as AI-callable tools. Enables Claude Code, Cursor, Windsurf, and any MCP-compatible AI assistant to manage invoices, clients, companies, ANAF e-Factura, and more.
Features
237 tools covering all Storno.ro API endpoints
Full invoice lifecycle: create, issue, submit to ANAF, email, download PDF/XML
Proforma invoices, recurring invoices, delivery notes, credit notes
Client & product catalog, payment tracking, VAT rates
ANAF e-Factura integration (sync, token management, message retrieval)
Multi-company support with company switching
Automatic JWT token refresh
Webhooks, API keys, team member management
Exchange rates (BNR), reports, exports
Quick Start
Hosted Server (recommended)
Storno hosts a public MCP server at https://mcp.storno.ro/mcp with OAuth authentication — no API keys or tokens to manage.
Visit mcp.storno.ro for setup instructions and a one-click "Add to Claude" button.
Claude (claude.ai):
Copy the URL:
https://mcp.storno.ro/mcpClick "Add" and paste the URL
Authorize via OAuth
Claude Code:
claude mcp add storno --transport http https://mcp.storno.ro/mcpCursor / Windsurf:
{
"mcpServers": {
"storno": {
"url": "https://mcp.storno.ro/mcp"
}
}
}Claude Desktop:
{
"mcpServers": {
"storno": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.storno.ro/mcp"]
}
}
}Self-hosted / Token-based Setup
If you prefer to use a JWT token directly (e.g. for self-hosted Storno instances):
1. Install
npm install -g storno-cliOr use directly with npx — no install needed.
2. Configure for Claude Code
Add to your project's .claude/settings.json or global ~/.claude/settings.json:
{
"mcpServers": {
"storno": {
"command": "npx",
"args": ["-y", "storno-cli"],
"env": {
"STORNO_TOKEN": "your-jwt-token",
"STORNO_COMPANY_ID": "your-company-uuid"
}
}
}
}3. Configure for Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"storno": {
"command": "npx",
"args": ["-y", "storno-cli"],
"env": {
"STORNO_TOKEN": "your-jwt-token",
"STORNO_COMPANY_ID": "your-company-uuid"
}
}
}
}4. Configure for Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"storno": {
"command": "npx",
"args": ["-y", "storno-cli"],
"env": {
"STORNO_TOKEN": "your-jwt-token",
"STORNO_COMPANY_ID": "your-company-uuid"
}
}
}
}Environment Variables
Variable | Required | Default | Description |
| No |
| API base URL |
| No* | — | JWT access token |
| No | — | JWT refresh token (for auto-renewal) |
| No* | — | Default company UUID |
| No | — | Email for auto-login (if no token) |
| No | — | Password for auto-login (if no token) |
| No | — | If set, starts Streamable HTTP transport on this port |
| No |
| HTTP bind address (used with |
* You can authenticate at runtime using the auth_login tool instead.
Authentication
Three ways to authenticate:
Option A: Pre-configured token (recommended for production)
Set STORNO_TOKEN in your MCP server environment config.
Option B: Auto-login on startup
Set STORNO_EMAIL and STORNO_PASSWORD. The server will automatically log in when it starts and keep the token refreshed.
Option C: Interactive login via AI
Ask the AI: "Log me in to Storno with email user@example.com and password mypassword"
The AI will call the auth_login tool, which stores the token in memory for the session.
Multi-Company Support
All company-scoped tools require a company context. Three ways to provide it:
Environment variable: Set
STORNO_COMPANY_IDin your MCP configSelect command: Ask the AI to call
companies_selectwith a company UUIDPer-request override: Every company-scoped tool accepts an optional
companyIdparameter
Example AI conversation:
You: List my companies
AI: [calls companies_list] You have 2 companies:
- ABC SRL (uuid: 550e8400...)
- XYZ SRL (uuid: 661f9500...)
You: Switch to XYZ SRL
AI: [calls companies_select with uuid] Done, now using XYZ SRL
You: Show me recent invoices
AI: [calls invoices_list — automatically uses XYZ SRL context]Tool Reference
See TOOLS.md for the complete reference of all 237 tools with descriptions and parameters.
Tool Categories
Category | Tools | Description |
| 7 | Login, register, refresh tokens, profile management |
| 8 | Company CRUD + context switching + ANAF settings |
| 32 | Full invoice lifecycle (create → issue → submit → email → PDF/XML) |
| 10 | Client management (synced from e-Factura) |
| 2 | Product catalog |
| 3 | Payment recording and tracking |
| 12 | Proforma lifecycle (create → send → accept/reject → convert) |
| 10 | Recurring invoice schedules |
| 18 | Delivery note lifecycle + status management |
| 13 | Fiscal receipts (bonuri fiscale) + conversion to invoices |
| 4 | VAT rate CRUD |
| 4 | Bank account CRUD |
| 5 | Invoice number series management |
| 8 | Supplier management |
| 2 | BNR exchange rates + currency conversion |
| 4 | Email template CRUD |
| 8 | ANAF token management + e-Factura sync + validation |
| 2 | e-Factura message retrieval |
| 6 | Multi-country e-invoicing (EU-wide) |
| 1 | Dashboard statistics |
| 1 | Invoice defaults (currencies, units, VAT rates) |
| 3 | Organization team members |
| 4 | Team invitations |
| 6 | Notification management + preferences |
| 10 | Webhook CRUD + testing + delivery logs |
| 5 | API token management |
| 7 | VAT reports + financial reports |
| 1 | Export file downloads |
| 8 | CSV/XLSX/XML import for clients, products, invoices |
| 8 | Bank reconciliation (borderou) |
| 6 | Backup creation + restore |
| 3 | System administration (requires admin role) |
| 4 | License key management |
| 4 | PDF invoice template customization |
| 5 | File storage configuration |
| 3 | Export to accounting formats |
| 2 | Company registry lookups |
| 1 | CPV code lookup |
| 1 | NC code lookup |
| 2 | System health + version info |
Common AI Workflows
Create and send an invoice
You: Create an invoice for client Acme SRL, 10 hours web development at 100 RON/hour, due in 30 days
AI: [calls clients_list to find Acme SRL]
[calls invoices_create with clientId, lines, dates]
[calls invoices_issue to mark as issued]
[calls invoices_email to send to client]
Invoice FAC-2024-042 created, issued, and emailed to contact@acme.roCheck ANAF sync status
You: What's the ANAF sync status for my company?
AI: [calls anaf_status]
Last sync: 2 hours ago, 156 invoices synced, token valid until March 16Generate a monthly report
You: Show me all invoices from January 2024
AI: [calls invoices_list with from=2024-01-01, to=2024-01-31]
Found 23 invoices, total: 45,230 RON
- 18 issued, 3 paid, 2 overdueHTTP Transport
By default, storno-cli uses stdio transport for local MCP clients. Set STORNO_HTTP_PORT to enable Streamable HTTP transport for remote access.
# Start HTTP server on port 3000
STORNO_TOKEN=your-token STORNO_COMPANY_ID=your-company-uuid \
STORNO_HTTP_PORT=3000 node dist/index.js
# Bind to all interfaces (for production behind a reverse proxy)
STORNO_HTTP_PORT=3000 STORNO_HTTP_HOST=0.0.0.0 node dist/index.jsThe server exposes a single /mcp endpoint supporting POST, GET, and DELETE per the MCP Streamable HTTP spec. Each client connection creates an isolated stateful session.
Initialize a session:
curl -X POST http://127.0.0.1:3000/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
# Response includes mcp-session-id headerCall a tool:
curl -X POST http://127.0.0.1:3000/mcp \
-H "Content-Type: application/json" \
-H "mcp-session-id: <session-id>" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"system_health","arguments":{}}}'Development
npm run dev # Watch mode (recompile on changes)
npm run build # Production build
npm run start # Start MCP server (stdio)Architecture
storno-cli/
├── src/
│ ├── index.ts # Entry point — dispatches to stdio or HTTP transport
│ ├── server.ts # McpServer factory (creates server + registers all tools)
│ ├── http-server.ts # Streamable HTTP transport with session management
│ ├── config.ts # Environment configuration
│ ├── client.ts # HTTP client with JWT auth + auto-refresh
│ ├── tools/ # 40 tool domain files (237 tools total)
│ │ ├── auth.ts
│ │ ├── invoices.ts # Largest: 32 tools for full invoice lifecycle
│ │ ├── companies.ts
│ │ └── ... # 37 more domain files
│ └── utils/
│ ├── errors.ts # AI-readable error formatting
│ └── pagination.ts # Pagination helpers
├── dist/ # Compiled JavaScript output
├── package.json
├── tsconfig.json
├── README.md # This file
└── TOOLS.md # Complete tool referenceRequirements
Node.js >= 20.0.0
npm
License
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/stornoro/storno-cli'
If you have feedback or need assistance with the MCP directory API, please join our Discord server