analyze_fileLABSCO SUMMARY
Council keeps the disagreement instead of averaging it away.
The file tools are the everyday value — the contents never enter your main model's context, and the saving is measured on each call rather than advertised as a headline the maintainers say they cannot defend. Council is the more interesting idea: several backends answer the same prompt and all the answers come back, because where two models disagree is usually where the real problem is.
What it is
A router between your MCP client and any OpenAI-compatible backend, local or cloud. File work is done by a backend model and only its conclusions come back. Which backend handles a call is decided in four ordered tiers: an explicitly named one, a learned preference, a rules match, then the first healthy backend in the chain.
What you get
- analyze_file and explore — the backend reads the file or searches the codebase, and you get findings and file:line evidence
- modify_file, which applies a natural-language edit and returns the diff rather than the file
- batch_analyze and batch_modify across a glob, with a content filter to narrow the set first
- generate_file to write code from a spec
- ask for a single routed question, with auto or forced backend selection
- council — one prompt to several backends, every answer returned unaveraged, in parallel, in sequence, as a debate or as a fallback chain
- dual_iterate for a generate-review-fix loop between two backends, and parallel_agents for a decomposed TDD run
- spawn_subagent for a specialised role, review and refactor for quality passes
- check_backend_health, get_analytics, backup_restore and write_files_atomic
- A tokens_saved figure on each file call, measured from the characters actually read against the characters actually returned
Requirements
Node.js 18 or newer, and a clone — there is no published package. It starts and lists every tool with no keys at all; you need a backend only when you call one, which can be a local OpenAI-compatible server on a common port or a single cloud key such as NVIDIA_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY or GROQ_API_KEY. Register it with an absolute path to the server file, because not every client honours a working directory. A backend you name explicitly gets one attempt and does not cascade — that is deliberate, so a pinned lane never quietly spends credit somewhere else.
Setup effort
Build from source — git clone https://github.com/Platano78/smart-ai-bridge.git
USE CASES
Understanding a big file without paying for it twice
Have a backend read it and hand back structured findings, leaving your main context for the reasoning.
Making the same change across many files
Narrow by content first, then apply the instruction across the glob and read the diffs.
Getting more than one opinion on a hard call
Send the prompt to several backends and read every answer, including where they disagree.
Answering a question about a codebase you do not know
Ask in plain language and get file and line evidence back rather than a summary.
Writing something and having it checked before you see it
Run a generate-review-fix loop between two backends.
Finding out which lane is actually up
Check backend health and read the usage analytics before blaming the router.
17 tools
Listed in project docs. Your client may show a different list.
modify_filebatch_analyzebatch_modifygenerate_fileexploreaskcouncildual_iterateparallel_agentsspawn_subagentreviewrefactorcheck_backend_healthbackup_restorewrite_files_atomicget_analyticsBEFORE YOU INSTALL
What to know first
Tools you get
17 tools named in the project's documentation.
Requires
- node on PATH
- Node.js >= 18.0.0
INSTALLATION
Connect your client
You clone this one yourself.
Server setup
git clone https://github.com/Platano78/smart-ai-bridge.git
cd smart-ai-bridge
npm installMCP Clients
Claude Code, Claude Desktop
{
"mcpServers": {
"smart-ai-bridge": {
"command": "node",
"args": [
"<YOUR_PATH_TO_SMART_AI_BRIDGE>/src/server.js"
],
"env": {
"NVIDIA_API_KEY": "<YOUR_NVIDIA_API_KEY>"
}
}
}
}Any MCP client
node <YOUR_ABSOLUTE_PATH>/src/server.js