A high-fidelity Gemini CLI extension and MCP bridge for Odoo ERP/CRM.
Brass-Monkey demonstrates solid tool coverage (25 tools) with consistent naming patterns (verb_noun) and descriptions present for all tools. However, schema visibility is limited in the provided source, only package.json and mcp-server.ts are shown; actual schema definitions in src/tools/schemas.js are not included, preventing full validation of parameter types, constraints, and output documentation. Tool descriptions are generally adequate (50-150 chars) but lack actionable guidance on when to use each tool vs. alternatives (e.g., inspect_model vs. search_records). Error handling is mentioned (errorReporting=true) but implementation details are not visible. Security patterns (credential injection, audit logging) are referenced in code comments but not fully verifiable from the excerpt.
Server-side grouping and aggregation (Pivot style). For simple counts, search_read with limit=0 is safer.
Create new records in a specified model with audit logging.
Download any file or attachment from an Odoo database to the local workspace.
Generate and retrieve report data (e.g., PDFs).
Run an existing Odoo server action against explicit records. Use dry_run first to expand the action tree.
Call a workflow button method on records (e.g. action_confirm). ORM primitives are refused; use the dedicated CRUD tools.
Retrieve window actions. Prefer trace_ui_path for navigating to a specific model.
Schema definitions not visible in provided source. src/tools/schemas.js is referenced but not included, preventing validation of parameter types, constraints, enums, and output documentation. Per HARD SCORING RULES, tools without visible schemas score 0 on schema dimension.
Descriptions lack actionable guidance on tool selection. E.g., 'get_menu' and 'trace_ui_path' both discover UI structure, but descriptions don't explain when to use each. LLMs cannot disambiguate without explicit 'use this when...' guidance.
No visible parameter descriptions in tool registry. The toolRegistry in mcp-server.ts shows tool names and descriptions but not parameter-level documentation. LLMs cannot infer what 'domain', 'limit', 'offset', or 'fields' parameters control without descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 39 | 2025-06-18+ | v2 |
Retrieve recent local audit log entries for transparency.
DENSE TOOL: Mandatory 'World Map' orientation. Provides server, user, company, and app context. Run this FIRST in every session.
Get version and environment information for the Brass-Monkey extension.
Retrieve Odoo's menu structure. Use trace_ui_path for targeted discovery instead.
Retrieve a highly detailed 360-degree dashboard report for a single Odoo record, including sub-lines and chatter.
Retrieve detailed reports for multiple Odoo records in batch.
Fetch view XML/definitions. Use inspect_model (show_ui=true) to find view IDs first.
DENSE TOOL: Deeply audit a model's fields, relationships, and UI paths in one call. Use this before search_read if you don't know the schema.
Show all configured Odoo environments.
List all available Odoo models. Use get_environment first to see if the relevant app is installed.
List all available reports for a specific model.
Delete an instance configuration and its credentials.
Search for Odoo records. Returns a pagination envelope containing total matching count and display display-name mapping.
Configure and authenticate a new Odoo environment.
Change the active Odoo instance for subsequent operations.
DENSE TOOL: Discover exactly how to reach a model through the UI (Menus -> Actions -> Views).
Delete records from the system.
Update existing records with field-level tracking.
Error handling implementation not visible. errorReporting=true is declared, but actual error messages, recovery guidance, and error classification (retryable vs. fatal) are not shown in the provided source excerpt.
No tool annotations visible. toolAnnotations=false, but destructive tools (remove_instance, unlink_record, execute_action) should declare readOnlyHint=false and destructiveHint=true to guide agent behavior and permission prompts.