chatgpt使用自建mcp插件和openai的tunnel做开发

引言

最近AI使用频繁;因此开通了日区GPT Plus;本来之前还研究怎么优化每次Codex的5小时限额;上周 Tibo就宣布把5小时限额去掉

这就导致周额度相形见绌了;前天把额度用完后就在研究其它的方法;传奇程序员不能就这样下线啊;

正巧看到L站的一篇文章:通过 Coding Tools MCP 最大化利用 GPT 订阅额度,解决额度焦虑

本文介绍我实践出的简易临时使用GPT Web开发本地项目的方法; 路径与上文有些不同

解决方案

解决方案和L站文章介绍的方法类似;都是使用GPT Web端的插件功能

一句话总结:

使用开发人员模式,自建一个可以访问本地文件的MCP服务,通过GPT官方隧道(tunnel) 让AI可以直接读写本地指定的文件达到本地开发的目的

新版方案-纯文件访问

我对上面的方案持保留态度

因为我小号用这个方案账号被封了;我只能猜测大概率是这个原因

因此我决定不使用官方的tunnel(我觉得可能是因为官方tunnel会调用官方API接口导致账号出问题)

因此我又研究出了用cloudflare tunnel穿透的方法(PS:我本来也做了公开MCP服务的方法;但没CF的网络加持总是time out)

此处只说明和下面流程不同的地方:

  • 使用支持Oauth认证的MCP proxy

这里使用的工具是:mcp-auth-proxy

GPT官方隧道(tunnel) 不仅实现了http访问;还加了自己的API鉴权;

modelcontextprotocol/server-filesystem不支持直接Http访问;因此需要加一个OAuth 2.1/OIDC gateway

**mcp-auth-proxy**不仅是mcp代理,还集成了MCP所需的认证功能;比如GPTMCP支持的DCR(动态客户端注册);没有这个功能的话就需要同时用tunnel转发MCP Server以及Oauth认证服务

我测试OK的命令是:

1
2
3
4
5
6
7
8
9
10
11
D:\Tools\mcp-auth-proxy.exe `
-d "D:\Tools\data" `
--listen 192.168.1.XX:24024 `
--external-url https://{your-domain} `
--no-auto-tls `
--tls-accept-tos `
--oidc-configuration-url "https://your-provider.com/.well-known/openid-configuration" `
--oidc-client-id "your-oidc-client-id" `
--oidc-client-secret "your-oidc-client-secret" `
--oidc-allowed-users "[email protected],[email protected]" `
-- npx.cmd -y @modelcontextprotocol/server-filesystem "D:\Tools"
  • 在CF的Tunnels中配置一个本机路由(到your-domain)的应用

cf_tunnel_application

确保直接公网访问会报401

  • ChatGpt的插件直接使用OAuth身份认证

地址填your-domain/mcp

点击高级OAuth设置的时候会自动识别出认证授权路由

mcp oauth

创建成功后点击连接,会自动跳转PocketId;最后点击页面Auth即可连接成功

支持完整开发能力的单MCP服务方案

上面的MCP服务modelcontextprotocol/server-filesystem只能让AI支持访问一个PC的文件夹(可以多目录),一个mcp-auth-proxy.exe对应一个MCP服务

除了文件访问,开发时还需要的一大功能是命令执行;我又找到另一个集成专为开发服务的MCP服务:

DesktopCommanderMCP

它的介绍是给Claude使用,实际也很配ChatGPT Web

因此,本地执行命令就变成了:

1
2
3
4
5
6
7
8
9
10
11
D:\Tools\mcp-auth-proxy.exe `
-d "D:\Tools\data" `
--listen 192.168.1.XX:24024 `
--external-url https://{your-domain} `
--no-auto-tls `
--tls-accept-tos `
--oidc-configuration-url "https://your-provider.com/.well-known/openid-configuration" `
--oidc-client-id "your-oidc-client-id" `
--oidc-client-secret "your-oidc-client-secret" `
--oidc-allowed-users "[email protected],[email protected]" `
-- npx.cmd -y @wonderwhy-er/desktop-commander@latest

PS:同理,后面的GPT官方隧道(tunnel),也可以换这个@wonderwhy-er/desktop-commander@latest

这个启动命令不能设置允许访问的文件;但可以直接在AI中设置;

ChatGPT网页端配置完成后,直接对AI说 修改配置即可

change mcp setting

MCP测试连通性时,推荐POSTMAN

下面是之前使用官方tunnel的保留方案:


旧版原生 OpenAI API Tunnels方案

经测试,免费用户也可以这样做

不过免费用户不能使用高级模型;意义不大

操作步骤

开启开发人员模式

