[{"data":1,"prerenderedAt":765},["ShallowReactive",2],{"blog-mcp-reference-servers-en":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":13,"about":20,"sources":24,"cover":61,"og":62,"expertise":63,"locales":64,"lang":65,"title":68,"description":69,"coverAlt":70,"metaTitle":71,"takeaways":72,"faq":78,"toc":91,"blocks":116,"others":496},"mcp-reference-servers","2026-09-25",9,"agents",[9,10,11,12],"MCP","Reference servers","Tool protocol","Server SDKs",[14,15,16,17,18,19],"mcp reference servers","modelcontextprotocol servers github","write an mcp server","mcp server examples","mcp server sdk","mcp server security",[21],{"name":22,"url":23},"Model Context Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_Context_Protocol",[25,28,31,34,37,40,43,46,49,52,55,58],{"title":26,"url":27},"MCP reference servers repository","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers",{"title":29,"url":30},"Repository README and server list","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FREADME.md",{"title":32,"url":33},"Security policy","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FSECURITY.md",{"title":35,"url":36},"Release process and trusted publishing","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FRELEASING.md",{"title":38,"url":39},"Filesystem server README","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002Fsrc\u002Ffilesystem\u002FREADME.md",{"title":41,"url":42},"Everything server feature list","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002Fsrc\u002Feverything\u002Fdocs\u002Ffeatures.md",{"title":44,"url":45},"MCP Registry","https:\u002F\u002Fregistry.modelcontextprotocol.io\u002F",{"title":47,"url":48},"Archived reference servers","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers-archived",{"title":50,"url":51},"Model Context Protocol documentation","https:\u002F\u002Fmodelcontextprotocol.io\u002F",{"title":53,"url":54},"TypeScript MCP SDK","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Ftypescript-sdk",{"title":56,"url":57},"Python MCP SDK","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fpython-sdk",{"title":59,"url":60},"FastMCP on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Ffastmcp\u002F","\u002Fimages\u002Fblog\u002Fmcp-reference-servers\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fmcp-reference-servers\u002Fog.jpg","ai-engineer",[65,66,67],"en","de","hu","MCP reference servers: what they demonstrate and what they omit","A review of modelcontextprotocol\u002Fservers: seven reference servers, what each one teaches, the SDK versions behind them and why none of them should reach production.","Seven identical small boxes in a row on a shelf, and a closed barrier before a large box.","MCP reference servers: what they demonstrate · Balázs Csorba",[73,74,75,76,77],"Seven reference servers sit in src\u002F, four in TypeScript and three in Python, and the README calls them educational examples rather than production code.","The Python servers still require mcp >=1.29.0 and \u003C2 while the Python SDK has been at 2.3.0 since 2 October 2026, so copying them teaches the 1.x API.","The repository is out of scope for vulnerability reports: SECURITY.md sends findings to the SDK repositories instead.","Packages are published from CI with OIDC trusted publishing and provenance attestations, with no registry tokens anywhere in the release path.","The filesystem server's path allowlist is the only sandbox in the collection, and the client can replace it at runtime through Roots.",[79,82,85,88],{"q":80,"a":81},"Are the MCP reference servers safe to run in production?","No, and the repository says so itself. The README calls them educational examples that are not production-ready, and SECURITY.md states that the repository is not eligible for vulnerability reporting at all. Run them locally to learn or to test a client, and put a maintained server behind any real account.",{"q":83,"a":84},"Which reference server should I read first?","Filesystem if access control is the question, because its directory allowlist and Roots handling are the most reusable design in the collection. Everything if the question is what the protocol can do: it implements sampling, elicitation, progress, structured output and tasks alongside the three core primitives.",{"q":86,"a":87},"Where did the GitHub, Slack and PostgreSQL servers go?","To modelcontextprotocol\u002Fservers-archived. Thirteen servers were retired from the reference collection; Brave Search was replaced by a server Brave maintains itself, and the Slack server is now maintained by Zencoder.",{"q":89,"a":90},"How is this repository different from the MCP Registry?","The registry is a catalogue of published servers that anyone can register, so it is where a reader looks for a server to run. This repository holds only the seven implementations kept by the MCP steering group, and the README points registry visitors away from it.",[92,95,98,101,104,107,110,113],{"id":93,"title":94},"what-it-is","What it is",{"id":96,"title":97},"repository-layout","The repository, server by server",{"id":99,"title":100},"how-it-works","How a server actually runs",{"id":102,"title":103},"getting-started","Getting started",{"id":105,"title":106},"security-posture","Security posture",{"id":108,"title":109},"where-it-shingles","Where it falls short",{"id":111,"title":112},"verdict","Verdict",{"id":114,"title":115},"sources","Sources",[117,121,124,127,143,161,162,168,238,241,245,248,294,297,298,301,307,310,311,314,316,331,333,352,353,356,368,385,386,389,433,436,437,440,452,456,457],{"type":118,"content":119},"paragraph",[120],"modelcontextprotocol\u002Fservers is the reference collection for the Model Context Protocol: seven small servers kept by the MCP steering group, each written to demonstrate one part of the protocol rather than to do a job well. Read as a product it is teaching material with an unusually candid README, and the position taken here is that it should be read and run locally but never deployed: the repository states outright that the servers are not production-ready, and its security policy refuses vulnerability reports against it. What it does well is show exactly what a server has to implement, in working code, from the people who wrote the specification.",{"type":118,"content":122},[123],"It sits between the specification on modelcontextprotocol.io and the ten official SDKs, and it does not compete with the MCP Registry, where published servers for actual use are listed. Nothing here replaces a search index, a browser tool or a ticketing integration. The collection replaced an earlier grab-bag of one-off examples, most of which now live in a separate archive repository and still turn up in old tutorials.",{"type":125,"level":126,"id":93,"text":94},"heading",2,{"type":118,"content":128},[129,130,134,135,138,139,142],"One npm workspace holding seven packages under ",{"tag":131,"children":132},"code",[133],"src\u002F",", published on npm as ",{"tag":131,"children":136},[137],"@modelcontextprotocol\u002Fserver-*"," and on PyPI as ",{"tag":131,"children":140},[141],"mcp-server-*",". Four servers are TypeScript and three are Python, and each isolates a different protocol feature: access control, prompts and resources, a knowledge graph, a tool that rewrites its own output, web retrieval, repository operations, time zones.",{"type":144,"ordered":145,"items":146},"list",false,[147,149,151,153,155,157,159],[148],"About 91,100 stars and 11,800 forks in early October 2026, with 4,194 commits on main.",[150],"Seven reference servers in src\u002F: everything, fetch, filesystem, git, memory, sequentialthinking and time.",[152],"Thirteen retired servers, including GitHub, Slack, PostgreSQL, SQLite, Puppeteer and Brave Search, moved to servers-archived; the Brave one was replaced by a server Brave maintains itself.",[154],"The README now sends anyone looking for a server to the MCP Registry and keeps the repository for the reference implementations only.",[156],"Licence is Apache-2.0 for new contributions with earlier code still under MIT, as the LICENSE file explains.",[158],"Server packages use calendar versions: 2026.8.31 for the TypeScript packages, 2026.8.18 for the Python ones.",[160],"Packages are published from a gated CI workflow by OIDC trusted publishing with provenance attestations, and the release path contains no registry tokens.",{"type":125,"level":126,"id":96,"text":97},{"type":118,"content":163},[164,165,167],"The layout is deliberately flat: one directory per server under ",{"tag":131,"children":166},[133],", a root package.json that wires them up as npm workspaces, and a handful of operational documents at the top level. Reading a single server directory from top to bottom is the fastest way to learn the protocol, because each one is small enough to finish in one sitting.",{"type":169,"head":170,"rows":179},"table",[171,173,175,177],[172],"Server",[174],"Language",[176],"What it demonstrates",[178],"Published as",[180,189,198,206,214,222,230],[181,183,185,187],[182],"everything",[184],"TypeScript",[186],"Prompts, tools, resources, sampling, elicitation, progress, logging and tasks",[188],"@modelcontextprotocol\u002Fserver-everything",[190,192,194,196],[191],"fetch",[193],"Python",[195],"URL retrieval, readability extraction, markdown conversion, robots.txt",[197],"mcp-server-fetch",[199,201,202,204],[200],"filesystem",[184],[203],"Path allowlisting and directory control through Roots",[205],"@modelcontextprotocol\u002Fserver-filesystem",[207,209,210,212],[208],"git",[193],[211],"Twelve repository tools: status, diff, log, commit, branch, show",[213],"mcp-server-git",[215,217,218,220],[216],"memory",[184],[219],"Entities, relations and observations held as a knowledge graph",[221],"@modelcontextprotocol\u002Fserver-memory",[223,225,226,228],[224],"sequentialthinking",[184],[227],"One tool that revises earlier steps in its own reasoning",[229],"@modelcontextprotocol\u002Fserver-sequential-thinking",[231,233,234,236],[232],"time",[193],[235],"get_current_time and convert_time across IANA zones",[237],"mcp-server-time",{"type":118,"content":239},[240],"Beside src\u002F, the root holds ADDITIONAL.md for community frameworks and clients, RELEASING.md for how packages reach the registries, SECURITY.md, CLAUDE.md, a .mcp.json used by the repository's own tooling, and a scripts directory. The everything server is the exception to the flatness: it carries a docs directory with architecture, feature and extension-point notes, and it behaves more like a protocol conformance fixture than like a template.",{"type":125,"level":242,"id":243,"text":244},3,"sdks-and-languages","SDKs and language versions",{"type":118,"content":246},[247],"The README lists ten official SDKs — C#, Go, Java, Kotlin, PHP, Python, Ruby, Rust, Swift and TypeScript — and states that the reference servers are built on them. In practice the TypeScript packages are current while the Python packages sit one major version behind, and the time server's README says so in a single line.",{"type":169,"head":249,"rows":258},[250,252,254,256],[251],"Package",[253],"Version",[255],"Published",[257],"Constraint",[259,268,277,285],[260,262,264,266],[261],"@modelcontextprotocol\u002Fsdk, TypeScript",[263],"1.32.1",[265],"5 October 2026",[267],"Server packages pin it as ^1.x",[269,271,273,275],[270],"mcp, Python",[272],"2.3.0",[274],"2 October 2026",[276],"The Python servers require \u003C2",[278,279,281,283],[221],[280],"2026.8.31",[282],"31 August 2026",[284],"@modelcontextprotocol\u002Fsdk ^1.30.0",[286,288,290,292],[287],"mcp-server-git, fetch and time",[289],"2026.8.18",[291],"18 August 2026",[293],"mcp >=1.29.0 and \u003C2",{"type":118,"content":295},[296],"The time server documents the reason for the gap plainly: SDK 2.0 renamed the APIs it uses and the port is in progress. That is the honest cost of a reference collection — the examples track the specification closely, and the Python half tracks the SDK majors less closely. Anyone copying a Python server today is reading working code written against the 1.x API, which is fine for study and a trap for new work.",{"type":125,"level":126,"id":99,"text":100},{"type":118,"content":299},[300],"A client configured with a stdio server spawns it as a child process at startup and speaks newline-delimited JSON-RPC over stdin and stdout. Nothing listens on a port. During the initialize handshake both sides declare capabilities: the server announces which tools, resources and prompts it implements, the client announces whether it accepts roots, sampling and elicitation, and everything after that is a request, a response or a notification.",{"type":302,"src":303,"alt":304,"wide":305,"caption":306},"image","\u002Fimages\u002Fblog\u002Fmcp-reference-servers\u002Fdiagram-15.webp","How a reference server runs At the top a box holds the MCP client, such as Claude Desktop, an IDE or an agent. A solid arrow labelled initialize and then JSON-RPC over stdio points down to a wide box for the reference server, a child process started from an npm or PyPI package. A dashed arrow returns from the server to the client, labelled roots and list_changed, because the client supplies the directory allowlist. Three boxes hang below the server: tools, which the model calls; resources, which the application reads at a URI; and prompts, which the user picks. A band at the bottom states that the process runs with the privileges of the user who started it and that the allowlist is a path check rather than a sandbox.",true,"Capability negotiation at initialize decides what each side may ask for; the three primitives below are what the model and the application actually see.",{"type":118,"content":308},[309],"The three primitives are not interchangeable. A tool is something the model decides to call, a resource is something exposed at a URI for the application or the user, and a prompt is a template the user selects. The everything server implements all three plus sampling, elicitation, progress notifications, structured tool output and the newer task extension, which makes it the one directory worth reading when a protocol feature is unclear.",{"type":125,"level":126,"id":102,"text":103},{"type":118,"content":312},[313],"Nothing needs compiling. A server is a package on npm or PyPI, and the configuration below is the whole installation: the client runs the command, the command answers over stdout, and the model is handed a tool list.",{"type":131,"code":315},"{\n  \"mcpServers\": {\n    \"filesystem\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \"\u002Fpath\u002Fto\u002Fallowed\u002Ffiles\"]\n    },\n    \"git\": {\n      \"command\": \"uvx\",\n      \"args\": [\"mcp-server-git\", \"--repository\", \"\u002Fpath\u002Fto\u002Frepo\"]\n    },\n    \"memory\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@modelcontextprotocol\u002Fserver-memory\"]\n    }\n  }\n}",{"type":118,"content":317},[318,319,322,323,326,327,330],"Writing one is not much harder. The TypeScript SDK exposes a server object with ",{"tag":131,"children":320},[321],"registerTool",", ",{"tag":131,"children":324},[325],"registerResource"," and ",{"tag":131,"children":328},[329],"registerPrompt",", plus one transport. The snippet below is a complete server with a single tool, and it is the same shape as the filesystem and memory examples.",{"type":131,"code":332},"import { readFile } from \"node:fs\u002Fpromises\";\nimport { McpServer } from \"@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fstdio.js\";\nimport { z } from \"zod\";\n\nconst server = new McpServer({ name: \"wordcount\", version: \"0.1.0\" });\n\nserver.registerTool(\n  \"count_words\",\n  {\n    title: \"Count words\",\n    description: \"Count the words in a UTF-8 text file\",\n    inputSchema: { path: z.string() },\n  },\n  async ({ path }) => {\n    const words = (await readFile(path, \"utf8\")).split(\u002F\\s+\u002F).filter(Boolean).length;\n    return { content: [{ type: \"text\", text: String(words) }] };\n  },\n);\n\nawait server.connect(new StdioServerTransport());",{"type":334,"variant":335,"title":336,"body":337},"callout","warn","Pin the package before you trust it",[338],[339,340,343,344,347,348,351],"Every documented example uses ",{"tag":131,"children":341},[342],"npx -y"," or ",{"tag":131,"children":345},[346],"uvx",", which resolve the newest version on each start: the code that runs is whatever the registry served that morning. Pin the version, read the changelog when you bump it, and remember that a stdio server executes as your own user with access to whatever the allowlist admits. Windows needs ",{"tag":131,"children":349},[350],"cmd \u002Fc npx"," in front of the same command.",{"type":125,"level":126,"id":105,"text":106},{"type":118,"content":354},[355],"The collection is unusually explicit about what it is not. The README's warning block says the servers demonstrate features and SDK usage, that developers should evaluate their own security requirements, and that the servers are not production-ready. SECURITY.md then states that the repository is not eligible for vulnerability reporting at all, which is the clearest signal of the intended status: the SDKs are supported, the examples are not.",{"type":144,"ordered":145,"items":357},[358,360,362,364,366],[359],"Every server is a local child process holding the privileges of the user who started it, so a model's tool calls become file, network and repository operations inside that account.",[361],"The filesystem server is the only one with an access-control story: a directory allowlist set from command-line arguments or replaced at runtime by the client through Roots, and a path check is not a process sandbox.",[363],"The fetch server converts pages to markdown, respects robots.txt and exposes a configurable user-agent and proxy, which is as far as the collection goes on outbound network hygiene.",[365],"Memory persists a knowledge graph to a local JSON file with no authentication, and git writes to whichever repository path it is given; neither is meant to face a network.",[367],"Releases are manual workflow dispatch into a gated GitHub environment with a required reviewer, published to npm and PyPI with provenance attestations and without registry tokens.",{"type":334,"variant":369,"title":370,"body":371},"note","Before a server reaches a real account",[372],[373,374,379,380,384],"Read ",{"tag":375,"to":376,"children":377},"link","\u002Fblog\u002Fmcp-server-security-checklist",[378],"the MCP server security checklist"," first, and keep each tool narrow as the tools you copy start to grow. Transport is a separate question: the stateless pattern in ",{"tag":375,"to":381,"children":382},"\u002Fblog\u002Fmcp-2026-07-28-stateless-migration-guide",[383],"the stateless migration guide"," matters once a server leaves stdio.",{"type":125,"level":126,"id":108,"text":109},{"type":118,"content":387},[388],"Seven servers is a small sample and none of them is a service. There is no authentication model to copy, because stdio is local by construction and the HTTP routes in the everything server are development transports; there is no rate limiting, no support statement, no deployment story beyond a docker run in a README. The archived servers are still linked from years of tutorials, so a reader following an old guide can land in a repository that was deliberately moved. And the Python half of the collection lags the SDK it is supposed to demonstrate.",{"type":169,"head":390,"rows":398},[391,393,394,396],[392],"Option",[94],[395],"Support",[397],"Right for",[399,407,416,424],[400,401,403,405],[10],[402],"Seven steering-group examples under src\u002F",[404],"Community and the MCP steering group, with no vulnerability intake",[406],"Learning the protocol and writing your own server",[408,410,412,414],[409],"servers-archived",[411],"Thirteen retired examples, among them GitHub, Slack and PostgreSQL",[413],"Unmaintained here; Brave and Slack moved to their vendors",[415],"Reading history, not new configurations",[417,418,420,422],[44],[419],"Catalogue of published servers at registry.modelcontextprotocol.io",[421],"Per-server authors, with registration required",[423],"Finding a server to actually run",[425,427,429,431],[426],"FastMCP",[428],"Python framework for servers and clients, 4.0.11 on PyPI",[430],"The package maintainer",[432],"Shipping a server without touching protocol plumbing",{"type":118,"content":434},[435],"The honest comparison is not which of these four wins, but what each teaches. A framework gets a server running faster and hides the parts that change between specification versions. The registry gives you code somebody else wrote, with whatever review that author did. The reference servers are the only option where the source was written by the people who wrote the specification, and that is exactly why they are worth reading and not worth shipping.",{"type":125,"level":126,"id":111,"text":112},{"type":118,"content":438},[439],"Use it as documentation that executes. Recommended for anyone building an MCP server, for anyone auditing one, and for anyone who wants to see how tools, resources and sampling appear on the wire; not recommended as a base repository, as a source of production tools, or as a list of servers to add to a client.",{"type":144,"ordered":305,"items":441},[442,444,446,448,450],[443],"Read src\u002F before writing a server: filesystem for access control, everything for the full protocol surface, memory for a non-trivial tool design.",[445],"Run the reference servers locally to learn the protocol or to test a client, and treat their tool lists as fixtures rather than as a product.",[447],"Pin package versions in any configuration you keep, instead of the -y flag the README examples use.",[449],"Do not deploy a reference server to a shared account: no authentication, no rate limits and no vulnerability intake.",[451],"Send protocol findings to the SDK repositories, and use the registry rather than this repository when the goal is a server to run.",{"type":453,"content":454},"quote",[455],"The servers in this repository are intended as reference implementations to demonstrate MCP features and SDK usage. They are meant to serve as educational examples for developers building their own MCP servers, not as production-ready solutions.",{"type":125,"level":126,"id":114,"text":115},{"type":144,"ordered":305,"items":458},[459,463,466,469,472,475,478,481,484,487,490,493],[460],{"tag":461,"href":27,"children":462},"a",[26],[464],{"tag":461,"href":30,"children":465},[29],[467],{"tag":461,"href":33,"children":468},[32],[470],{"tag":461,"href":36,"children":471},[35],[473],{"tag":461,"href":39,"children":474},[38],[476],{"tag":461,"href":42,"children":477},[41],[479],{"tag":461,"href":45,"children":480},[44],[482],{"tag":461,"href":48,"children":483},[47],[485],{"tag":461,"href":51,"children":486},[50],[488],{"tag":461,"href":54,"children":489},[53],[491],{"tag":461,"href":57,"children":492},[56],[494],{"tag":461,"href":60,"children":495},[59],[497,553,626,696],{"slug":498,"published":499,"minutes":500,"category":7,"tags":501,"keywords":506,"about":517,"sources":525,"cover":547,"og":548,"expertise":63,"locales":549,"lang":65,"title":550,"description":551,"coverAlt":552},"agent-tool-design-descriptions-errors","2026-10-17",11,[502,503,504,9,505],"AI agents","Tool use","Function calling","Agent design",[507,508,509,510,511,512,513,514,515,516],"agent tool design","writing tool descriptions for llm","function calling best practices","tool use error handling","mcp tool design","tool calling is_error","how many tools should an agent have","tool search defer_loading","agent computer interface","llm tool schema design",[518,521,522],{"name":519,"url":520},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",{"name":22,"url":51},{"name":523,"url":524},"Poka-yoke","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPoka-yoke",[526,529,532,535,538,541,544],{"title":527,"url":528},"Anthropic Engineering: Writing effective tools for agents, with agents (Sep 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fwriting-tools-for-agents",{"title":530,"url":531},"Anthropic Engineering: Building effective agents (Dec 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fbuilding-effective-agents",{"title":533,"url":534},"Claude Platform Docs: Define tools","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fdefine-tools",{"title":536,"url":537},"Claude Platform Docs: Handle tool calls","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fhandle-tool-calls",{"title":539,"url":540},"Claude Platform Docs: Tool search tool","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Ftool-search-tool",{"title":542,"url":543},"Model Context Protocol specification 2025-11-25: Tools","https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-11-25\u002Fserver\u002Ftools",{"title":545,"url":546},"OpenAI API Docs: Function calling","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Ffunction-calling","\u002Fimages\u002Fblog\u002Fagent-tool-design-descriptions-errors\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fagent-tool-design-descriptions-errors\u002Fog.jpg",[65,66,67],"Designing tools for AI agents: names, descriptions, schemas and error messages","How to design agent tools that get picked and called correctly: task-shaped tools, descriptions, schemas, compact responses and errors a model can act on.","Three rectangular slots in a base, with a block of matching width lined up over the middle slot and two wrong-width blocks beside it.",{"slug":554,"published":499,"minutes":500,"category":7,"tags":555,"keywords":561,"about":574,"sources":584,"cover":620,"og":621,"expertise":63,"locales":622,"lang":65,"title":623,"description":624,"coverAlt":625},"coding-agents-legacy-codebase-migration",[556,557,558,559,560],"Legacy migration","Coding agents","Strangler fig","Testing","Code review",[562,563,564,565,566,567,568,569,570,571,572,573],"legacy code migration ai","coding agent legacy codebase","strangler fig pattern ai","characterization tests legacy code","ai code migration review","agent assisted refactoring","legacy modernization coding agent","differential testing migration","shadow traffic migration","ai code review gate","test harness before migration","llm code migration",[575,578,581],{"name":576,"url":577},"Legacy code","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLegacy_code",{"name":579,"url":580},"Characterization test","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCharacterization_test",{"name":582,"url":583},"Strangler fig pattern","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FStrangler_fig_pattern",[585,588,590,593,596,599,602,605,608,611,614,617],{"title":586,"url":587},"Martin Fowler: Strangler Fig (2024)","https:\u002F\u002Fmartinfowler.com\u002Fbliki\u002FStranglerFigApplication.html",{"title":589,"url":580},"Wikipedia: Characterization test",{"title":591,"url":592},"Google Research: Accelerating code migrations with AI (2024)","https:\u002F\u002Fresearch.google\u002Fblog\u002Faccelerating-code-migrations-with-ai\u002F",{"title":594,"url":595},"Ziftci et al.: Migrating Code At Scale With LLMs At Google (arXiv 2504.09691)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2504.09691",{"title":597,"url":598},"Anthropic: Effective harnesses for long-running agents (2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-harnesses-for-long-running-agents",{"title":600,"url":601},"Anthropic: Redesigning source control at Anthropic (2026)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fredesigning-source-control",{"title":603,"url":604},"METR: Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity","https:\u002F\u002Fmetr.org\u002Fblog\u002F2025-07-10-early-2025-ai-experienced-os-dev-study\u002F",{"title":606,"url":607},"Chand et al.: Why Industry Migrates and When It Trusts LLMs (ESEM 2026)","https:\u002F\u002Fdrops.dagstuhl.de\u002Fentities\u002Fdocument\u002F10.4230\u002FLIPIcs.ESEM.2026.85",{"title":609,"url":610},"Li et al.: Environment-in-the-Loop: Rethinking Code Migration with LLM-based Agents (arXiv 2602.09944)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2602.09944",{"title":612,"url":613},"AWS: Amazon Q Developer just reached a $260 million dollar milestone (2024)","https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fdevops\u002Famazon-q-developer-just-reached-a-260-million-dollar-milestone\u002F",{"title":615,"url":616},"OpenAI: Why SWE-bench Verified no longer measures frontier coding capabilities (2026)","https:\u002F\u002Fopenai.com\u002Findex\u002Fwhy-we-no-longer-evaluate-swe-bench-verified\u002F",{"title":618,"url":619},"GitHub Docs: About GitHub Copilot cloud agent","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Fconcepts\u002Fagents\u002Fcoding-agent\u002Fabout-coding-agent","\u002Fimages\u002Fblog\u002Fcoding-agents-legacy-codebase-migration\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcoding-agents-legacy-codebase-migration\u002Fog.jpg",[65,66,67],"Migrating a legacy codebase with coding agents: a strangler fig playbook","How to use coding agents on a legacy migration: characterization tests first, one seam per task, review gates and differential verification.","A stack of slabs with the top two replaced by fresh ones beside a seam and a check.",{"slug":627,"published":499,"minutes":628,"category":7,"tags":629,"keywords":633,"about":645,"sources":655,"cover":690,"og":691,"expertise":63,"locales":692,"lang":65,"title":693,"description":694,"coverAlt":695},"background-agents-async-pr-workflow",12,[557,630,631,560,632],"Pull requests","CI","Automation",[634,635,636,637,638,639,640,641,642,643,644],"background coding agent","async coding agent","cloud coding agent pull request","copilot coding agent limits","codex cloud tasks","claude code cloud sessions","jules coding agent limits","agent pull request review","coding agent sandbox","agent CI gating","cost per merged pull request",[646,649,652],{"name":647,"url":648},"Software agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_agent",{"name":650,"url":651},"Pull request","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDistributed_version_control",{"name":653,"url":654},"Continuous integration","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContinuous_integration",[656,657,660,663,666,669,672,675,678,681,684,687],{"title":618,"url":619},{"title":658,"url":659},"GitHub Docs: Risks and mitigations for Copilot cloud agent","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Fconcepts\u002Fagents\u002Fcloud-agent\u002Frisks-and-mitigations",{"title":661,"url":662},"OpenAI Developers: Codex cloud environments","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fcloud\u002Fenvironments",{"title":664,"url":665},"Anthropic: Use Claude Code in the cloud","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fclaude-code-on-the-web",{"title":667,"url":668},"Google Jules: Limits and plans","https:\u002F\u002Fjules.google\u002Fdocs\u002Fusage-limits\u002F",{"title":670,"url":671},"Google Jules: Getting started","https:\u002F\u002Fjules.google\u002Fdocs\u002F",{"title":673,"url":674},"GitHub Docs: About protected branches","https:\u002F\u002Fdocs.github.com\u002Fen\u002Frepositories\u002Fconfiguring-branches-and-merges-in-your-repository\u002Fmanaging-protected-branches\u002Fabout-protected-branches",{"title":676,"url":677},"GitHub Docs: Models and pricing for GitHub Copilot","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Freference\u002Fcopilot-billing\u002Fmodels-and-pricing",{"title":679,"url":680},"OpenAI Developers: Codex pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fpricing",{"title":682,"url":683},"Ehsani et al.: Where Do AI Coding Agents Fail? An Empirical Study of Failed Agentic Pull Requests in GitHub (MSR 2026, arXiv 2601.15195)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2601.15195",{"title":685,"url":686},"Peralta et al.: Why Are Agentic Pull Requests Merged or Rejected? An Empirical Study (MSR 2026, arXiv 2605.22534)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2605.22534",{"title":688,"url":689},"DORA: State of AI-assisted Software Development 2025","https:\u002F\u002Fdora.dev\u002Fdora-report-2025","\u002Fimages\u002Fblog\u002Fbackground-agents-async-pr-workflow\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fbackground-agents-async-pr-workflow\u002Fog.jpg",[65,66,67],"Background coding agents that open PRs: a practical async workflow","How async coding agents queue tasks, run in sandboxes, open draft PRs and pass CI. Provider limits, cost controls, review design and failure modes.","One card in a tray fanning out to five pads, all arrows leading to one page behind a gate.",{"slug":697,"published":698,"minutes":699,"category":7,"tags":700,"keywords":706,"about":718,"sources":726,"cover":759,"og":760,"expertise":63,"locales":761,"lang":65,"title":762,"description":763,"coverAlt":764},"context-rot-compaction-long-running-agents","2026-10-16",10,[701,702,703,704,705],"Context rot","Compaction","Context engineering","Long-running agents","Agent memory",[707,708,709,710,711,712,713,714,715,716,717],"context rot","context rot LLM","compaction AI agents","context engineering","long-running agents context window","Claude compaction API","context editing clear tool results","OpenAI responses compaction","lost in the middle LLM","agent context management","sub-agents context isolation",[719,722,725],{"name":720,"url":721},"Context window","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model#Context_window",{"name":723,"url":724},"Attention (machine learning)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAttention_(machine_learning)",{"name":519,"url":520},[727,730,733,736,739,741,744,747,750,753,756],{"title":728,"url":729},"Chroma: Context Rot: How Increasing Input Tokens Impacts LLM Performance (Jul 2025)","https:\u002F\u002Fresearch.trychroma.com\u002Fcontext-rot",{"title":731,"url":732},"Liu et al.: Lost in the Middle: How Language Models Use Long Contexts (2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2307.03172",{"title":734,"url":735},"Modarressi et al.: NoLiMa: Long-Context Evaluation Beyond Literal Matching (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.05167",{"title":737,"url":738},"Anthropic: Effective context engineering for AI agents (Sep 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-context-engineering-for-ai-agents",{"title":740,"url":598},"Anthropic: Effective harnesses for long-running agents (Nov 2025)",{"title":742,"url":743},"Claude API docs: Compaction at a token threshold","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcompaction-threshold",{"title":745,"url":746},"Claude API docs: Compaction on demand","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcompaction-on-demand",{"title":748,"url":749},"Claude API docs: Context editing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcontext-editing",{"title":751,"url":752},"Claude API docs: Memory tool","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fmemory-tool",{"title":754,"url":755},"OpenAI API docs: Compaction","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fcompaction",{"title":757,"url":758},"Cognition: Don't Build Multi-Agents","https:\u002F\u002Fcognition.ai\u002Fblog\u002Fdont-build-multi-agents","\u002Fimages\u002Fblog\u002Fcontext-rot-compaction-long-running-agents\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcontext-rot-compaction-long-running-agents\u002Fog.jpg",[65,66,67],"Context rot in long-running agents: clearing, compaction, memory and sub-agents","Why LLM accuracy drops as context grows, and how clearing tool results, compaction, notes and sub-agents keep long-running agents on track.","A small square press squeezing a tall stack of sheets into a short one, two notes branching off.",1792261155769]