ChatGPT Pro on the web cannot open a project folder on your computer directly. To give it access to local code, run DevSpace on your computer, expose only the intended project as an MCP workspace, and use Tailscale Funnel to provide a public HTTPS endpoint that ChatGPT can reach. Add the DevSpace connection from the Plugins page in ChatGPT on the web—not by creating an app in Settings.
The shortest route is to restrict DevSpace to specific Project roots, expose 127.0.0.1:7676 through Funnel, enable ChatGPT Developer mode, and enter the complete /mcp URL on the Plugins page. As of August 27, 2026, OpenAI's official connection guide says Developer mode availability can depend on the account and workspace policy. If the option is missing, this connection method is not available to that account yet.
The steps below use macOS and DevSpace 1.0.8. Start with a test repository; do not expose a project that contains secrets, client data, or production configuration.
How the connection is routed
ChatGPT Pro on the web
│
│ HTTPS + OAuth
▼
https://<device>.<tailnet>.ts.net/mcp
│
│ Tailscale Funnel
▼
http://127.0.0.1:7676/mcp
│
│ DevSpace
▼
/Users/yourname/Projects/example-app
DevSpace listens only on 127.0.0.1:7676, while Funnel provides the public HTTPS entry point. Tailscale Serve is not a substitute here: Serve is available only to devices inside the tailnet, whereas Funnel exposes the endpoint publicly. See the Tailscale Funnel documentation for the distinction.
Prerequisites
According to the DevSpace 1.0.8 Setup Guide, you need:
- Node.js
>=22.19 <27 - npm, Git, and Bash
- A signed-in Tailscale CLI
- ChatGPT Pro on the web, with Developer mode visible for the account
- The absolute path of the project you want to expose
As of August 27, 2026, Tailscale still labels Funnel as beta and requires MagicDNS to be enabled for the tailnet. The first approval creates valid HTTPS certificates and adds the Funnel node attribute, but MagicDNS must already be enabled. See the Funnel documentation for these requirements.
Funnel officially requires Tailscale 1.38.3 or later, but Tailscale changed the Serve and Funnel CLI syntax in version 1.52. The commands below use the 1.52-or-later syntax. If your client is older, update to the current stable release first. See the Funnel CLI documentation for the syntax change.
Check that the commands are available:
node --version
git --version
bash --version
tailscale version
For the first connection, create a test repository without sensitive information. Set the allowed directory to the project itself, not your home directory or the entire Projects folder.
Step 1: Start Tailscale Funnel
DevSpace listens on 127.0.0.1:7676 by default. Forward public traffic to that address:
tailscale funnel --bg http://127.0.0.1:7676
The first time you enable Funnel on a device, the terminal provides a link to the Tailscale admin page. Open it and approve Funnel for the device, then check the status:
tailscale funnel status
The command displays a public address similar to:
https://<device>.<tailnet>.ts.net
Record only this origin for now; do not append /mcp. The --bg option keeps the Funnel configuration active in the background. See the Funnel CLI documentation for details.
Step 2: Initialize DevSpace
Run:
npx @waishnav/devspace@1.0.8 init
Check four items in the interactive setup:
- Select ChatGPT as the client.
- Keep the host at
127.0.0.1and the port at7676. - Set Project roots to the absolute path of the target project only, such as
/Users/yourname/Projects/example-app. - Set Public base URL to the Funnel origin, such as
https://<device>.<tailnet>.ts.net. Do not add/mcphere.
Initialization generates an Owner password. Save it in a password manager and enter it later only on the DevSpace OAuth approval page.
Run the diagnostic after setup:
npx @waishnav/devspace@1.0.8 doctor
DevSpace 1.0.8 stores its regular configuration in ~/.devspace/config.json and authentication data in ~/.devspace/auth.json. Do not commit the latter or expose it in screenshots or troubleshooting logs.
Step 3: Start the service and check the endpoints
Start DevSpace in one terminal:
npx @waishnav/devspace@1.0.8 serve
Keep it running and execute these checks in another terminal:
curl -i http://127.0.0.1:7676/healthz
curl -i https://<device>.<tailnet>.ts.net/healthz
curl -i https://<device>.<tailnet>.ts.net/mcp
curl -i https://<device>.<tailnet>.ts.net/.well-known/oauth-protected-resource/mcp
Expect the following results:
| Check | Expected result |
|---|---|
Local /healthz |
200 |
Public /healthz |
200 |
Public /mcp without authorization |
401 |
| OAuth protected-resource metadata | 200 and JSON |
A 401 response from /mcp is expected: anonymous requests must not be able to call tools. You can verify the OAuth discovery URL in the DevSpace 1.0.8 Configuration documentation.
Step 4: Add the connection from the ChatGPT Plugins page
This step uses two different pages. Settings is only where you enable Developer mode; add the DevSpace connection from the Plugins page in ChatGPT on the web:
- In ChatGPT on the web, open Settings → Security and login, then enable Developer mode.
- Open the ChatGPT Plugins page.
- Select the plus button to create a plugin.
- Enter a name and description. Under Connection, use the complete URL:
https://<device>.<tailnet>.ts.net/mcp. - After creation, confirm that the discovered tool names and descriptions come from DevSpace.
- Complete the OAuth flow as prompted, entering the saved Owner password on the DevSpace approval page.
This is the sequence in OpenAI's current documentation; see Connect and test your plugin. If Developer mode is missing or the Plugins page has no option to add a connection, check the account and workspace policy. Do not work around the restriction by disabling DevSpace authentication.
Step 5: Open the project in a new chat
Start a new ChatGPT conversation and add the DevSpace connection from the tools menu. For the first request, provide the absolute project path instead of asking ChatGPT to guess it:
Use DevSpace to open this local workspace:
/Users/yourname/Projects/example-app
Read only. Do not modify files or run commands with side effects.
If AGENTS.md or CLAUDE.md exists at the project root, read it first. Then tell me:
1. the project's technical stack;
2. its start and test commands;
3. the current git status;
4. which files you actually read.
DevSpace first uses open_workspace to open the project, then reuses the returned workspaceId in the same conversation. A root-level AGENTS.md or CLAUDE.md is returned as tool context only after the workspace opens. See the DevSpace 1.0.8 ChatGPT coding workflow.
Close the public entry point when you are done
DevSpace provides remote access to your local development machine. Keep at least these boundaries in place:
- Limit Project roots to the project you currently need.
- Enter the Owner password only on the DevSpace OAuth page, never in a chat message.
- Check which tools ChatGPT actually discovers on the Plugins page. The account and workspace policy determine which capabilities are available.
- Inspect symlinks inside Project roots. DevSpace issue #45 reports file tools reaching outside an allowed directory through a symlink, and the path check in version 1.0.8 still compares path strings without resolving the symlink target. Do not keep links to sensitive locations inside an allowed directory.
allowedRootsis not an operating-system sandbox. Shell commands run with the local user's privileges; use a separate OS user, container, or development machine for sensitive repositories.
When you are finished, stop DevSpace and disable Funnel:
tailscale funnel --https=443 off
For the exact directory, OAuth, and local-command boundaries, see the DevSpace 1.0.8 Security Model.
Troubleshoot the connection layer by layer
| Symptom | Check first |
|---|---|
doctor fails |
Node, Git, Bash, Project roots, and publicBaseUrl |
Local /healthz fails |
Whether DevSpace is still running and whether port 7676 is already in use |
Local returns 200, but public HTTPS fails during TLS/SSL |
Funnel status, DNS, the HTTPS certificate, and the Tailscale client version; update the client and rerun the Funnel command |
Unauthenticated /mcp does not return 401 |
Stop the setup and inspect the OAuth and authentication configuration |
| OAuth metadata still points to localhost | Change publicBaseUrl to the public origin, restart DevSpace, refresh the connection on the Plugins page, and start a new chat |
| DevSpace rejects the project path | Whether the prompt uses an absolute path and whether that path is inside Project roots |
| The plugin exists, but a new chat shows no tools | Add the connection from the tools menu; if tools are still missing, open the connection details, select Refresh, and start another new chat |
On August 26, 2026, an older Tailscale client on the macOS system used for this setup passed the local health check but failed during the public TLS connection. Updating Tailscale to 1.102.3 and rerunning tailscale funnel --bg http://127.0.0.1:7676 restored a 200 response from the public /healthz endpoint.
Version 1.102.3 is simply the version that worked in this troubleshooting session; it is not a required version. If you see the same symptom, update to the current stable release first, then check each layer in order: local service → Funnel → OAuth → ChatGPT.
To verify the connection, first confirm that the Plugins page lists the DevSpace tools and that a new chat can open the specified absolute path. Then enter the absolute path of a neighboring directory outside Project roots and confirm that DevSpace rejects it. This last check validates ordinary path configuration only; it does not cover symlinks or Shell permissions and does not prove sandbox isolation.
FAQ
Do I need an OpenAI API key?
You do not need to configure an OpenAI Platform API key for this setup. It uses your ChatGPT account sign-in and DevSpace OAuth to authorize the local MCP connection. The Owner password generated by DevSpace is used only on its own approval page.
Why can't I use localhost?
ChatGPT runs in the cloud and cannot reach 127.0.0.1 on your computer. OpenAI requires the MCP server to use a public HTTPS endpoint or Secure MCP Tunnel. This setup uses Tailscale Funnel for the HTTPS endpoint; see the OpenAI MCP connection guide.
Can I use Tailscale Serve instead of Funnel?
Not for this direct connection. Serve exposes the local service only to devices inside your tailnet, while ChatGPT's cloud service is outside it. Funnel provides the public HTTPS entry point.
I created the plugin. Why is DevSpace missing from a new chat?
First add the DevSpace connection from the new chat's tools menu. If it still does not appear, open the connection on the Plugins page, confirm the /mcp URL, select Refresh, review the updated tools and metadata, and then start a new chat. Delete and recreate the connection only if refreshing does not fix it.
Can ChatGPT modify local files?
DevSpace 1.0.8's default minimal mode exposes open_workspace, read, write, edit, and bash, so the connection itself supports file changes and command execution. Whether ChatGPT can call those tools still depends on the account, workspace policy, and confirmation flow. Use a read-only prompt for the first connection to verify the directory boundary. Before allowing writes or commands, remember that allowedRoots is not a shell sandbox; isolate sensitive projects with a separate OS user, container, or development machine.