Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add commands/viindoo/odoo-mcp-client/connectgit clone --depth 1 https://github.com/Viindoo/odoo-mcp-clientWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/viindoo/odoo-mcp-client/connect)<a href="https://agentmods.dev/commands/viindoo/odoo-mcp-client/connect"><img src="https://agentmods.dev/badge/commands/viindoo/odoo-mcp-client/connect.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00033 | $0.02562 |
| Opus 5 | $0.00016 | $0.01281 |
| Sonnet 5 | $0.00007 | $0.00512 |
| Haiku 4.5 | $0.00003 | $0.00256 |
Grade B, and why
connect scanned grade B with 2 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Reads agent configuration directoriesmediumAgent snooping
.claude/, .codex/, .gemini/ hold keys, settings and other credentials a mod has no legitimate need for.
Ask the user: `Auto-allow every mcp__odoo-semantic__* tool in ~/.claude/settings.json? [Y/n]`. Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
(anthropics/claude-code#46426 - "not planned"). Use `curl` via the `Bash` How it starts
The opening of the file, as written. The whole thing — 183 lines — stays where its author put it; the contents beside it link to each section on GitHub.
/odoo-semantic-mcp:connect
Interactive command to connect Claude Code to your Odoo Semantic MCP server.
Run this after claude plugin install - userConfig values are not always prompted at
install time. Without this step the odoo-semantic-mcp plugin's .mcp.json template cannot
resolve and the odoo-semantic MCP server silently fails to load.
Steps for the AI agent
-
Ask user for MCP server URL. Default:
https://odoo-semantic.viindoo.com/mcp. -
Ask user to paste their API key. Must match
^osm_[A-Za-z0-9_-]+$. Re-prompt on format mismatch. Do not echo the key back in plain text. -
Run the following with the
Bashtool (substitute<URL>and<KEY>):claude mcp add --scope user --transport http odoo-semantic <URL> \ --header "X-API-Key: <KEY>"If
claude mcp addreports the name already exists, runclaude mcp remove odoo-semantic --scope userfirst, then retry. If exit code is non-zero for any other reason, report stderr to the user and stop.Then harden the entry against a hung server: Claude Code's default per-tool-call timeout (
MCP_TOOL_TIMEOUT) is ~28 hours, so if OSM accepts the connection but stalls mid-request the agent would block effectively forever instead of falling back to reading source.claude mcp addhas no timeout flag, so set a 90s (90000 ms) per-servertimeoutdirectly in~/.claude.json(the fileclaude mcp add --scope userjust wrote to). Run this exact block with theBashtool - it backs up, refuses to corrupt invalid JSON, only touches theodoo-semanticentry, and is idempotent. Copy the fenced block verbatim without re-indenting - the heredoc body must start at column 0.CLAUDE_JSON="$HOME/.claude.json" python3 - "$CLAUDE_JSON" <<'PY' import json, os, sys, time, shutil p = sys.argv[1] if not os.path.exists(p): print(f"⚠ {p} not found - skipping timeout hardening (entry may be in another scope).") sys.exit(0) try: with open(p) as f: data = json.load(f) except json.JSONDecodeError as e: print(f"✗ {p} is not valid JSON ({e}). Refusing to overwrite.", file=sys.stderr) sys.exit(2) srv = (data.get("mcpServers") or {}).get("odoo-semantic") if not isinstance(srv, dict): print("⚠ mcpServers.odoo-semantic not found in ~/.claude.json - skipping (re-run step 3 first).") sys.exit(0) if srv.get("timeout") == 90000: print("✓ odoo-semantic timeout already 90000 ms - no change.") sys.exit(0) shutil.copy2(p, f"{p}.bak.{int(time.time())}") srv["timeout"] = 90000 with open(p, "w") as f: json.dump(data, f, indent=2) f.write("\n") print("✓ Set odoo-semantic per-tool-call timeout to 90000 ms in ~/.claude.json.") PYOn exit code 2 (invalid JSON): surface the stderr line verbatim and stop; do not retry or delete the file. A
⚠(exit 0) is non-fatal - registration may have used a different scope; continue. On✓: continue to step 4. -
Verify the server is reachable and the key is accepted via HTTP probe. Do not try to call the MCP tool
model_inspecthere - Claude Code v2.x does not hot-reload MCP servers, soodoo-semanticis invisible to the AI agent until the user restarts the session (anthropics/claude-code#46426 - "not planned"). Usecurlvia theBashtool instead. Substitute<URL>(full URL ending in/mcp) and<KEY>:BASE_URL=$(echo "<URL>" | sed 's:/mcp/*$::') curl -sfo /dev/null "${BASE_URL}/health" \ || { echo "✗ Server unreachable at ${BASE_URL}/health"; exit 1; } STATUS=$(curl -s -o /dev/null -w "%{http_code}" \ -H "X-API-Key: <KEY>" "${BASE_URL}/mcp") case "$STATUS" in 401|403) echo "✗ API key rejected (HTTP $STATUS)"; exit 1 ;; *) echo "✓ Server reachable, key accepted (HTTP $STATUS)" ;; esacThe MCP endpoint returns 401/403 only for missing or invalid keys. A valid key reaches the FastMCP handler, which responds 200/202/405/406 to a plain GET - any of those is success for the purposes of this probe.
- On
✓: continue to step 5. - On
✗: surface the curl output and stop. Common fixes: VPN/firewall, server restarted with server-side key rotation, key revoked on the server.
- On
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 183 lines · 33 tokens per session scan B 4e06dda88eab
connect is a command published in the GitHub repository Viindoo/odoo-mcp-client (8 stars, last pushed 2d ago), licensed MIT. It adds 33 tokens to every session and 2,562 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it B with 2 findings (reads agent configuration directories, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other commands, from other repositories
checklist
Generate a custom checklist for the current feature based on user requirements.
clarify
Identify underspecified areas in the current feature spec by asking up to 5 highly targeted clarification questions and encoding answers back into the spec.
specify
Create or update the feature specification from a natural language feature description.
converge
Assess the current codebase against the feature's spec, plan, and tasks, then append any remaining unbuilt work as new tasks to tasks.md so implement can complete it.
implement
Execute the implementation plan by processing and executing all tasks defined in tasks.md.
analyze
Perform a non-destructive cross-artifact consistency and quality analysis across spec.md, plan.md, and tasks.md after task generation.