CoolFace
Datasetpublic

kshitijthakkar/mcp-server-bench-gradio-optimized

๐Ÿ”ฌ Gradio vs FastMCP Benchmark Report Generated: 2026-03-02T13:04:10.857215 Total scenarios: 48 Executive Summary echo: Fastmcp wins (96.6 vs 176.5 RPS, 1.83x difference) Gradio best config: concurrency_limit=nan fibonacci: Fastmcp wins (43.5 vs 57.1 RPS, 1.31x difference) Gradio best config: concurrency_limit=nan async_sleep: Gradio wins (93.1 vs 80.2 RPS, 1.16x difference) Gradio best config: concurrency_limit=nan payload_echo: Fastmcp wins (82.5 vs 164.8โ€ฆ See the full description on the dataset page: https://huggingface.co/datasets/kshitijthakkar/mcp-server-bench-gradio-optimized.

sourceHugging Facemitupdated 7mo agoView on Hugging Face
0likes50downloads
Dataset Card

๐Ÿ”ฌ Gradio vs FastMCP Benchmark Report

Generated: 2026-03-02T13:04:10.857215

Total scenarios: 48

Executive Summary

  • โ€”echo: Fastmcp wins (96.6 vs 176.5 RPS, 1.83x difference)
  • โ€”Gradio best config: concurrency_limit=nan
  • โ€”fibonacci: Fastmcp wins (43.5 vs 57.1 RPS, 1.31x difference)
  • โ€”Gradio best config: concurrency_limit=nan
  • โ€”async_sleep: Gradio wins (93.1 vs 80.2 RPS, 1.16x difference)
  • โ€”Gradio best config: concurrency_limit=nan
  • โ€”payload_echo: Fastmcp wins (82.5 vs 164.8 RPS, 2.0x difference)
  • โ€”Gradio best config: concurrency_limit=nan

Throughput (Requests/Second)

('fastmcp', 'http_api')('fastmcp', 'mcp_streamable')('gradio', 'http_api')('gradio', 'mcp_streamable')
('async_sleep', 1)15.7614.418.5414.23
('async_sleep', 10)80.2156.4756.7993.11
('async_sleep', 25)42.140.1337.456.76
('echo', 1)176.572.3711.1672.12
('echo', 10)79.8443.3349.3796.56
('echo', 25)62.539.4437.8770.43
('fibonacci', 1)45.3935.9411.9135.18
('fibonacci', 10)57.0847.9337.3943.5
('fibonacci', 25)51.1935.9432.6743.21
('payload_echo', 1)164.8480.111.6270.56
('payload_echo', 10)91.2550.5349.9382.54
('payload_echo', 25)66.8441.5737.261.16

Latency p50 (ms)

('fastmcp', 'http_api')('fastmcp', 'mcp_streamable')('gradio', 'http_api')('gradio', 'mcp_streamable')
('async_sleep', 1)62.59964.32112.29675.659
('async_sleep', 10)105.196159.981155.612102.057
('async_sleep', 25)430.916528.933546.454337.852
('echo', 1)5.00513.005101.50313.037
('echo', 10)102.519201.01177.59895.355
('echo', 25)298.811529.175549.508275.746
('fibonacci', 1)20.99826.53566.87527.521
('fibonacci', 10)166.862189.789266.299226.342
('fibonacci', 25)463.179591.419639.153573.479
('payload_echo', 1)5.9981281.06713.662
('payload_echo', 10)95.531175.658175.569110.116
('payload_echo', 25)336.98514.13557.964321.014

Gradio concurrency_limit Scaling

How does Gradio's throughput change as concurrency_limit increases?

Protocol Overhead: HTTP API vs MCP

Comparing latency of the same tool called via REST API vs MCP protocol:

http_apimcp_streamable
('fastmcp', 'async_sleep')199.57251.078
('fastmcp', 'echo')135.445247.73
('fastmcp', 'fibonacci')217.013269.248
('fastmcp', 'payload_echo')146.17233.929
('gradio', 'async_sleep')271.454171.856
('gradio', 'echo')276.203128.046
('gradio', 'fibonacci')324.109275.781
('gradio', 'payload_echo')271.533148.264

Error Rates

All scenarios completed with 0% error rate. โœ…

Resource Usage

server('mean', 'avg_cpu_pct')('mean', 'avg_memory_mb')('mean', 'peak_memory_mb')('max', 'avg_cpu_pct')('max', 'avg_memory_mb')('max', 'peak_memory_mb')
fastmcp06.144586.1445806.156.15
gradio06.144176.1441706.156.15

Benchmark Charts

[image]

[image]

[image]

[image]

Methodology

  • โ€”Both servers use identical tool implementations (imported from shared_tools.py)
  • โ€”Each scenario runs in an isolated server subprocess
  • โ€”Warmup period excluded from measurements
  • โ€”Load generated by async httpx workers (not external tools)
  • โ€”MCP tests use full protocol lifecycle (initialize โ†’ call_tool)
  • โ€”System metrics sampled every 1s via psutil

Benchmarks generated by [mcp-server-bench](https://github.com/Mandark-droid/mcp-server-bench)