打开https://chatgpt.com/,点击左下角头像:设置账户安全与登录→打开开发人员模式

chatgpt dev

创建GPT隧道(tunnel)

打开OpenAI API平台:设置中的Tunnels - OpenAI API

OpenAPI tunnels

创建一个tunnel,复制好它的ID tunnel_6axxxx备用;

点击Download tunnel-clientGithub上下载最新的客户端备用

创建隧道专用APIKey

还是OpenAI API平台:设置中的API keys - OpenAI API

创建一个专用的APIKEY权限勾选TunnelsRead Use;ProjectDefalt project

tunnel api key

复制生成的sk-proj-IEAXXXX 这样的APIKey备用

本地连接隧道

下载好前面提到的tunnel-client.zip后解压开;在你期望MCP访问的目录;按住shift右键,点击在此处运行powershell

由于ChatGPT不能直连;因此还需要配置socket代理

文件路径不知道有什么问题;我发现只能用相对路径,

填入备用的API Keytunnel id后执行以下命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# OpenAI 控制面走代理
$env:CONTROL_PLANE_HTTP_PROXY = "http://127.0.0.1:7890"

# 原有参数
$env:CONTROL_PLANE_API_KEY = "sk-proj-你的API密钥"
$env:CONTROL_PLANE_TUNNEL_ID = "tunnel_6xxxx"

#直接将当前目录设为mcp可访问
C:\Applications\Tools\tunnel-client.exe run --mcp.command 'cmd.exe /c npx.cmd -y @modelcontextprotocol/server-filesystem "."'

# http://127.0.0.1:8080/ui#logs

# C:\Users\王帅\AppData\Roaming\tunnel-client

# C:\Applications\Tools\tunnel-client.exe init `
# --sample sample_mcp_stdio_local `
# --profile gmail-tunnel `
# --tunnel-id $([Environment]::GetEnvironmentVariable("CONTROL_PLANE_TUNNEL_ID","User")) `
# --mcp.command 'cmd.exe /c npx.cmd -y @modelcontextprotocol/server-filesystem "."'

# $env:CONTROL_PLANE_HTTP_PROXY=[Environment]::GetEnvironmentVariable("CONTROL_PLANE_HTTP_PROXY","User"); $env:CONTROL_PLANE_API_KEY=[Environment]::GetEnvironmentVariable("CONTROL_PLANE_API_KEY","User"); $env:CONTROL_PLANE_TUNNEL_ID=[Environment]::GetEnvironmentVariable("CONTROL_PLANE_TUNNEL_ID","User"); tunnel-client run --profile gmail-tunnel

假如有什么不懂或报错直接问ChatGPT

执行成功后打开网页:http://127.0.0.1:8080

正常右上角会显示Health:liveReady:ready

openai tunnel ready

新建MCP插件(Plugin)

回到GPT Web打开插件页面;点击右边的+新增插件

注意:要先执行前面的命令,本地启动MCP服务之后再创建Plugin

隧道选择刚刚创建的

身份验证我直接用的none(未授权)

勾选下方的我了解并希望继续

chatgpt add plugin

创建成功后点击连接;

后续就可以在插件中看到已安装的个人插件

person plugin

也可以在设置插件中查看

ChatGPT Web端的插件中;如果能看到MCP支持的操作;则表明一切成功;如果看不到可以点击右上角设置→重新连接

chatgpt_plugin_mcp_success

测试

ChatGPT web上新开一个聊天;选择个人插件让它调用MCP返回文件列表测试最终结果

chatgpt_plugin_test

恭喜你,学会了ChatGPT的插件开发!

注意事项

  • 添加插件报错:创建连接器时出错

    1
    Something went wrong. If this issue persists please contact us through our help center at help.openai.com

gptplugin_something_wrong

遇到这个错误,就是前面说的;MCP插件无法通过tunnel连接到服务器导致的;

解决方法就是先执行tunnel-client.exe run命令创建好MCP服务再添加插件

通过F12检查:https://chatgpt.com/backend-api/aip/connectors/mcpresponse返回:

1
2
3
4
5
6
7
8
9
10
{
"detail": {
"type": "mcp_error",
"developer_message": "MCP SSE probe returned 404 from openai.org",
"mcp_url": "https://tunnel-service.gateway.unified-0.internal.api.openai.org/v1/mcp/tunnel_6aXXXXX",
"kind": "invalid_response",
"upstream_status": 404,
"response_content_type": "application/json"
}
}

即可知道原因

  • 每次断开tunnel客户端后假如遇到访问问题

设置插件→选择个人插件→右上角菜单→重新连接

chatgpt plugin reconnect

  • 要是还遇到什么奇怪的问题,可以把GPT的MCP插件删了重新添加

参考资料