[{"data":1,"prerenderedAt":1254},["ShallowReactive",2],{"page-\u002Fai\u002Fmcp":3,"navigation":875},{"collection":4,"page":5},"docs_en",{"id":6,"title":7,"body":8,"description":866,"extension":867,"meta":868,"navigation":869,"path":870,"rawbody":871,"seo":872,"stem":873,"__hash__":874},"docs_en\u002Fai\u002Fmcp.md","MCP server",{"type":9,"value":10,"toc":856},"minimark",[11,28,38,41,46,147,153,160,176,391,430,434,437,735,738,742,745,760,763,825,829,835,839,852],[12,13,14,15,22,23,27],"p",{},"This site runs a ",[16,17,21],"a",{"href":18,"rel":19},"https:\u002F\u002Fmodelcontextprotocol.io",[20],"nofollow","Model Context Protocol"," server. An assistant connected to it can search these docs, read any page, including the specification, and validate ",[24,25,26],"code",{},".well"," files with the same check the libraries use.",[29,30,36],"pre",{"className":31,"code":33,"language":34,"meta":35},[32],"language-text","https:\u002F\u002Fdocs.welldot.org\u002Fmcp\n","text","",[24,37,33],{"__ignoreMap":35},[12,39,40],{},"The server uses the Streamable HTTP transport, is stateless and needs no account or key.",[42,43,45],"h2",{"id":44},"tools","Tools",[47,48,49,65],"table",{},[50,51,52],"thead",{},[53,54,55,59,62],"tr",{},[56,57,58],"th",{},"Tool",[56,60,61],{},"Input",[56,63,64],{},"Returns",[66,67,68,89,116],"tbody",{},[53,69,70,76,86],{},[71,72,73],"td",{},[24,74,75],{},"search_docs",[71,77,78,81,82,85],{},[24,79,80],{},"query",", optional ",[24,83,84],{},"limit"," (default 10, at most 50)",[71,87,88],{},"The best matching sections, each with a path, URL and snippet.",[53,90,91,96,105],{},[71,92,93],{},[24,94,95],{},"get_page",[71,97,98,101,102],{},[24,99,100],{},"path",", for example ",[24,103,104],{},"\u002Fformat\u002Fspec\u002Fv2\u002Foverview",[71,106,107,108,111,112,115],{},"The page as Markdown. A trailing slash, ",[24,109,110],{},".md"," suffix or ",[24,113,114],{},"#anchor"," is ignored.",[53,117,118,123,137],{},[71,119,120],{},[24,121,122],{},"validate_well",[71,124,125,128,129,132,133,136],{},[24,126,127],{},"content"," (the file's text), optional ",[24,130,131],{},"warnings"," (default ",[24,134,135],{},"true",")",[71,138,139,142,143,146],{},[24,140,141],{},"{ valid: true, version, warnings }"," or ",[24,144,145],{},"{ valid: false, errors }",", with the JSON Schema URL.",[12,148,149,150,152],{},"The server also tells the assistant to validate every ",[24,151,26],{}," file it generates or edits.",[154,155,157,159],"h3",{"id":156},"validate_well-in-detail",[24,158,122],{}," in detail",[12,161,162,164,165,168,169,175],{},[24,163,122],{}," runs ",[24,166,167],{},"parseWell"," from ",[16,170,172],{"href":171},"\u002Fcore\u002Fguides\u002Fparsing-and-validating",[24,173,174],{},"@welldot\u002Fcore",", nothing more and nothing less. Errors come back with a path into the document:",[29,177,181],{"className":178,"code":179,"language":180,"meta":35,"style":35},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"valid\": false,\n  \"errors\": [\n    {\n      \"path\": \"well_screen[0].screen_slot\",\n      \"code\": \"invalid_type\",\n      \"message\": \"Required\"\n    },\n    { \"path\": \"fractures\", \"code\": \"invalid_type\", \"message\": \"Required\" }\n  ],\n  \"schema\": \"https:\u002F\u002Fwelldot.org\u002Fschema\u002Fv2\u002Fwell.schema.json\"\n}\n","json",[24,182,183,192,211,226,232,257,277,297,303,360,366,385],{"__ignoreMap":35},[184,185,188],"span",{"class":186,"line":187},"line",1,[184,189,191],{"class":190},"sMK4o","{\n",[184,193,195,198,202,205,208],{"class":186,"line":194},2,[184,196,197],{"class":190},"  \"",[184,199,201],{"class":200},"spNyl","valid",[184,203,204],{"class":190},"\"",[184,206,207],{"class":190},":",[184,209,210],{"class":190}," false,\n",[184,212,214,216,219,221,223],{"class":186,"line":213},3,[184,215,197],{"class":190},[184,217,218],{"class":200},"errors",[184,220,204],{"class":190},[184,222,207],{"class":190},[184,224,225],{"class":190}," [\n",[184,227,229],{"class":186,"line":228},4,[184,230,231],{"class":190},"    {\n",[184,233,235,238,241,243,245,248,252,254],{"class":186,"line":234},5,[184,236,237],{"class":190},"      \"",[184,239,100],{"class":240},"sBMFI",[184,242,204],{"class":190},[184,244,207],{"class":190},[184,246,247],{"class":190}," \"",[184,249,251],{"class":250},"sfazB","well_screen[0].screen_slot",[184,253,204],{"class":190},[184,255,256],{"class":190},",\n",[184,258,260,262,264,266,268,270,273,275],{"class":186,"line":259},6,[184,261,237],{"class":190},[184,263,24],{"class":240},[184,265,204],{"class":190},[184,267,207],{"class":190},[184,269,247],{"class":190},[184,271,272],{"class":250},"invalid_type",[184,274,204],{"class":190},[184,276,256],{"class":190},[184,278,280,282,285,287,289,291,294],{"class":186,"line":279},7,[184,281,237],{"class":190},[184,283,284],{"class":240},"message",[184,286,204],{"class":190},[184,288,207],{"class":190},[184,290,247],{"class":190},[184,292,293],{"class":250},"Required",[184,295,296],{"class":190},"\"\n",[184,298,300],{"class":186,"line":299},8,[184,301,302],{"class":190},"    },\n",[184,304,306,309,311,313,315,317,319,322,324,327,329,331,333,335,337,339,341,343,345,347,349,351,353,355,357],{"class":186,"line":305},9,[184,307,308],{"class":190},"    {",[184,310,247],{"class":190},[184,312,100],{"class":240},[184,314,204],{"class":190},[184,316,207],{"class":190},[184,318,247],{"class":190},[184,320,321],{"class":250},"fractures",[184,323,204],{"class":190},[184,325,326],{"class":190},",",[184,328,247],{"class":190},[184,330,24],{"class":240},[184,332,204],{"class":190},[184,334,207],{"class":190},[184,336,247],{"class":190},[184,338,272],{"class":250},[184,340,204],{"class":190},[184,342,326],{"class":190},[184,344,247],{"class":190},[184,346,284],{"class":240},[184,348,204],{"class":190},[184,350,207],{"class":190},[184,352,247],{"class":190},[184,354,293],{"class":250},[184,356,204],{"class":190},[184,358,359],{"class":190}," }\n",[184,361,363],{"class":186,"line":362},10,[184,364,365],{"class":190},"  ],\n",[184,367,369,371,374,376,378,380,383],{"class":186,"line":368},11,[184,370,197],{"class":190},[184,372,373],{"class":200},"schema",[184,375,204],{"class":190},[184,377,207],{"class":190},[184,379,247],{"class":190},[184,381,382],{"class":250},"https:\u002F\u002Fwelldot.org\u002Fschema\u002Fv2\u002Fwell.schema.json",[184,384,296],{"class":190},[184,386,388],{"class":186,"line":387},12,[184,389,390],{"class":190},"}\n",[392,393,394,402,408,423],"ul",{},[395,396,397,398,401],"li",{},"Non-JSON text, an empty string, a JSON array or an unsupported version return ",[24,399,400],{},"valid: false"," with a readable message, never a server error.",[395,403,404,405,407],{},"A version 1 file is valid: it is upgraded the same way ",[24,406,167],{}," upgrades it.",[395,409,410,411,417,418,422],{},"Warnings (permit, meter, water sample and pump checks from ",[16,412,414],{"href":413},"\u002Futils",[24,415,416],{},"@welldot\u002Futils",") are advisory and never make a file invalid (",[16,419,421],{"href":420},"\u002Fformat\u002Fguides\u002Fvalidating#errors-and-warnings","Validating",").",[395,424,425,426,429],{},"Files over 5 MB return the code ",[24,427,428],{},"too_large",".",[42,431,433],{"id":432},"setup","Setup",[12,435,436],{},"The server works with CLI and desktop MCP clients that support remote (HTTP) servers. It sends no CORS headers, so MCP clients that run inside a web page may not be able to connect.",[438,439,440,485,504,583,668],"tabs",{},[441,442,445,475],"tabs-item",{"icon":443,"label":444},"i-lucide-terminal","Claude Code",[29,446,450],{"className":447,"code":448,"language":449,"meta":35,"style":35},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","claude mcp add --transport http welldot https:\u002F\u002Fdocs.welldot.org\u002Fmcp\n","bash",[24,451,452],{"__ignoreMap":35},[184,453,454,457,460,463,466,469,472],{"class":186,"line":187},[184,455,456],{"class":240},"claude",[184,458,459],{"class":250}," mcp",[184,461,462],{"class":250}," add",[184,464,465],{"class":250}," --transport",[184,467,468],{"class":250}," http",[184,470,471],{"class":250}," welldot",[184,473,474],{"class":250}," https:\u002F\u002Fdocs.welldot.org\u002Fmcp\n",[12,476,477,478,481,482,429],{},"Add ",[24,479,480],{},"--scope project"," to share it with your team through ",[24,483,484],{},".mcp.json",[441,486,489],{"icon":487,"label":488},"i-lucide-monitor","Claude Desktop",[12,490,491,492,496,497,500,501,429],{},"Open ",[493,494,495],"strong",{},"Settings → Connectors → Add custom connector",", name it ",[24,498,499],{},"welldot"," and enter ",[24,502,503],{},"https:\u002F\u002Fdocs.welldot.org\u002Fmcp",[441,505,508,519],{"icon":506,"label":507},"i-lucide-mouse-pointer-2","Cursor",[12,509,510,511,514,515,518],{},"In ",[24,512,513],{},".cursor\u002Fmcp.json"," (project) or ",[24,516,517],{},"~\u002F.cursor\u002Fmcp.json"," (global):",[29,520,522],{"className":178,"code":521,"language":180,"meta":35,"style":35},"{\n  \"mcpServers\": {\n    \"welldot\": { \"url\": \"https:\u002F\u002Fdocs.welldot.org\u002Fmcp\" }\n  }\n}\n",[24,523,524,528,542,574,579],{"__ignoreMap":35},[184,525,526],{"class":186,"line":187},[184,527,191],{"class":190},[184,529,530,532,535,537,539],{"class":186,"line":194},[184,531,197],{"class":190},[184,533,534],{"class":200},"mcpServers",[184,536,204],{"class":190},[184,538,207],{"class":190},[184,540,541],{"class":190}," {\n",[184,543,544,547,549,551,553,556,558,562,564,566,568,570,572],{"class":186,"line":213},[184,545,546],{"class":190},"    \"",[184,548,499],{"class":240},[184,550,204],{"class":190},[184,552,207],{"class":190},[184,554,555],{"class":190}," {",[184,557,247],{"class":190},[184,559,561],{"class":560},"sbssI","url",[184,563,204],{"class":190},[184,565,207],{"class":190},[184,567,247],{"class":190},[184,569,503],{"class":250},[184,571,204],{"class":190},[184,573,359],{"class":190},[184,575,576],{"class":186,"line":228},[184,577,578],{"class":190},"  }\n",[184,580,581],{"class":186,"line":234},[184,582,390],{"class":190},[441,584,587,592],{"icon":585,"label":586},"i-lucide-code","VS Code",[12,588,510,589,207],{},[24,590,591],{},".vscode\u002Fmcp.json",[29,593,595],{"className":178,"code":594,"language":180,"meta":35,"style":35},"{\n  \"servers\": {\n    \"welldot\": { \"type\": \"http\", \"url\": \"https:\u002F\u002Fdocs.welldot.org\u002Fmcp\" }\n  }\n}\n",[24,596,597,601,614,660,664],{"__ignoreMap":35},[184,598,599],{"class":186,"line":187},[184,600,191],{"class":190},[184,602,603,605,608,610,612],{"class":186,"line":194},[184,604,197],{"class":190},[184,606,607],{"class":200},"servers",[184,609,204],{"class":190},[184,611,207],{"class":190},[184,613,541],{"class":190},[184,615,616,618,620,622,624,626,628,631,633,635,637,640,642,644,646,648,650,652,654,656,658],{"class":186,"line":213},[184,617,546],{"class":190},[184,619,499],{"class":240},[184,621,204],{"class":190},[184,623,207],{"class":190},[184,625,555],{"class":190},[184,627,247],{"class":190},[184,629,630],{"class":560},"type",[184,632,204],{"class":190},[184,634,207],{"class":190},[184,636,247],{"class":190},[184,638,639],{"class":250},"http",[184,641,204],{"class":190},[184,643,326],{"class":190},[184,645,247],{"class":190},[184,647,561],{"class":560},[184,649,204],{"class":190},[184,651,207],{"class":190},[184,653,247],{"class":190},[184,655,503],{"class":250},[184,657,204],{"class":190},[184,659,359],{"class":190},[184,661,662],{"class":186,"line":228},[184,663,578],{"class":190},[184,665,666],{"class":186,"line":234},[184,667,390],{"class":190},[441,669,672,677],{"icon":670,"label":671},"i-lucide-sparkle","Gemini CLI",[12,673,510,674,207],{},[24,675,676],{},"~\u002F.gemini\u002Fsettings.json",[29,678,680],{"className":178,"code":679,"language":180,"meta":35,"style":35},"{\n  \"mcpServers\": {\n    \"welldot\": { \"httpUrl\": \"https:\u002F\u002Fdocs.welldot.org\u002Fmcp\" }\n  }\n}\n",[24,681,682,686,698,727,731],{"__ignoreMap":35},[184,683,684],{"class":186,"line":187},[184,685,191],{"class":190},[184,687,688,690,692,694,696],{"class":186,"line":194},[184,689,197],{"class":190},[184,691,534],{"class":200},[184,693,204],{"class":190},[184,695,207],{"class":190},[184,697,541],{"class":190},[184,699,700,702,704,706,708,710,712,715,717,719,721,723,725],{"class":186,"line":213},[184,701,546],{"class":190},[184,703,499],{"class":240},[184,705,204],{"class":190},[184,707,207],{"class":190},[184,709,555],{"class":190},[184,711,247],{"class":190},[184,713,714],{"class":560},"httpUrl",[184,716,204],{"class":190},[184,718,207],{"class":190},[184,720,247],{"class":190},[184,722,503],{"class":250},[184,724,204],{"class":190},[184,726,359],{"class":190},[184,728,729],{"class":186,"line":228},[184,730,578],{"class":190},[184,732,733],{"class":186,"line":234},[184,734,390],{"class":190},[12,736,737],{},"Client settings change often; if one of these does not work, check your client's documentation for \"remote MCP server\" or \"Streamable HTTP\".",[42,739,741],{"id":740},"try-it","Try it",[12,743,744],{},"Once connected, ask your assistant something like:",[392,746,747,754,757],{},[395,748,749,750,753],{},"\"Using the welldot docs, what does ",[24,751,752],{},"well_screen[].slot_type"," accept?\"",[395,755,756],{},"\"Read the welldot spec on level sign conventions and tell me how to record a flowing well.\"",[395,758,759],{},"\"Validate this .well file and fix every error.\" (paste or attach the file)",[12,761,762],{},"To test the endpoint without an assistant:",[29,764,766],{"className":447,"code":765,"language":449,"meta":35,"style":35},"curl -s https:\u002F\u002Fdocs.welldot.org\u002Fmcp \\\n  -H 'content-type: application\u002Fjson' \\\n  -H 'accept: application\u002Fjson, text\u002Fevent-stream' \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools\u002Flist\"}'\n",[24,767,768,783,799,812],{"__ignoreMap":35},[184,769,770,773,776,779],{"class":186,"line":187},[184,771,772],{"class":240},"curl",[184,774,775],{"class":250}," -s",[184,777,778],{"class":250}," https:\u002F\u002Fdocs.welldot.org\u002Fmcp",[184,780,782],{"class":781},"sTEyZ"," \\\n",[184,784,785,788,791,794,797],{"class":186,"line":194},[184,786,787],{"class":250},"  -H",[184,789,790],{"class":190}," '",[184,792,793],{"class":250},"content-type: application\u002Fjson",[184,795,796],{"class":190},"'",[184,798,782],{"class":781},[184,800,801,803,805,808,810],{"class":186,"line":213},[184,802,787],{"class":250},[184,804,790],{"class":190},[184,806,807],{"class":250},"accept: application\u002Fjson, text\u002Fevent-stream",[184,809,796],{"class":190},[184,811,782],{"class":781},[184,813,814,817,819,822],{"class":186,"line":228},[184,815,816],{"class":250},"  -d",[184,818,790],{"class":190},[184,820,821],{"class":250},"{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools\u002Flist\"}",[184,823,824],{"class":190},"'\n",[42,826,828],{"id":827},"privacy","Privacy",[12,830,831,832,834],{},"The server does not store what you send. A file passed to ",[24,833,122],{}," is parsed in memory and discarded when the response is sent. Avoid sending files you are not allowed to share with your AI provider; that concern is between you and the provider, not this server.",[42,836,838],{"id":837},"for-contributors","For contributors",[12,840,841,844,845,848,849,429],{},[24,842,843],{},"pnpm --filter docs dev"," serves the same endpoint locally at ",[24,846,847],{},"http:\u002F\u002Flocalhost:3001\u002Fmcp",". The implementation is in ",[24,850,851],{},"apps\u002Fdocs\u002Fserver\u002Fmcp-lib",[853,854,855],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":35,"searchDepth":194,"depth":194,"links":857},[858,862,863,864,865],{"id":44,"depth":194,"text":45,"children":859},[860],{"id":156,"depth":213,"text":861},"validate_well in detail",{"id":432,"depth":194,"text":433},{"id":740,"depth":194,"text":741},{"id":827,"depth":194,"text":828},{"id":837,"depth":194,"text":838},"Connect an AI assistant to the welldot docs MCP server to search the documentation, read pages and validate .well files, with setup for Claude Code, Claude Desktop, Cursor, VS Code and Gemini CLI.","md",{},true,"\u002Fai\u002Fmcp","---\ntitle: MCP server\ndescription: Connect an AI assistant to the welldot docs MCP server to search the documentation, read pages and validate .well files, with setup for Claude Code, Claude Desktop, Cursor, VS Code and Gemini CLI.\n---\n\nThis site runs a [Model Context Protocol](https:\u002F\u002Fmodelcontextprotocol.io) server. An assistant connected to it can search these docs, read any page, including the specification, and validate `.well` files with the same check the libraries use.\n\n```text\nhttps:\u002F\u002Fdocs.welldot.org\u002Fmcp\n```\n\nThe server uses the Streamable HTTP transport, is stateless and needs no account or key.\n\n## Tools\n\n| Tool            | Input                                                             | Returns                                                                                       |\n| --------------- | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |\n| `search_docs`   | `query`, optional `limit` (default 10, at most 50)                | The best matching sections, each with a path, URL and snippet.                                |\n| `get_page`      | `path`, for example `\u002Fformat\u002Fspec\u002Fv2\u002Foverview`                    | The page as Markdown. A trailing slash, `.md` suffix or `#anchor` is ignored.                 |\n| `validate_well` | `content` (the file's text), optional `warnings` (default `true`) | `{ valid: true, version, warnings }` or `{ valid: false, errors }`, with the JSON Schema URL. |\n\nThe server also tells the assistant to validate every `.well` file it generates or edits.\n\n### `validate_well` in detail\n\n`validate_well` runs `parseWell` from [`@welldot\u002Fcore`](\u002Fcore\u002Fguides\u002Fparsing-and-validating), nothing more and nothing less. Errors come back with a path into the document:\n\n```json\n{\n  \"valid\": false,\n  \"errors\": [\n    {\n      \"path\": \"well_screen[0].screen_slot\",\n      \"code\": \"invalid_type\",\n      \"message\": \"Required\"\n    },\n    { \"path\": \"fractures\", \"code\": \"invalid_type\", \"message\": \"Required\" }\n  ],\n  \"schema\": \"https:\u002F\u002Fwelldot.org\u002Fschema\u002Fv2\u002Fwell.schema.json\"\n}\n```\n\n- Non-JSON text, an empty string, a JSON array or an unsupported version return `valid: false` with a readable message, never a server error.\n- A version 1 file is valid: it is upgraded the same way `parseWell` upgrades it.\n- Warnings (permit, meter, water sample and pump checks from [`@welldot\u002Futils`](\u002Futils)) are advisory and never make a file invalid ([Validating](\u002Fformat\u002Fguides\u002Fvalidating#errors-and-warnings)).\n- Files over 5 MB return the code `too_large`.\n\n## Setup\n\nThe server works with CLI and desktop MCP clients that support remote (HTTP) servers. It sends no CORS headers, so MCP clients that run inside a web page may not be able to connect.\n\n::tabs\n\n:::tabs-item{label=\"Claude Code\" icon=\"i-lucide-terminal\"}\n\n```bash\nclaude mcp add --transport http welldot https:\u002F\u002Fdocs.welldot.org\u002Fmcp\n```\n\nAdd `--scope project` to share it with your team through `.mcp.json`.\n:::\n\n:::tabs-item{label=\"Claude Desktop\" icon=\"i-lucide-monitor\"}\nOpen **Settings → Connectors → Add custom connector**, name it `welldot` and enter `https:\u002F\u002Fdocs.welldot.org\u002Fmcp`.\n:::\n\n:::tabs-item{label=\"Cursor\" icon=\"i-lucide-mouse-pointer-2\"}\nIn `.cursor\u002Fmcp.json` (project) or `~\u002F.cursor\u002Fmcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"welldot\": { \"url\": \"https:\u002F\u002Fdocs.welldot.org\u002Fmcp\" }\n  }\n}\n```\n\n:::\n\n:::tabs-item{label=\"VS Code\" icon=\"i-lucide-code\"}\nIn `.vscode\u002Fmcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"welldot\": { \"type\": \"http\", \"url\": \"https:\u002F\u002Fdocs.welldot.org\u002Fmcp\" }\n  }\n}\n```\n\n:::\n\n:::tabs-item{label=\"Gemini CLI\" icon=\"i-lucide-sparkle\"}\nIn `~\u002F.gemini\u002Fsettings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"welldot\": { \"httpUrl\": \"https:\u002F\u002Fdocs.welldot.org\u002Fmcp\" }\n  }\n}\n```\n\n:::\n\n::\n\nClient settings change often; if one of these does not work, check your client's documentation for \"remote MCP server\" or \"Streamable HTTP\".\n\n## Try it\n\nOnce connected, ask your assistant something like:\n\n- \"Using the welldot docs, what does `well_screen[].slot_type` accept?\"\n- \"Read the welldot spec on level sign conventions and tell me how to record a flowing well.\"\n- \"Validate this .well file and fix every error.\" (paste or attach the file)\n\nTo test the endpoint without an assistant:\n\n```bash\ncurl -s https:\u002F\u002Fdocs.welldot.org\u002Fmcp \\\n  -H 'content-type: application\u002Fjson' \\\n  -H 'accept: application\u002Fjson, text\u002Fevent-stream' \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools\u002Flist\"}'\n```\n\n## Privacy\n\nThe server does not store what you send. A file passed to `validate_well` is parsed in memory and discarded when the response is sent. Avoid sending files you are not allowed to share with your AI provider; that concern is between you and the provider, not this server.\n\n## For contributors\n\n`pnpm --filter docs dev` serves the same endpoint locally at `http:\u002F\u002Flocalhost:3001\u002Fmcp`. The implementation is in `apps\u002Fdocs\u002Fserver\u002Fmcp-lib`.\n",{"title":7,"description":866},"ai\u002Fmcp","GifnKUa6ksd1vruZDdqrxErs_ONYR0peiOxlZuhefoc",{"docs_en":876,"spec":1188,"changelogs":1237},[877,894,913,968,1077,1131],{"title":878,"path":879,"stem":880,"children":881},"Ai","\u002Fai","ai",[882,885,889,893],{"title":883,"path":879,"stem":884},"Introduction","ai\u002Findex",{"title":886,"path":887,"stem":888},"Converting reports with an assistant","\u002Fai\u002Fconversion-skill","ai\u002Fconversion-skill",{"title":890,"path":891,"stem":892},"llms.txt and Markdown pages","\u002Fai\u002Fllms","ai\u002Fllms",{"title":7,"path":870,"stem":873},{"title":895,"path":896,"stem":897,"children":898},"Contributing","\u002Fcontributing","contributing",[899,901,905,909],{"title":883,"path":896,"stem":900},"contributing\u002Findex",{"title":902,"path":903,"stem":904},"Writing docs","\u002Fcontributing\u002Fwriting-docs","contributing\u002F1.writing-docs",{"title":906,"path":907,"stem":908},"Update rules","\u002Fcontributing\u002Fupdate-rules","contributing\u002F2.update-rules",{"title":910,"path":911,"stem":912},"Content components","\u002Fcontributing\u002Fcomponents","contributing\u002Fcomponents",{"title":914,"path":915,"stem":916,"children":917},"Core","\u002Fcore","core",[918,920,934,962],{"title":883,"path":915,"stem":919},"core\u002Findex",{"title":921,"path":922,"stem":923,"children":924,"page":933},"Getting Started","\u002Fcore\u002Fgetting-started","core\u002F1.getting-started",[925,929],{"title":926,"path":927,"stem":928},"Installation","\u002Fcore\u002Fgetting-started\u002Finstallation","core\u002F1.getting-started\u002F1.installation",{"title":930,"path":931,"stem":932},"First use","\u002Fcore\u002Fgetting-started\u002Ffirst-use","core\u002F1.getting-started\u002F2.first-use",false,{"title":935,"path":936,"stem":937,"children":938,"page":933},"Guides","\u002Fcore\u002Fguides","core\u002F2.guides",[939,942,946,950,954,958],{"title":940,"path":171,"stem":941},"Parsing and validating","core\u002F2.guides\u002F1.parsing-and-validating",{"title":943,"path":944,"stem":945},"Serializing and sharing","\u002Fcore\u002Fguides\u002Fserializing-and-sharing","core\u002F2.guides\u002F2.serializing-and-sharing",{"title":947,"path":948,"stem":949},"Unit conversion","\u002Fcore\u002Fguides\u002Funit-conversion","core\u002F2.guides\u002F3.unit-conversion",{"title":951,"path":952,"stem":953},"Vocabularies and textures","\u002Fcore\u002Fguides\u002Fvocabularies-and-textures","core\u002F2.guides\u002F4.vocabularies-and-textures",{"title":955,"path":956,"stem":957},"Water quality vocabulary","\u002Fcore\u002Fguides\u002Fwater-quality-vocabulary","core\u002F2.guides\u002F5.water-quality-vocabulary",{"title":959,"path":960,"stem":961},"Versions and time zones","\u002Fcore\u002Fguides\u002Fversions-and-time-zones","core\u002F2.guides\u002F6.versions-and-time-zones",{"title":963,"path":964,"stem":965,"children":966},"API reference","\u002Fcore\u002Fapi","core\u002Fapi\u002Findex",[967],{"title":963,"path":964,"stem":965},{"title":969,"path":970,"stem":971,"children":972},"Format","\u002Fformat","format",[973,975,995,1024,1047,1067,1073],{"title":883,"path":970,"stem":974},"format\u002Findex",{"title":921,"path":976,"stem":977,"children":978,"page":933},"\u002Fformat\u002Fgetting-started","format\u002F1.getting-started",[979,983,987,991],{"title":980,"path":981,"stem":982},"What is .well?","\u002Fformat\u002Fgetting-started\u002Fwhat-is-well","format\u002F1.getting-started\u002F1.what-is-well",{"title":984,"path":985,"stem":986},"For geologists","\u002Fformat\u002Fgetting-started\u002Ffor-geologists","format\u002F1.getting-started\u002F2.for-geologists",{"title":988,"path":989,"stem":990},"For developers","\u002Fformat\u002Fgetting-started\u002Ffor-developers","format\u002F1.getting-started\u002F3.for-developers",{"title":992,"path":993,"stem":994},"Your first .well file","\u002Fformat\u002Fgetting-started\u002Ffirst-well-file","format\u002F1.getting-started\u002F4.first-well-file",{"title":996,"path":997,"stem":998,"children":999,"page":933},"Concepts","\u002Fformat\u002Fconcepts","format\u002F2.concepts",[1000,1004,1008,1012,1016,1020],{"title":1001,"path":1002,"stem":1003},"Depths and intervals","\u002Fformat\u002Fconcepts\u002Fdepths-and-intervals","format\u002F2.concepts\u002F1.depths-and-intervals",{"title":1005,"path":1006,"stem":1007},"Units and precision","\u002Fformat\u002Fconcepts\u002Funits-and-precision","format\u002F2.concepts\u002F2.units-and-precision",{"title":1009,"path":1010,"stem":1011},"Vocabularies","\u002Fformat\u002Fconcepts\u002Fvocabularies","format\u002F2.concepts\u002F3.vocabularies",{"title":1013,"path":1014,"stem":1015},"Profiles","\u002Fformat\u002Fconcepts\u002Fprofiles","format\u002F2.concepts\u002F4.profiles",{"title":1017,"path":1018,"stem":1019},"Versions and deprecation","\u002Fformat\u002Fconcepts\u002Fversions-and-deprecation","format\u002F2.concepts\u002F5.versions-and-deprecation",{"title":1021,"path":1022,"stem":1023},"Extensibility","\u002Fformat\u002Fconcepts\u002Fextensibility","format\u002F2.concepts\u002F6.extensibility",{"title":935,"path":1025,"stem":1026,"children":1027,"page":933},"\u002Fformat\u002Fguides","format\u002F3.guides",[1028,1032,1036,1039,1043],{"title":1029,"path":1030,"stem":1031},"Writing a .well by hand","\u002Fformat\u002Fguides\u002Fwriting-by-hand","format\u002F3.guides\u002F1.writing-by-hand",{"title":1033,"path":1034,"stem":1035},"Converting a report","\u002Fformat\u002Fguides\u002Fconverting-a-report","format\u002F3.guides\u002F2.converting-a-report",{"title":421,"path":1037,"stem":1038},"\u002Fformat\u002Fguides\u002Fvalidating","format\u002F3.guides\u002F3.validating",{"title":1040,"path":1041,"stem":1042},"Extending for your own needs","\u002Fformat\u002Fguides\u002Fextending","format\u002F3.guides\u002F4.extending",{"title":1044,"path":1045,"stem":1046},"Building an editor or database on .well","\u002Fformat\u002Fguides\u002Fbuilding-on-well","format\u002F3.guides\u002F5.building-on-well",{"title":1048,"path":1049,"stem":1050,"children":1051},"Overview","\u002Fformat\u002Freference","format\u002F4.reference\u002Findex",[1052,1053,1057,1061],{"title":1048,"path":1049,"stem":1050},{"title":1054,"path":1055,"stem":1056},"JSON Schema","\u002Fformat\u002Freference\u002Fjson-schema","format\u002F4.reference\u002F1.json-schema",{"title":1058,"path":1059,"stem":1060},"Example wells","\u002Fformat\u002Freference\u002Fexamples","format\u002F4.reference\u002F2.examples",{"title":1062,"path":1063,"stem":1064,"children":1065},"Object reference","\u002Fformat\u002Freference\u002Fobjects","format\u002Freference\u002Fobjects\u002Findex",[1066],{"title":1062,"path":1063,"stem":1064},{"title":1068,"path":1069,"stem":1070,"children":1071},"About the spec","\u002Fformat\u002Fspec","format\u002F5.spec\u002Findex",[1072],{"title":1068,"path":1069,"stem":1070},{"title":1074,"path":1075,"stem":1076},"Changelog","\u002Fformat\u002Fchangelog","format\u002F6.changelog",{"title":1078,"path":1079,"stem":1080,"children":1081},"Render","\u002Frender","render",[1082,1084,1094,1126],{"title":883,"path":1079,"stem":1083},"render\u002Findex",{"title":921,"path":1085,"stem":1086,"children":1087,"page":933},"\u002Frender\u002Fgetting-started","render\u002F1.getting-started",[1088,1091],{"title":926,"path":1089,"stem":1090},"\u002Frender\u002Fgetting-started\u002Finstallation","render\u002F1.getting-started\u002F1.installation",{"title":930,"path":1092,"stem":1093},"\u002Frender\u002Fgetting-started\u002Ffirst-use","render\u002F1.getting-started\u002F2.first-use",{"title":935,"path":1095,"stem":1096,"children":1097,"page":933},"\u002Frender\u002Fguides","render\u002F2.guides",[1098,1102,1106,1110,1114,1118,1122],{"title":1099,"path":1100,"stem":1101},"Panels and layout","\u002Frender\u002Fguides\u002Fpanels-and-layout","render\u002F2.guides\u002F1.panels-and-layout",{"title":1103,"path":1104,"stem":1105},"Layers and labels","\u002Frender\u002Fguides\u002Flayers-and-labels","render\u002F2.guides\u002F2.layers-and-labels",{"title":1107,"path":1108,"stem":1109},"Theming","\u002Frender\u002Fguides\u002Ftheming","render\u002F2.guides\u002F3.theming",{"title":1111,"path":1112,"stem":1113},"Locale and units","\u002Frender\u002Fguides\u002Flocale-and-units","render\u002F2.guides\u002F4.locale-and-units",{"title":1115,"path":1116,"stem":1117},"Legends","\u002Frender\u002Fguides\u002Flegends","render\u002F2.guides\u002F5.legends",{"title":1119,"path":1120,"stem":1121},"Zoom, pan and highlights","\u002Frender\u002Fguides\u002Finteraction","render\u002F2.guides\u002F6.interaction",{"title":1123,"path":1124,"stem":1125},"Using it in a framework","\u002Frender\u002Fguides\u002Fframeworks","render\u002F2.guides\u002F7.frameworks",{"title":963,"path":1127,"stem":1128,"children":1129},"\u002Frender\u002Fapi","render\u002Fapi\u002Findex",[1130],{"title":963,"path":1127,"stem":1128},{"title":1132,"path":413,"stem":1133,"children":1134},"Utils","utils",[1135,1137,1147,1183],{"title":883,"path":413,"stem":1136},"utils\u002Findex",{"title":921,"path":1138,"stem":1139,"children":1140,"page":933},"\u002Futils\u002Fgetting-started","utils\u002F1.getting-started",[1141,1144],{"title":926,"path":1142,"stem":1143},"\u002Futils\u002Fgetting-started\u002Finstallation","utils\u002F1.getting-started\u002F1.installation",{"title":930,"path":1145,"stem":1146},"\u002Futils\u002Fgetting-started\u002Ffirst-use","utils\u002F1.getting-started\u002F2.first-use",{"title":935,"path":1148,"stem":1149,"children":1150,"page":933},"\u002Futils\u002Fguides","utils\u002F2.guides",[1151,1155,1159,1163,1167,1171,1175,1179],{"title":1152,"path":1153,"stem":1154},"Geometry and volumes","\u002Futils\u002Fguides\u002Fgeometry-and-volumes","utils\u002F2.guides\u002F1.geometry-and-volumes",{"title":1156,"path":1157,"stem":1158},"Water levels and pumping tests","\u002Futils\u002Fguides\u002Fpumping-tests","utils\u002F2.guides\u002F2.pumping-tests",{"title":1160,"path":1161,"stem":1162},"Permits","\u002Futils\u002Fguides\u002Fpermits","utils\u002F2.guides\u002F3.permits",{"title":1164,"path":1165,"stem":1166},"Operation and production","\u002Futils\u002Fguides\u002Foperation","utils\u002F2.guides\u002F4.operation",{"title":1168,"path":1169,"stem":1170},"Water quality","\u002Futils\u002Fguides\u002Fwater-quality","utils\u002F2.guides\u002F5.water-quality",{"title":1172,"path":1173,"stem":1174},"Logger import","\u002Futils\u002Fguides\u002Flogger-import","utils\u002F2.guides\u002F6.logger-import",{"title":1176,"path":1177,"stem":1178},"SIAGAS import","\u002Futils\u002Fguides\u002Fsiagas-import","utils\u002F2.guides\u002F7.siagas-import",{"title":1180,"path":1181,"stem":1182},"Formatting","\u002Futils\u002Fguides\u002Fformatting","utils\u002F2.guides\u002F8.formatting",{"title":963,"path":1184,"stem":1185,"children":1186},"\u002Futils\u002Fapi","utils\u002Fapi\u002Findex",[1187],{"title":963,"path":1184,"stem":1185},[1189],{"title":969,"path":970,"stem":971,"children":1190,"page":933},[1191],{"title":1192,"path":1069,"stem":1193,"children":1194,"page":933},"Spec","format\u002Fspec",[1195,1204,1213],{"title":1196,"path":1197,"stem":1198,"children":1199,"page":933},"Reference","\u002Fformat\u002Fspec\u002Freference","format\u002Fspec\u002Freference",[1200],{"title":1201,"path":1202,"stem":1203},"FGDC Texture Patterns Reference","\u002Fformat\u002Fspec\u002Freference\u002Ffgdc-textures","format\u002Fspec\u002Freference\u002Ffgdc-textures",{"title":1205,"path":1206,"stem":1207,"children":1208,"page":933},"V1","\u002Fformat\u002Fspec\u002Fv1","format\u002Fspec\u002Fv1",[1209],{"title":1210,"path":1211,"stem":1212},".well File Format Specification","\u002Fformat\u002Fspec\u002Fv1\u002Fwell-format","format\u002Fspec\u002Fv1\u002Fwell-format",{"title":1214,"path":1215,"stem":1216,"children":1217,"page":933},"V2","\u002Fformat\u002Fspec\u002Fv2","format\u002Fspec\u002Fv2",[1218,1222,1226,1230,1233],{"title":1219,"path":1220,"stem":1221},".well File Format Specification — Version 2.4: Format Reference","\u002Fformat\u002Fspec\u002Fv2\u002Fformat-reference","format\u002Fspec\u002Fv2\u002Fformat-reference",{"title":1223,"path":1224,"stem":1225},".well File Format Specification — Version 2.4: Interoperability","\u002Fformat\u002Fspec\u002Fv2\u002Finteroperability","format\u002Fspec\u002Fv2\u002Finteroperability",{"title":1227,"path":1228,"stem":1229},".well File Format Specification — Version 2.4: Object Schemas","\u002Fformat\u002Fspec\u002Fv2\u002Fobject-schemas","format\u002Fspec\u002Fv2\u002Fobject-schemas",{"title":1231,"path":104,"stem":1232},".well File Format Specification — Version 2.4: Overview","format\u002Fspec\u002Fv2\u002Foverview",{"title":1234,"path":1235,"stem":1236},".well File Format Specification — Version 2.4: Water Quality","\u002Fformat\u002Fspec\u002Fv2\u002Fwater-quality","format\u002Fspec\u002Fv2\u002Fwater-quality",[1238,1243,1249],{"title":914,"path":915,"stem":916,"children":1239,"page":933},[1240],{"title":174,"path":1241,"stem":1242},"\u002Fcore\u002Fchangelog","core\u002FCHANGELOG",{"title":1078,"path":1079,"stem":1080,"children":1244,"page":933},[1245],{"title":1246,"path":1247,"stem":1248},"@welldot\u002Frender","\u002Frender\u002Fchangelog","render\u002FCHANGELOG",{"title":1132,"path":413,"stem":1133,"children":1250,"page":933},[1251],{"title":416,"path":1252,"stem":1253},"\u002Futils\u002Fchangelog","utils\u002FCHANGELOG",1793050492599]