toolbloatreport

What your MCP stack costs, and where models pick the wrong tool

Tool definitions are sent to the model on every turn. toolbloat counts them, then asks each model which tool it would call for realistic requests, first with only the right server loaded and then with every server loaded. No tool is ever executed.

Recorded run Date 2026-11-03 toolbloat 0.1.0 Models mistral:ministral-8b-latest, mistral:ministral-14b-latest Hardware Apple M4, 16 GB RAM, macOS 27.2
6,064
tokens of tool definitions on every turn (approx.)
43 / 6
tools / servers in the stack
18.2M
tokens per month at 100 turns/day
-14 pts
largest accuracy change when stacked · mistral:ministral-8b-latest

Tokens per server

Each tool counted as name, description and JSON Schema with tiktoken o200k. Providers use their own tokenizers, so treat these as approximate.

everything
1,825 · 16
filesystem
1,806 · 14
memory
1,045 · 9
thinking
873 · 1
time
281 · 2
fetch
234 · 1

Heaviest tools

The ten tool definitions that cost the most tokens.

ToolTokens
thinking/sequentialthinking873
everything/gzip-file-as-resource252
fetch/fetch234
filesystem/read_text_file196
memory/create_entities190
everything/get-header-params187
time/convert_time186
filesystem/edit_file173
filesystem/search_files159
filesystem/read_multiple_files150

Tool selection accuracy: alone vs. stacked

Share of requests where the model called the expected tool. "Alone" loads only that tool's server; "stacked" loads all 6 servers (43 tools), 43 requests.

alonestacked
ModelAloneStacked ChangeBrokenRight server Valid argsNo callBilled tokens$ / month
mistralministral-8b-latest 86% 72% -14 6 98% 100% 0% 7,558 $2.73
mistralministral-14b-latest 91% 86% -5 2 98% 100% 0% 7,558 $3.64

"Broken": requests the model answered correctly alone and wrongly with the whole stack. "Valid args": correct calls whose arguments validate against the tool's JSON Schema. "Billed tokens": average prompt tokens the provider reported for a stacked call. "$ / month": approximate definition tokens × list input price × 100 turns/day × 30 days, without prompt caching.

Cross-server confusion (stacked)

Rows: the server that owns the expected tool. Columns: the server of the tool the model actually called. Off-diagonal cells are picks from the wrong server.

expected ↓ · chosen →filesystemmemoryeverythingthinkingtimefetchunknown
filesystem28000000
memory11700000
everything00310001
thinking0002000
time0000400
fetch0000020

Most common wrong picks (stacked)

Expected tool and what the model called instead, across all models.

ExpectedChosenn
memory/create_relationsmemory/create_entities2
filesystem/write_filefilesystem/create_directory2
memory/delete_observationsmemory/search_nodes2
filesystem/edit_filefilesystem/read_text_file2
filesystem/list_directory_with_sizesfilesystem/list_allowed_directories2
filesystem/read_filefilesystem/list_allowed_directories1
filesystem/read_text_filefilesystem/list_allowed_directories1
filesystem/read_media_filefilesystem/search_files1
memory/add_observationsmemory/search_nodes1
memory/delete_entitiesfilesystem/search_files other server1
filesystem/move_filefilesystem/list_allowed_directories1
filesystem/search_filesfilesystem/list_allowed_directories1

Tools no model chose (stacked)

Removing them would save about 690 tokens per turn (~2.1M per month). Check before removing: a tool can be useful even if these requests did not reach it.

  • filesystem/edit_file173
  • memory/create_relations145
  • filesystem/list_directory_with_sizes140
  • memory/delete_observations130
  • filesystem/write_file102
Every request and every answer (43)

✓ expected tool · ✗ another tool (hover to see which) · – no call or failed call. A = alone, S = stacked.

