Connect an AI assistant over MCP
The register as an MCP server. Connect Claude or ChatGPT with a sign-in, or use an API key, and ask in plain language; any change waits for a person to confirm.
The server
| URL | https://api.itemtally.com/mcp |
| Transport | Streamable HTTP, stateless |
| Auth | OAuth 2.1 sign-in (PKCE, client ID metadata documents or dynamic registration; discovery at /.well-known/oauth-protected-resource/mcp), or Authorization: Bearer itk_live_…, the same keys as the REST API |
| Scopes | read, write (owners and admins), offline_access |
| Cost | Free on every plan. Read access covers every lookup. |
Apps like Claude and ChatGPT sign in: the person picks one workspace and Read or Read and propose changes, and the connection acts as them, with their role and folder limits. For scripts and headless clients, create a key under Settings → API and MCP. With read access the assistant can look things up. With write access it can also prepare changes — create and edit items, adjust stock, hand things over and take them back, reserve, import a pasted table — but preparing writes nothing. Each prepared change comes back as a proposal (a plain sentence, the exact changes and a token valid for 15 minutes), and only changes_confirm applies it, which your assistant asks you about first. Confirming the same token twice returns the same receipt; stock adjustments, hand-overs (returned from the person) and due-date changes can be undone from the receipt for 24 hours, by the person who confirmed them.
Tools
| Tool | Answers |
|---|---|
account_get | Which workspace, your role, folder limits, timezone |
items_search | ”Do we have…”, “how many…”, “where is…”, what’s low, held, overdue or reserved |
items_get | One item in full, by name, code, serial or barcode |
items_availability | What’s free for a date window |
custody_list | Who has what, with due dates; overdue only |
stock_low | What’s below its minimum |
stock_reorder_list | What to buy, and how many for each location |
stock_forecast | How long stock will last at the current rate |
stock_locations | What each van or site should carry |
reports_summary | Totals and value, by folder and tag |
reports_stale | What hasn’t moved in a while |
folders_list | The place tree |
people_search, reservations_list, kits_list, kits_get, counts_list | People, holds, kits and counts |
logbook_list | The logbook, by date, item, person or type |
items_create, items_update, items_move, items_archive, items_import | Prepare item changes or an import |
stock_adjust, custody_check_out, custody_check_in, custody_extend | Prepare stock and custody changes |
reservations_create, reservations_cancel, people_create, folders_create | Prepare holds, people and folders |
changes_confirm | Apply a prepared change. The only tool that writes. |
changes_undo | Undo a confirmed change from its receipt, within 24 hours |
Claude Code
claude mcp add --transport http itemtally https://api.itemtally.com/mcp
Run /mcp in Claude Code and choose Authenticate to sign in through the browser. To use an API key instead (CI, shared machines), add --header "Authorization: Bearer itk_live_…".
Then ask: “What’s below its minimum in Van 1?”
Claude Desktop
Claude Desktop starts local MCP servers from its config file. The mcp-remote bridge connects it to a remote server with a header. In Settings → Developer → Edit config, add:
{
"mcpServers": {
"itemtally": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.itemtally.com/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": { "AUTH_HEADER": "Bearer itk_live_…" }
}
}
}
mcp-remote fills in ${AUTH_HEADER} from env; keeping the space inside env avoids a quoting problem on Windows. Restart Claude Desktop and the ItemTally tools appear in the tools menu.
Claude API
The Messages API connects to remote MCP servers for you. Pass the key as authorization_token:
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-client-2025-11-20" \
-H "content-type: application/json" \
-d '{
"model": "claude-opus-5-5",
"max_tokens": 4000,
"mcp_servers": [{
"type": "url",
"url": "https://api.itemtally.com/mcp",
"name": "itemtally",
"authorization_token": "itk_live_…"
}],
"tools": [{ "type": "mcp_toolset", "mcp_server_name": "itemtally" }],
"messages": [{ "role": "user", "content": "What is running low, and how many days of each is left?" }]
}'
ChatGPT and the OpenAI API
OpenAI’s Responses API takes a remote MCP server as a tool, with headers:
import OpenAI from "openai";
const openai = new OpenAI();
const response = await openai.responses.create({
model: "gpt-5",
tools: [
{
type: "mcp",
server_label: "itemtally",
server_url: "https://api.itemtally.com/mcp",
headers: { Authorization: `Bearer ${process.env.ITEMTALLY_KEY}` },
require_approval: "always",
},
],
input: "Who has the projectors, and when are they due back?",
});
console.log(response.output_text);
In the Claude and ChatGPT apps, add ItemTally from the connector directory, or add a custom connector with the URL above. You sign in to ItemTally; no key is needed. In clients that render MCP Apps (Claude), lists, items and proposals appear as cards, and the Confirm button on a proposal card is the only way to apply it.
Any other MCP client
Point it at https://api.itemtally.com/mcp with the Authorization header. To test by hand:
curl -X POST https://api.itemtally.com/mcp \
-H "Authorization: Bearer $ITEMTALLY_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'
event: message
data: {"result":{"tools":[{"name":"account_get","title":"Get workspace and access", …}, …]},"jsonrpc":"2.0","id":1}
What it won’t do
The assistant sees what its connection sees, and nothing more: it acts as the person who connected it (or who created the key), never reaches outside their folders, and can’t touch billing, members, keys or connected assistants. Changes need write access and a confirmation, and every one is logged with that person’s name and how it arrived.
Stuck on an integration? Email [email protected] with the request you sent and the response you got. The person who built the API answers, usually within a business day.