Skip to main content
These demo samples are a free 20-task slice of the MCPMark dataset — a synthetic agentic-eval suite where an agent operates a real MCP (Model Context Protocol) tool server to complete grounded, verifiable tasks. The full dataset spans two domains; this demo ships 10 tasks from each:
  • Filesystem — the agent reads, correlates, and writes files through a filesystem MCP server. Demo world: travel_agent (Sorrentino Bespoke Travel).
  • GitHub — the agent drives a GitHub MCP server (commits, files, branches, issues, PRs, labels) against a snapshot of a real repository. Demo world: gif-for-cli (google/gif-for-cli).
Every task ships with its environment (the world the agent acts on), its task spec (prompt + verifier), and a full agent trajectory (chain-of-thought reasoning + tool calls) showing one successful solve.

Overview

Environment

Each domain contributes one world under its directory. A world bundles a reusable environment (env/), the tool schemas the agent may call (tools/), an environment descriptor (bundle.json), and a tasks/ folder where each task carries its spec, its verifier, and a reference trajectory.
Persona: Mia Sorrentino, a boutique travel planner. The agent works over her live working files.Contents:
  • 8 trips under trips/<TRIP_ID>/ — each with itinerary.md (depart/return dates, base currency), manifests.json (flight + hotel, ISO-8601 with TZ offsets), and a receipts/ subdir holding mixed-currency receipts (USD / EUR / GBP).
  • vendor_directory.csv — 60 vendors across multiple cities and service tiers.
  • crm_notes.md — client/account notes covering the last four months.
  • inbox/ — recent client emails (thank-you notes, refund requests, invoices, referrals).
Tasks require cross-file joins (email → vendor directory → receipts → itinerary), defensive parsing (currency tags, comma-bearing fields, timezone-aware dates), and exhaustive scans, then writing a structured answer file back to the filesystem root.
Repository: a snapshot of google/gif-for-cli (render GIFs/short videos as ASCII/256-color art in the terminal). Default branch master.Contents (materialised into the eval org by env/setup.py):
  • repo/ — the full source tree (33 tracked entries; 21 .py files under gif_for_cli/, plus tests/, docs/, setup.py, CI config) with real commit history.
  • issues.json — 20 issues.
  • pulls.json — 8 pull requests, several with distinct head branches (pr/36-tjni-pillow-10, pr/34-SASUPERNOVA-issue-33-pt1, …).
  • meta.json / world_profile.json — owner/repo/default-branch metadata and a structural profile of the tree.
Tasks require code archaeology (tracing a fix through commit history), provenance correlation (commit ↔ PR ↔ issue ↔ branch), and mutations (cutting branches, writing report files, opening PRs, applying labels) — all through the GitHub MCP tools.

Data

Sample

Filesystem — travel_agent (Sorrentino Bespoke Travel)GitHub — gif-for-cli (google/gif-for-cli)
Prompt:
The Aldridge family sent a thank-you note after their Paris trip (TRP-2025-001). I need the receipt files we can tie to vendors they actually name in that email, but only where we billed in the trip’s base currency during the on-trip window. Work only under trips/TRP-2025-001/receipts/. Read inbox/aldridge_thank_you.txt and trips/TRP-2025-001/itinerary.md for the rules below. A receipt’s vendor counts as thanked when either (a) the vendor’s exact Vendor: name from the receipt appears in the email body, or (b) the first whitespace-delimited token of that vendor name appears in the email body. Use the email body only. Keep a receipt only when all hold: (1) its Trip ID: is TRP-2025-001; (2) the vendor is thanked; (3) the receipt Date: is on/after the itinerary Depart date and on/before the Return date; (4) the receipt Currency: exactly matches the itinerary Base currency: line. Write matching paths to aldridge_eur_thanked_receipts.txt at the filesystem root: one relative path per line, sorted ascending, no header. Do not use python code. Do not modify existing files.
Why it’s hard: four AND-conditions, each grounded in a different file (email body, receipt header, itinerary). A naive substring match on the whole email (including the subject line) or a left-to-right field split picks up the wrong vendors; the date and currency gates must be applied with full precision.Grading (verification/verify.py): reads the written aldridge_eur_thanked_receipts.txt, compares the exact sorted path set against the inlined gold, and returns pass/fail.
Each assistant message carries reasoning_content (chain-of-thought) alongside its spoken message and tool calls. Reasoning is shown in italics below. This is the simplest demo task (an L1 single-commit count) so the full solve fits in one view.System:
You are an agent that completes tasks independently. Use the tools provided to you to complete the task to the best of your ability.
User:
Please execute the following task in my repository mcpmark-eval-synthetic-tasks/gif-for-cli: I’m auditing the scope of the commit that introduced the 256 foreground/background color display mode. Find the commit authored by Sean Hayes whose subject is exactly Added 256fgbg display mode. and determine how many Python files under the gif_for_cli/ package directory (paths starting with gif_for_cli/ and ending with .py) it modified. Do not count files in tests/. Write ANSWER.md on master containing exactly one line COUNT=<number>.
Step 1 — Locate the commit:The user wants the commit authored by Sean Hayes with subject exactly “Added 256fgbg display mode.” Let me list commits to find its SHA.
I’ll start by searching for the commit authored by Sean Hayes with the exact subject.
Tool result:
Step 2 — Inspect the commit diff:Found it — SHA 5f35ae5…. Now I need the per-file diff to count the .py files under gif_for_cli/, excluding tests/.
Tool result (files changed):
Counting paths that start with gif_for_cli/ and end with .py, excluding tests/: 6 files. The distractors — 10 total files changed, 9 Python files including tests — must not be counted.Step 3 — Write the answer:
Tool result: {"content": {"name": "ANSWER.md", "path": "ANSWER.md", ...}}Final answer:
Task completed. The commit 5f35ae5… authored by Sean Hayes (“Added 256fgbg display mode.”) modified 6 Python files under gif_for_cli/ (excluding tests/). Wrote COUNT=6 to ANSWER.md on master.
Every task is graded by a self-contained verify.py that inlines the gold value (it does not read any facts.json at grade time) and checks the agent’s effect on the world. For gif-for-cli_L06:
Filesystem verifiers read the file the agent was asked to write (e.g. aldridge_eur_thanked_receipts.txt) and compare the exact, sorted answer set against gold. GitHub verifiers re-query the live repo via the API (branch exists, file contents, PR title/body, labels) and assert each required effect. A task passes only if all checks hold.

Download

Browse on Hugging Face

View MCPMark files
This is a free 20-task sample. The full MCPMark suite spans both domains across dozens of worlds (627 filesystem tasks, 606 github tasks), each with deterministic verifiers and reference SFT trajectories — see the Full Dataset page.