RequestExpectedministral-8b-latest
A · S
ministral-14b-latest
A · S
Can you show me the last 10 lines of the server logs from `/var/log/nginx/error.log` to see if there are any recent issues?filesystem/read_file ✓ · ✗✓ · ✓
Can you show me the first 10 lines of the 'project_requirements.txt' file located in the 'docs' directory to confirm the latest dependencies?filesystem/read_text_file ✓ · ✗✓ · ✓
Can you show me the base64-encoded version of the latest project logo in the `/designs/branding/` folder? It's called `logo_v2.png` and I need it for a quick email template.filesystem/read_media_file ✓ · ✗✓ · ✓
I need to compare the latest versions of three configuration files (`/config/app_settings_1.json`, `/config/app_settings_2.json`, and `/config/app_settings_3.json`) from our deployment directory—can you fetch all of them at once?filesystem/read_multiple_files ✓ · ✓✓ · ✓
Create a new file called 'project_plan.txt' in the 'docs' folder with the latest project timeline and milestones I drafted, so I can share it with the team.filesystem/write_file ✗ · ✗✗ · ✗
I need to update the version number in the `project/version.txt` file from `1.2.3` to `1.2.4` and also add a new release note at the bottom of the file. Can you make those changes for me?filesystem/edit_file ✗ · ✗✗ · ✗
Could you create the necessary folders for my new project? I need a structure with `project_root/data/raw`, `project_root/data/processed`, and `project_root/notebooks`—make sure all parent directories exist, even if they’re empty.filesystem/create_directory ✓ · ✓✓ · ✓
What files and folders are directly inside the `projects/webapp` folder?filesystem/list_directory ✓ · ✓✓ · ✓
Could you show me all the files and folders in my 'Documents' directory, including their sizes, sorted by size so I can see what’s taking up the most space?filesystem/list_directory_with_sizes ✗ · ✗✗ · ✗
Can you show me a structured breakdown of all the files and folders inside the `/projects/2023/reports/` directory, including subdirectories? I need to visualize the hierarchy to understand the layout before I start working on it.filesystem/directory_tree ✓ · ✓✓ · ✓
Could you move the file 'report_2023_q3.pdf' from '/documents/finance/quarterly' to '/documents/finance/archives'?filesystem/move_file ✓ · ✗✓ · ✓
Can you find all the `.md` files in the `docs` and `projects` directories, but exclude any in the `temp` folder?filesystem/search_files ✗ · ✗✓ · ✓
Can you show me the size, last modified date, and permissions for the file `/projects/report_v2/data.csv` without opening it?filesystem/get_file_info ✓ · ✓✓ · ✓
Which directories is this server allowed to access? I want to know where I can look before opening any files.filesystem/list_allowed_directories ✓ · ✓✓ · ✓
I need to add several new locations to our system, including 'Central Park' (type: Park) with observations like 'opened in 1857', 'area: 843 acres', and 'managed by NYC Parks', and 'Times Square' (type: Landmark) with details such as 'famous for neon lights', 'annual visitor count: 40 million', and 'hosts NYE celebrations'. Please create these entities and their observations at once.memory/create_entities ✓ · ✓✓ · ✓
I need to establish that the company 'TechSolutions Inc.' was acquired by 'GiantCorp' in 2022, and also link 'Jane Doe' as the CEO of 'TechSolutions Inc.' before the acquisition.memory/create_relations ✗ · ✗✗ · ✗
I just found that the 'New York City Marathon 2023' event had a record-breaking finish time of 2:01:39 set by Kelvin Kiptum, and I'd like to add this detail to the event's existing records in our knowledge base.memory/add_observations ✗ · ✗✓ · ✓
I need to remove all outdated product listings from our inventory system, specifically the items named 'Widget Pro 2023', 'SmartGadget X', and 'EcoBulb 3000' along with any related connections to suppliers or categories.memory/delete_entities ✓ · ✗✓ · ✓
I need to remove the outdated inventory counts from the 'Warehouse_A' entity, specifically the observations dated '2023-10-15' and '2023-10-18' where the stock levels were recorded as 150 units for Product_X and 85 units for Product_Y. Can you handle that?memory/delete_observations ✓ · ✗✓ · ✗
I need to remove the 'manages' relationship between the department 'Engineering' and the project 'API Overhaul', as well as the 'depends_on' link between 'Frontend' and 'Backend' services. Could you handle that for me?memory/delete_relations ✓ · ✓✓ · ✓
Show me the complete list of all entities and their relationships in the knowledge graph, including all properties and connections between them.memory/read_graph ✓ · ✓✓ · ✓
Can you find all entities related to the '2023 Q3 financial performance review' where the document mentions 'revenue growth' and includes the term 'North America' in the observations?memory/search_nodes ✓ · ✓✓ · ✓
I need to look up the details for the entities named 'Apple Inc.', 'Elon Musk', and 'Tesla Model S' in our knowledge graph—can you fetch those specific nodes for me?memory/open_nodes ✓ · ✓✓ · ✓
Can you just repeat back the exact text I sent: 'Please confirm the order details: customer ID 12345, product XYZ-789, quantity 2, and shipping address 123 Main St, Anytown, CA 90210'?everything/echo ✓ · ✓✓ · ✓
Show me an example error message with annotations so I can see how content metadata looks.everything/get-annotated-message ✓ · ✓✓ · ✓
I'm having trouble with the server configuration and need to check all the environment variables to see if anything is misconfigured. Could you show me the current settings, especially anything related to database connections or API keys?everything/get-env ✓ · ✓✓ · ✓
Can you show me the region 'ap-southeast-1' and confirm what the Mcp-Param-Region header was when this request was made?everything/get-header-params ✓ · ✓✓ · ✓
Give me 5 links to the sample resources this server provides.everything/get-resource-links ✓ · ✓✓ · ✓
I need to fetch the text content for the resource with ID 42 so I can process it further in my application workflow.everything/get-resource-reference ✓ · ✓✓ · ✓
Give me the weather for Chicago as structured data that I can validate against a schema.everything/get-structured-content ✓ · ✓✓ · ✓
What is the total when I combine the values 15.75 and 22.30?everything/get-sum ✓ · ✓✓ · ✓
Can you show me a tiny version of the MCP logo for my website header?everything/get-tiny-image ✓ · ✓✓ · ✓
Can you compress the latest README from the modelcontextprotocol/servers repo and save it as a downloadable file named 'docs-latest.md.gz' so I can include it in my deployment package?everything/gzip-file-as-resource ✓ · ✓✓ · ✓
Announce to connected clients that the prompts list has changed.everything/trigger-list-changed ✓ · ✓✓ · ✓
Make the server send a burst of log messages at different levels so I can test my log viewer.everything/trigger-log-messages ✓ · ✓✓ · ✓
I need to simulate a long-running data processing task that takes about 15 seconds to complete, with 8 distinct progress steps so I can visualize how the system updates in real-time.everything/trigger-long-running-operation ✓ · ✓✓ · ✓
Hey, I just updated the content for the user profile at `users://profiles/12345`—can you let all subscribers know it’s changed?everything/trigger-resource-update ✓ · ✓✓ · ✓
I need to turn off the simulated logging for this session since it's making the debug output too noisy and interfering with my testing of the new API calls.everything/toggle-simulated-logging ✓ · ✓✓ · ✓
I need to temporarily pause all simulated subscription updates for the `/api/v1/orders` resource so our frontend can catch up with the latest changes without flooding the UI.everything/toggle-subscriber-updates ✓ · ✓✓ · ✗
I'm trying to design a new workflow for our customer support team that involves multiple steps—first triaging issues, then escalating to specialists, and finally following up—but I'm not entirely sure how to structure it yet. Can you help me break this down and refine it as I think through the details?thinking/sequentialthinking ✓ · ✓✓ · ✓
What time is it right now in Sydney, Australia?time/get_current_time ✓ · ✓✓ · ✓
What time is it in Sydney, Australia right now if it's 3:45 PM in Madrid?time/convert_time ✓ · ✓✓ · ✓
Can you grab the latest news article from https://www.bbc.com/news/technology and summarize the main points for me? I'd like to see the most important details from the first 1000 characters of the content.fetch/fetch ✓ · ✓✓ · ✓

How this was measured

servers: npx -y @modelcontextprotocol/server-filesystem@2.1.0 . (secure-filesystem-server 2.1.0), npx -y @modelcontextprotocol/server-memory@2.0.1 (memory-server 2.0.1), npx -y @modelcontextprotocol/server-everything@2.1.0 (mcp-servers/everything 2.1.0), npx -y @modelcontextprotocol/server-sequential-thinking@2.0.0 (sequential-thinking-server 2.0.0), uvx mcp-server-time==2026.10.28 (mcp-time 2026.10.28), uvx mcp-server-fetch==2026.10.28 (mcp-fetch 2026.10.28)