[{"data":1,"prerenderedAt":575},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fmcp\u002Fstandalone":3},{"id":4,"title":5,"body":6,"description":566,"extension":567,"meta":568,"navigation":569,"path":570,"redirect":571,"seo":572,"stem":573,"__hash__":574},"docs\u002Fdocs\u002Fmcp\u002Fstandalone.md","Standalone MCP server",{"type":7,"value":8,"toc":556},"minimark",[9,13,26,29,34,37,48,55,68,72,90,93,96,122,125,129,132,165,175,178,220,227,253,256,297,302,309,327,330,334,337,436,449,453,456,463,471,482,486,493,515,525,549,552],[10,11,5],"h1",{"id":12},"standalone-mcp-server",[14,15,16,17,21,22,25],"p",{},"Everything else in this section connects an AI client to a DBConvert Streams\n",[18,19,20],"strong",{},"workspace"," — your saved connections, read through the app you already run.\nThis page is the other shape: the same read-only server, given connection\nstrings directly, with ",[18,23,24],{},"no DBConvert Streams installation behind it",". No\nworkspace database, no keyring, no services to start.",[14,27,28],{},"It is the same binary and the same tools. What changes is where the sources come\nfrom: instead of reading your workspace, the server serves exactly the sources\nyou hand it at startup.",[30,31,33],"h2",{"id":32},"what-counts-as-a-source","What counts as a source",[14,35,36],{},"Four kinds, and they mix freely:",[38,39,44],"pre",{"className":40,"code":42,"language":43},[41],"language-text","postgres:\u002F\u002Fuser:password@host:5432\u002Fdbname\nmysql:\u002F\u002Fuser:password@host:3306\u002Fdbname\ns3:\u002F\u002Fbucket\u002Ffolder?region=us-east-1\n\u002Fhome\u002Fyou\u002Fdata                          # a folder of Parquet, CSV or JSON files\n","text",[45,46,42],"code",{"__ignoreMap":47},"",[14,49,50,51,54],{},"Put a name in front to choose what the source is called in chat —\n",[45,52,53],{},"shop=postgres:\u002F\u002F…",". Without one it takes the name of the database, bucket or\nfolder it points at.",[14,56,57,58,61,62,67],{},"The point of listing several is that ",[18,59,60],{},"one question can join across them",": a\nlive PostgreSQL table against a Parquet file in S3, or a CSV a colleague sent\nagainst the table it was exported from. See\n",[63,64,66],"a",{"href":65},"\u002Fdocs\u002Fmcp\u002Fexamples\u002Ffederated-validation","federated validation"," for a worked\nexample.",[30,69,71],{"id":70},"option-1-the-claude-extension","Option 1 — the Claude extension",[14,73,74,75,78,79,85,86,89],{},"Download ",[45,76,77],{},"dbconvert-streams-\u003Cversion>.mcpb"," from\n",[63,80,84],{"href":81,"rel":82},"https:\u002F\u002Fgithub.com\u002Fslotix\u002Fdbconvert-streams-public\u002Freleases",[83],"nofollow","Releases"," and drop\nit into ",[18,87,88],{},"Claude → Settings → Extensions",". Fill in the form and the tools appear\nin your next chat.",[14,91,92],{},"One file covers Windows and Linux — the bundle carries a binary for each and\npicks the right one on install. macOS is planned for a later release.",[14,94,95],{},"Two fields matter:",[97,98,99,112],"ul",{},[100,101,102,105,106],"li",{},[18,103,104],{},"Connection strings"," — several in the one field, separated by spaces. The\nform renders it as a single input, so this is the only way to give it more\nthan one:\n",[38,107,110],{"className":108,"code":109,"language":43},[41],"shop=postgres:\u002F\u002Fuser:password@host:5432\u002Fshop orders=mysql:\u002F\u002Fuser:password@host:3306\u002Forders\n",[45,111,109],{"__ignoreMap":47},[100,113,114,117,118,121],{},[18,115,116],{},"Folders with data files"," — use ",[18,119,120],{},"+ Add directory",". A folder path may\ncontain spaces; it is picked, not typed, so nothing is ambiguous.",[14,123,124],{},"The two AWS fields matter only for an S3 source on storage that is not AWS\nitself — MinIO, Cloudflare R2, DigitalOcean Spaces.",[30,126,128],{"id":127},"option-2-the-docker-image","Option 2 — the Docker image",[14,130,131],{},"Any MCP client that can launch a server through Docker can run this, which is\nmost of them:",[38,133,137],{"className":134,"code":135,"language":136,"meta":47,"style":47},"language-bash shiki shiki-themes github-light github-dark","docker run -i --rm slotix\u002Fstream-mcp postgres:\u002F\u002Fuser:password@host:5432\u002Fdbname\n","bash",[45,138,139],{"__ignoreMap":47},[140,141,144,148,152,156,159,162],"span",{"class":142,"line":143},"line",1,[140,145,147],{"class":146},"sScJk","docker",[140,149,151],{"class":150},"sZZnC"," run",[140,153,155],{"class":154},"sj4cs"," -i",[140,157,158],{"class":154}," --rm",[140,160,161],{"class":150}," slotix\u002Fstream-mcp",[140,163,164],{"class":150}," postgres:\u002F\u002Fuser:password@host:5432\u002Fdbname\n",[14,166,167,170,171,174],{},[45,168,169],{},"-i"," is required: MCP speaks JSON-RPC over standard input, so the container needs\nits stdin held open. ",[45,172,173],{},"--rm"," is housekeeping — the server keeps no state between\nruns.",[14,176,177],{},"Several sources are several arguments:",[38,179,181],{"className":134,"code":180,"language":136,"meta":47,"style":47},"docker run -i --rm slotix\u002Fstream-mcp \\\n  shop=postgres:\u002F\u002Fuser:password@host:5432\u002Fshop \\\n  orders=mysql:\u002F\u002Fuser:password@host:3306\u002Forders \\\n  lake=s3:\u002F\u002Fanalytics\u002Fexports?region=eu-central-1\n",[45,182,183,198,206,214],{"__ignoreMap":47},[140,184,185,187,189,191,193,195],{"class":142,"line":143},[140,186,147],{"class":146},[140,188,151],{"class":150},[140,190,155],{"class":154},[140,192,158],{"class":154},[140,194,161],{"class":150},[140,196,197],{"class":154}," \\\n",[140,199,201,204],{"class":142,"line":200},2,[140,202,203],{"class":150},"  shop=postgres:\u002F\u002Fuser:password@host:5432\u002Fshop",[140,205,197],{"class":154},[140,207,209,212],{"class":142,"line":208},3,[140,210,211],{"class":150},"  orders=mysql:\u002F\u002Fuser:password@host:3306\u002Forders",[140,213,197],{"class":154},[140,215,217],{"class":142,"line":216},4,[140,218,219],{"class":150},"  lake=s3:\u002F\u002Fanalytics\u002Fexports?region=eu-central-1\n",[14,221,222,223,226],{},"A folder has to be mounted before it can be read, and the path you pass is the\npath ",[18,224,225],{},"inside"," the container:",[38,228,230],{"className":134,"code":229,"language":136,"meta":47,"style":47},"docker run -i --rm -v \u002Fhome\u002Fyou\u002Fdata:\u002Fdata slotix\u002Fstream-mcp \u002Fdata\n",[45,231,232],{"__ignoreMap":47},[140,233,234,236,238,240,242,245,248,250],{"class":142,"line":143},[140,235,147],{"class":146},[140,237,151],{"class":150},[140,239,155],{"class":154},[140,241,158],{"class":154},[140,243,244],{"class":154}," -v",[140,246,247],{"class":150}," \u002Fhome\u002Fyou\u002Fdata:\u002Fdata",[140,249,161],{"class":150},[140,251,252],{"class":150}," \u002Fdata\n",[14,254,255],{},"S3 credentials come from the standard AWS variables, never from the URL, so they\nstay out of your shell history and out of the client's config file:",[38,257,259],{"className":134,"code":258,"language":136,"meta":47,"style":47},"docker run -i --rm \\\n  -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY \\\n  slotix\u002Fstream-mcp \"s3:\u002F\u002Fanalytics\u002Fexports?region=eu-central-1\"\n",[45,260,261,273,289],{"__ignoreMap":47},[140,262,263,265,267,269,271],{"class":142,"line":143},[140,264,147],{"class":146},[140,266,151],{"class":150},[140,268,155],{"class":154},[140,270,158],{"class":154},[140,272,197],{"class":154},[140,274,275,278,281,284,287],{"class":142,"line":200},[140,276,277],{"class":154},"  -e",[140,279,280],{"class":150}," AWS_ACCESS_KEY_ID",[140,282,283],{"class":154}," -e",[140,285,286],{"class":150}," AWS_SECRET_ACCESS_KEY",[140,288,197],{"class":154},[140,290,291,294],{"class":142,"line":208},[140,292,293],{"class":150},"  slotix\u002Fstream-mcp",[140,295,296],{"class":150}," \"s3:\u002F\u002Fanalytics\u002Fexports?region=eu-central-1\"\n",[298,299,301],"h3",{"id":300},"reaching-a-database-on-your-own-machine","Reaching a database on your own machine",[14,303,304,305,308],{},"A container has its own network. ",[45,306,307],{},"localhost"," inside it means the container, not\nyour computer, so a database running on the host needs one of:",[97,310,311,321],{},[100,312,313,316,317,320],{},[45,314,315],{},"--network host"," on Linux, then ",[45,318,319],{},"127.0.0.1"," works as usual;",[100,322,323,326],{},[45,324,325],{},"host.docker.internal"," as the host name on macOS and Windows Docker Desktop.",[14,328,329],{},"A database on another server needs neither — use its address as you normally\nwould.",[298,331,333],{"id":332},"registering-it-with-a-client","Registering it with a client",[14,335,336],{},"In a client's MCP configuration the same command becomes:",[38,338,342],{"className":339,"code":340,"language":341,"meta":47,"style":47},"language-json shiki shiki-themes github-light github-dark","{\n  \"mcpServers\": {\n    \"dbconvert\": {\n      \"command\": \"docker\",\n      \"args\": [\"run\", \"-i\", \"--rm\", \"slotix\u002Fstream-mcp\",\n               \"shop=postgres:\u002F\u002Fuser:password@host:5432\u002Fshop\"]\n    }\n  }\n}\n","json",[45,343,344,350,358,365,379,409,418,424,430],{"__ignoreMap":47},[140,345,346],{"class":142,"line":143},[140,347,349],{"class":348},"sVt8B","{\n",[140,351,352,355],{"class":142,"line":200},[140,353,354],{"class":154},"  \"mcpServers\"",[140,356,357],{"class":348},": {\n",[140,359,360,363],{"class":142,"line":208},[140,361,362],{"class":154},"    \"dbconvert\"",[140,364,357],{"class":348},[140,366,367,370,373,376],{"class":142,"line":216},[140,368,369],{"class":154},"      \"command\"",[140,371,372],{"class":348},": ",[140,374,375],{"class":150},"\"docker\"",[140,377,378],{"class":348},",\n",[140,380,382,385,388,391,394,397,399,402,404,407],{"class":142,"line":381},5,[140,383,384],{"class":154},"      \"args\"",[140,386,387],{"class":348},": [",[140,389,390],{"class":150},"\"run\"",[140,392,393],{"class":348},", ",[140,395,396],{"class":150},"\"-i\"",[140,398,393],{"class":348},[140,400,401],{"class":150},"\"--rm\"",[140,403,393],{"class":348},[140,405,406],{"class":150},"\"slotix\u002Fstream-mcp\"",[140,408,378],{"class":348},[140,410,412,415],{"class":142,"line":411},6,[140,413,414],{"class":150},"               \"shop=postgres:\u002F\u002Fuser:password@host:5432\u002Fshop\"",[140,416,417],{"class":348},"]\n",[140,419,421],{"class":142,"line":420},7,[140,422,423],{"class":348},"    }\n",[140,425,427],{"class":142,"line":426},8,[140,428,429],{"class":348},"  }\n",[140,431,433],{"class":142,"line":432},9,[140,434,435],{"class":348},"}\n",[14,437,438,439,444,445,448],{},"The server is listed in the ",[63,440,443],{"href":441,"rel":442},"https:\u002F\u002Fregistry.modelcontextprotocol.io",[83],"MCP registry","\nas ",[45,446,447],{},"com.dbconvert\u002Fstreams",", with both the extension and the image, so clients\nthat install from the registry can find it without this file.",[30,450,452],{"id":451},"what-you-get-and-what-you-dont","What you get, and what you don't",[14,454,455],{},"The tool surface follows the sources you configured. A server started with only\na folder gets the file and federated tools; add a database and the catalog,\ninspection and query tools appear; add a bucket and the object-storage tools\njoin them. Nothing needs enabling — an unconfigured server simply starts with an\nempty source list and says so.",[14,457,458,459,462],{},"What is ",[18,460,461],{},"not"," there, compared with a workspace-backed server: the stream tools.\nStream status, run errors and stream logs describe a DBConvert Streams\ninstallation, and in standalone mode there isn't one.",[14,464,465,466,470],{},"Everything the read-only guarantee covers still holds — see\n",[63,467,469],{"href":468},"\u002Fdocs\u002Fmcp\u002Fsafety-and-privacy","Safety & privacy",". There is no tool that writes,\nand connection details are given once, at startup, so they never travel through\na tool call into the conversation or the chat history.",[14,472,473,474,477,478,481],{},"One honest caveat about the command line: arguments to a process are visible to\nother processes on the same machine (",[45,475,476],{},"ps",", or ",[45,479,480],{},"docker inspect"," for a container).\nOn a personal machine that is your own account's processes and nobody else's; on\na shared host, prefer the extension, which stores the value in the client's own\nconfiguration rather than an argument list you type into a shell.",[30,483,485],{"id":484},"logging","Logging",[14,487,488,489,492],{},"The server refuses to start without a log destination, because standard output\ncarries the protocol and a stray log line would corrupt it. The extension\nsupplies one from its manifest, and the Docker image has its own inside the\ncontainer. Running the binary directly, set ",[45,490,491],{},"LOG_FILE"," yourself:",[38,494,496],{"className":134,"code":495,"language":136,"meta":47,"style":47},"LOG_FILE=~\u002F.dbconvert-streams\u002Fstream-mcp.log stream-mcp postgres:\u002F\u002F…\n",[45,497,498],{"__ignoreMap":47},[140,499,500,502,506,509,512],{"class":142,"line":143},[140,501,491],{"class":348},[140,503,505],{"class":504},"szBVR","=",[140,507,508],{"class":150},"~\u002F.dbconvert-streams\u002Fstream-mcp.log",[140,510,511],{"class":146}," stream-mcp",[140,513,514],{"class":150}," postgres:\u002F\u002F…\n",[14,516,517,518,521,522,524],{},"Inside a container that log is written to ",[45,519,520],{},"\u002Fapp\u002Flogs",", which ",[45,523,173],{}," throws away\nwith the container. Mount the folder to keep it:",[38,526,528],{"className":134,"code":527,"language":136,"meta":47,"style":47},"docker run -i --rm -v .\u002Flogs:\u002Fapp\u002Flogs slotix\u002Fstream-mcp postgres:\u002F\u002F…\n",[45,529,530],{"__ignoreMap":47},[140,531,532,534,536,538,540,542,545,547],{"class":142,"line":143},[140,533,147],{"class":146},[140,535,151],{"class":150},[140,537,155],{"class":154},[140,539,158],{"class":154},[140,541,244],{"class":154},[140,543,544],{"class":150}," .\u002Flogs:\u002Fapp\u002Flogs",[140,546,161],{"class":150},[140,548,514],{"class":150},[14,550,551],{},"Writes are buffered and flushed once a second, so a server that is killed in its\nfirst second leaves nothing behind — worth knowing before concluding that a\ncrashing container logs nothing.",[553,554,555],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":47,"searchDepth":200,"depth":200,"links":557},[558,559,560,564,565],{"id":32,"depth":200,"text":33},{"id":70,"depth":200,"text":71},{"id":127,"depth":200,"text":128,"children":561},[562,563],{"id":300,"depth":208,"text":301},{"id":332,"depth":208,"text":333},{"id":451,"depth":200,"text":452},{"id":484,"depth":200,"text":485},"Run the DBConvert Streams MCP server on its own — from connection strings, with no DBConvert Streams installation behind it. As a one-click Claude extension, or as a Docker image any MCP client can launch.","md",{},false,"\u002Fdocs\u002Fmcp\u002Fstandalone",null,{"title":5,"description":566},"docs\u002Fmcp\u002Fstandalone","NF0k_lAi2_xCJmIbsNlkQH_v79NjyN1g4jIZCmAP3TY",1788051375347]