Tallystick MCP
Set it up in your agent
Every client below runs the same command, uvx tallystick-mcp. There is no environment to prepare and nothing to install first. Replace __KEY__ with the key from your purchase.
The three reading tools work with no key at all, so you can wire it up and try it before buying anything.
Where the key goes
Every client below supports an env block, which is why that is the way the key travels. Tallystick reads TALLYSTICK_LICENSE_KEY first and falls back to ~/.tallystick/license.json for clients where editing env is awkward. It is never passed as a command-line argument: arguments show up in process listings.
VS Code is the one client with real secret storage. Its inputs block asks once and keeps the key in the OS keychain, so the file you commit holds a reference and not the secret.
Claude Desktop
Windows: %APPDATA%\Claude\claude_desktop_config.jsonmacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"tallystick": {
"command": "uvx",
"args": [
"tallystick-mcp"
],
"env": {
"TALLYSTICK_LICENSE_KEY": "__KEY__"
}
}
}
}
Settings, Developer, Edit Config. Restart Claude after saving.
Cursor
~/.cursor/mcp.json (or .cursor/mcp.json inside one project)
{
"mcpServers": {
"tallystick": {
"command": "uvx",
"args": [
"tallystick-mcp"
],
"env": {
"TALLYSTICK_LICENSE_KEY": "__KEY__"
}
}
}
}
The one-click button adds the server. Paste the key after, into the env block it creates.
Add it to Cursor in one click, then paste your key into the env block it creates.
VS Code
.vscode/mcp.json (per project)
{
"inputs": [
{
"type": "promptString",
"id": "tallystick-key",
"description": "Tallystick licence key",
"password": true
}
],
"servers": {
"tallystick": {
"command": "uvx",
"args": [
"tallystick-mcp"
],
"env": {
"TALLYSTICK_LICENSE_KEY": "${input:tallystick-key}"
}
}
}
}
The root key is servers, not mcpServers. VS Code asks for the key once and keeps it in the OS keychain, so nothing secret goes into the file.
Add it to VS Code in one click, then paste your key into the env block it creates.
Windsurf
~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"tallystick": {
"command": "uvx",
"args": [
"tallystick-mcp"
],
"env": {
"TALLYSTICK_LICENSE_KEY": "__KEY__"
}
}
}
}
Cascade, MCP servers, then Refresh after saving.
Cline
cline_mcp_settings.json (MCP Servers, Configure, in the panel)
{
"mcpServers": {
"tallystick": {
"command": "uvx",
"args": [
"tallystick-mcp"
],
"env": {
"TALLYSTICK_LICENSE_KEY": "__KEY__"
}
}
}
}
Edit through the Cline panel rather than the file when you can.
Zed
~/.config/zed/settings.json
{
"context_servers": {
"tallystick": {
"source": "custom",
"command": "uvx",
"args": [
"tallystick-mcp"
],
"env": {
"TALLYSTICK_LICENSE_KEY": "__KEY__"
}
}
}
}
The root key is context_servers, and source:"custom" is required for anything you add by hand.
Gemini CLI
~/.gemini/settings.json
{
"mcpServers": {
"tallystick": {
"command": "uvx",
"args": [
"tallystick-mcp"
],
"env": {
"TALLYSTICK_LICENSE_KEY": "__KEY__"
}
}
}
}
Env vars must be stated in the env block; Gemini CLI does not inherit your shell.
OpenAI Agents SDK
In your own Python code, not a config file.
from agents.mcp import MCPServerStdio
tallystick = MCPServerStdio(
params={
"command": "uvx",
"args": ["tallystick-mcp"],
"env": {"TALLYSTICK_LICENSE_KEY": "__KEY__"},
}
)
Any framework with an MCP stdio adapter connects the same way.
Anything else that speaks MCP
Any client or framework that can launch an MCP server over stdio works. Give it the command uvx tallystick-mcp and this one environment variable:
TALLYSTICK_LICENSE_KEY=__KEY__
Checking it worked
Ask your agent to name the format of any invoice file. It should call detect_invoice_format and answer with the flavour, for example XRechnung 3.0 CII or ZUGFeRD embedded in PDF. That tool is free and needs no key, so a correct answer proves the wiring before the licence is ever read.
Nothing on this page uploads a file. Parsing happens in the process your client started, on your machine. What the server does and what it costs.