Slack's MCP server vs the CLI: what an agent spends

We gave Claude Code the same seven Slack tasks through Slack's hosted MCP server and through this CLI, 35 runs each. With the changes described below, the CLI answered every task correctly at a third less cost per task.

33% lower

mean cost per task: $0.033 with the CLI, $0.050 with MCP

60% less

tool output read by the model: 4,144 vs 10,466 characters per task

35 / 35

tasks answered correctly by each arm in the final run

Final run, 7 tasks × 5 repeats per arm, Claude Sonnet 5 in Claude Code. Costs are the total_cost_usd Claude Code reports for each session.

This is our own benchmark of our own tool, on one workspace. The harness is in the repository so you can run it against yours; the caveats say where the numbers are weak.

What was compared

MCP arm

Slack's hosted MCP server at mcp.slack.com, connected with the OAuth client from Slack's own Claude Code plugin. Its read and search tools are available; its write tools are denied.

CLI arm

The slack CLI and the skill that slack skills add installs. The agent runs it from a shell. Commands that write to Slack are denied.

Method

Results

Median cost per run by task, final run Search for an update, extract facts: CLI $0.049, MCP $0.054. Answer from a support thread: CLI $0.024, MCP $0.127. Look up a person by job title: CLI $0.020, MCP $0.026. Read a message from its link: CLI $0.014, MCP $0.019. Two-hop thread question: CLI $0.032, MCP $0.066. Read a bot deployment notice: CLI $0.045, MCP $0.036. Summarize a window of a channel: CLI $0.024, MCP $0.026. $0.00 $0.04 $0.08 $0.12 Search for an update, extract facts: CLI $0.049, MCP $0.054 Search for an update, extract facts $0.049 $0.054 Answer from a support thread: CLI $0.024, MCP $0.127 Answer from a support thread $0.024 $0.127 Look up a person by job title: CLI $0.020, MCP $0.026 Look up a person by job title $0.020 $0.026 Read a message from its link: CLI $0.014, MCP $0.019 Read a message from its link $0.014 $0.019 Two-hop thread question: CLI $0.032, MCP $0.066 Two-hop thread question $0.032 $0.066 Read a bot deployment notice: CLI $0.045, MCP $0.036 Read a bot deployment notice $0.045 $0.036 Summarize a window of a channel: CLI $0.024, MCP $0.026 Summarize a window of a channel $0.024 $0.026
Median cost of 5 runs per task and arm.
Task (median of 5) CLI cost MCP cost CLI context MCP context CLI turns MCP turns
Search for an update, extract facts $0.049 $0.054 101,872 81,134 7 5
Answer from a support thread $0.024 $0.127 62,572 72,362 5 4
Look up a person by job title $0.020 $0.026 61,402 60,577 5 4
Read a message from its link $0.014 $0.019 45,660 44,360 4 3
Two-hop thread question $0.032 $0.066 78,937 118,788 6 6
Read a bot deployment notice $0.045 $0.036 71,228 67,338 5 4
Summarize a window of a channel $0.024 $0.026 47,050 68,594 4 4

The CLI costs less on six of seven tasks. MCP costs less reading the bot's deployment notice: the notice keeps some fields only in its attachment, and the CLI skill tells the agent to read such a message unfiltered.

Across all tasks

The CLI as released in 0.3.0 cost $0.057 per task, more than MCP's $0.049 in the same run. The changes in 0.4.0, described below, brought it to $0.033.

Mean per task CLI 0.3.0 CLI 0.4.0 Slack MCP
Cost $0.057 $0.033 $0.050
Context tokens 109,876 66,827 77,037
Output tokens 987 617 754
Tool output (characters) 10,553 4,144 10,466
Model turns 8.0 5.1 4.5
Tool calls that errored (all 35 runs) 15 0 4
Passed 35 / 35 35 / 35 35 / 35

CLI 0.3.0 is from the first run; the other columns are from the final run. Context tokens count everything the model read across its turns, cached or not. Fixed overhead is the same for both arms: the "OK" baseline used 13,546 context tokens with the CLI and 13,726 with MCP.

Why the CLI reads less

Most of an agent's Slack cost is the tool output it reads back. In 0.4.0:

MCP's search tools produced 84% of its tool output in the final run, as formatted text the agent cannot trim. In exchange, MCP messages name their authors; the CLI returns user ids.

Caveats

Run it on your workspace

The harness is evals/ab in the repository. Authorize the MCP arm once, sign in with the CLI, and write a task file with prompts and the facts each answer must contain:

# Once: authenticate the MCP arm with /mcp inside this session
$ claude --strict-mcp-config --mcp-config evals/ab/slack-mcp.json
$ slack login
$ node evals/ab/run.ts --tasks evals/ab/tasks/mine.local.json --repeats 5
$ node evals/ab/report.ts evals/ab/results/<run>/runs.jsonl

Files named *.local.json and all results are ignored by git, because tasks and transcripts contain your workspace's messages. The report prints medians per task and arm and counts denied commands and calls to the other arm's tools, so a skewed run is visible.