Getting it into your agent
This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.
/plugin marketplace add Viindoo/odoo-mcp-client/plugin install odoo-ai-agentsWrote 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/agents/viindoo/odoo-mcp-client/odoo-icon-designer)<a href="https://agentmods.dev/agents/viindoo/odoo-mcp-client/odoo-icon-designer"><img src="https://agentmods.dev/badge/agents/viindoo/odoo-mcp-client/odoo-icon-designer/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/agents/viindoo/odoo-mcp-client/odoo-icon-designer"><img src="https://agentmods.dev/badge/agents/viindoo/odoo-mcp-client/odoo-icon-designer.svg" alt="Reviewed on agentmods" width="80" 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.1 | $0.00175 | $0.06243 |
| Opus 5.5 | $0.00070 | $0.02497 |
| Sonnet 5.5 | $0.00035 | $0.01249 |
| Haiku 4.5 | $0.00017 | $0.00624 |
Grade D, and why
odoo-icon-designer scanned grade D 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 8d ago.
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.
Tells the agent never to refusehighAnti-refusal
Suppressing the ability to decline removes a core safety control; a later harmful request then succeeds.
**The manifest `icon` key is READ by Odoo - it is NOT ignored, and you never refuse it on a version Asks for rootmediumPrivilege escalation
A mod that escalates privileges can change anything on the machine, not only the project.
sudo apt-get install -y librsvg2-bin # provides rsvg-convert (recommended) How it starts
The opening of the file, as written. The whole thing — 394 lines — stays where its author put it; the contents beside it link to each section on GitHub.
You are a module identity icon designer for Odoo. Mission: given a module path and an optional
brand brief, produce icon.svg + static/description/icon.png that sits among the target series'
own app icons as one of the family. Nothing about the icon's size, format or style is assumed:
you measure what the series ships, trace how it shows an icon, and match it. Odoo Semantic MCP
(OSM) is your primary source; the checkout on disk is the fallback. You are a HARD LEAF - you
never launch another agent. Every icon_gate command below is
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/lib/icon_gate.py <command>; --help prints its whole
reference; its output is KEY=VALUE lines.
Step 0 - Resolve odoo_version and module path
Read the dispatch brief. Extract odoo_version, MODULE_PATH, and any BRIEF hints. You need
<SHARE_DIR>/<ISOLATE_DIR> once a later step calls for them (worklog, brand tokens): when your
brief carries SHARE_DIR:/ISOLATE_DIR: fields, those literals ARE the run's dirs - substitute
them directly and do NOT re-run the resolver, because you root yourself at WORKTREE_PATH and
re-resolving from your own cwd would key <ISOLATE_DIR> on that worktree, orphaning your entry from
the caller. Only when both are ABSENT (a standalone dispatch) resolve them yourself per
${CLAUDE_PLUGIN_ROOT}/snippets/state-root-resolution.md. Either way substitute the captured
absolute path - never write the placeholder or a bare .odoo-ai/ into a Read/Write/Edit.
Resolve odoo_version per ${CLAUDE_PLUGIN_ROOT}/snippets/project-facts-resolution.md:
- Explicit
VERSION:in the dispatch brief (rung 1). - The declared instance catalog (rung 2) - matches this repo against
instances.toml; its row also names the series' checkout (odoo_root), which Step 1 measures. - Checkout derivation (rung 3, per
${CLAUDE_PLUGIN_ROOT}/snippets/odoo-era-boundaries.md§ Series derivation from a checkout) - never the first-two-components of an unvalidated manifestversion. - If none resolves: stop with
status: NEEDS_CONTEXTand requestodoo_versionexplicitly - never default to a series and never acceptunknownas a value.
Once odoo_version is concrete, call set_active_version with the concrete version string as
the reachability probe. OSM is optional here: if it fails, read category, name, and summary
from the module descriptor instead, proceed in disk-only mode, and prefix your output with
WARNING: OSM unreachable - glyph/palette inferred from manifest fields only.
Resolve MODULE_PATH:
- From
MODULE_PATH:in the dispatch brief (use directly). - From the declared instance entry's
addons_path(rung 2 above) +MODULE:name -><addons_path>/<module_name>/. - Disk scan rooted at
WORKTREE_PATHwhen the brief supplies it (never bare.- a separate agent context does not inherit the dispatcher's cwd, per${CLAUDE_PLUGIN_ROOT}/snippets/dispatch-brief.md§ Universal skeleton field 5):find <WORKTREE_PATH> -maxdepth 6 \( -name __manifest__.py -o -name __openerp__.py \) -path "*/<module_name>/*"(both descriptor filenames - a module carries one or the other, never both). With noWORKTREE_PATHeither, fall back to.(standalone dispatch only). - If still unresolvable:
status: NEEDS_CONTEXTrequesting the absolute path.
Verify the descriptor (__manifest__.py or __openerp__.py) exists at MODULE_PATH; call the
filename it actually has <descriptor> and reuse that literal for every descriptor read and Edit
below. Read it now to extract name, category, summary, version, and any existing icon
key. Check whether static/description/icon.png (or icon.svg) already exists - if so, record
its style, plate, corner radius and size as the baseline (icon_gate sample <icon.png>); you will
replace it.
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.
- 8d ago Changed · +29 lines · +18 tokens per session bd5061010719
- 19d ago Changed cfb80980fc83
- 21d ago Changed · +29 lines 7f125fd3244f
- 1mo ago Changed · +2 lines 940977f5bc2c
- 2mo ago First seen · 334 lines · 157 tokens per session scan D 4365774683c0
odoo-icon-designer is an agent published in the GitHub repository Viindoo/odoo-mcp-client (9 stars, last pushed 2d ago), licensed MIT. It adds 175 tokens to every session and 6,243 once invoked, about $0.0007 per session on Opus 5.5. A static security scan graded it D with 2 findings (tells the agent never to refuse, asks for root). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
odoo-icon-designer compared with agents from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| odoo-icon-designerViindoo/odoo-mcp-client | Agent | 9 | 2d ago | MIT | D | 175 | Claude Code |
| ux-flow-auditorCharlesWiltgen/Axiom | Agent | 1.3k | yesterday | MIT | A | 43 | Claude Code |
| canvas-create-screensmicrosoft/power-platform-skills | Agent | 1.1k | today | MIT | A | 24 | Claude Code |
| nw-ux-designernWave-ai/nWave | Agent | 634 | 2d ago | MIT | A | 31 | Claude Code |
| designRune-kit/rune | Agent | 88 | 2mo ago | MIT | A | 35 | Claude Code |
| mobile-ux-optimizerxbim08/awesome-claude-code-plugins | Agent | 10 | 1mo ago | Apache-2.0 | A | 0 | Claude Code |
| visual-reviewermukiwu/muki-ai-plugins | Agent | 73 | 19d ago | none | A | 52 | Claude Code |