3GPP FTP Remote MCP Server
Allows importing selected public 3GPP FTP files into a user's ChatGPT Library by streaming them through the server's download relay and invoking ChatGPT's upload API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@3GPP FTP Remote MCP Serversearch for 5G NR specifications"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
3GPP FTP Remote MCP Server
A remote MCP server for browsing public files from the 3GPP FTP service. It runs on Cloudflare Workers using TypeScript, Wrangler, and Streamable HTTP transport.
The MCP endpoint is /mcp. The server is stateless and does not require 3GPP credentials. All 3GPP source access is read-only; one separate, explicitly invoked tool can save a selected public file to the user's ChatGPT Library.
Tools
search(query: string)
Uses the official 3GPP filename conventions to locate public files before falling back to a bounded directory crawl. Supported query forms include:
TS/TR references such as
TS 23.501orTR 21.900 v15.1.1Versioned spec archives such as
23501-k20.zipMultipart specs such as
29.198-08or29198-08-651.zipTDoc identifiers such as
S2-2601720,SP-200062, and modern RAN/SA/CT WG identifiersConventional CR member filenames such as
23501_CR1668r4_(Rel-16)_S2-2001278_....docxExact paths or URLs under the configured public 3GPP FTP origin
Each result contains:
id: canonical 3GPP FTP path used byfetchtitle: filenameurl: public 3GPP URLmetadata: path, strategy, parsed identifiers, modified date, size, and extension when available
Exact files and direct paths are validated with a one-byte ranged GET. The 3GPP server rejects many HEAD requests even when the same public file is downloadable.
The response can also contain warnings. A CR number alone does not determine a public FTP path; CR lookup without a WG/TSG TDoc requires a future portal adapter or CR database index, so the server reports that limitation instead of guessing a link.
fetch(id: string)
Fetches one result by its canonical path. Text and HTML content is returned as text, up to the configured character limit. Binary formats such as ZIP, RAR, DOCX, XLSX, and PDF return metadata, a Worker relay URL, and an MCP resource_link. The file is streamed only when a client follows that link.
download_file(id: string)
Returns a read-only MCP resource_link for an ID returned by search. The resource points to /download?id=<artifact-id> on the same Worker. This explicit tool is useful for clients that do not automatically act on the resource link included by fetch.
import_to_chatgpt(id: string)
Renders a versioned MCP Apps widget that streams one result through /download, constructs a browser File, and calls ChatGPT's optional window.openai.uploadFile(file, { library: true }) API. This is the only write-capable tool because it creates a ChatGPT-hosted file. Its MCP annotations mark it non-read-only and non-idempotent, and its description requires an explicit user request before invocation.
The widget:
auto-starts only after the explicit
import_to_chatgpttool callsaves to ChatGPT Library when that feature is available to the user
persists a private import key to avoid duplicate uploads when the widget rerenders
enforces
THREEGPP_IMPORT_MAX_BYTESbefore upload, including for responses without a declared sizefalls back to opening the streamed file when the ChatGPT upload API is unavailable
does not automatically attach the saved file to the current chat or a project
Streaming Relay
The /download HTTP route:
accepts
GET,HEAD,OPTIONS, and one HTTP byte rangepermits only the configured 3GPP origin and
/ftprootstreams the upstream response body without reading it into Worker memory
adds download, MIME, CORS, and
nosniffheadersimplements
HEADwith a one-byte upstreamGET, because the 3GPP service commonly rejects directHEADrequestsdoes not persist files in Worker storage
Related MCP server: File Search Tool
Project Layout
src/index.ts Remote MCP server, resource, and tool registration
src/conventions.ts Official TS/TR, TDoc, CR parsing and group routing
src/import-to-chatgpt.ts ChatGPT Library import preparation and widget
src/relay.ts Restricted, zero-storage streaming download relay
src/threegpp.ts Public 3GPP listing, search, and fetch logic
src/types.ts Worker environment and result types
tests/ Deterministic convention, resolver, and relay tests
wrangler.jsonc Cloudflare Worker configuration
chatgpt-plugin/ ChatGPT registration metadata and setup guide
legacy-python/ Original Python MCP prototypePrerequisites
Node.js and npm
A Cloudflare account for deployment
Verify the local tools:
node --version
npm --versionInstall
cd 3gpp-ftp-connector
npm install
npm test
npm run typecheckRun Locally
Start the Worker development server:
npm run devWrangler normally serves it at http://localhost:8787. Confirm the Worker is running:
curl http://localhost:8787/The response should advertise /mcp, Streamable HTTP, and the search, fetch, download_file, and import_to_chatgpt tools.
Test the relay metadata and a small byte range without downloading the whole archive:
curl --head "http://localhost:8787/download?id=%2Fftp%2FSpecs%2Farchive%2F23_series%2F23.501%2F23501-k20.zip"
curl --range 0-31 "http://localhost:8787/download?id=%2Fftp%2FSpecs%2Farchive%2F23_series%2F23.501%2F23501-k20.zip" --output relay-sample.binTest with MCP Inspector
Keep npm run dev running and open a second terminal:
npx @modelcontextprotocol/inspector@latestIn Inspector:
Select Streamable HTTP.
Enter
http://localhost:8787/mcp.Connect and list the available tools.
Call
searchwith a TS/TR reference, filename, TDoc, CR filename, path, or URL.Pass a returned
idtofetch.Call
download_filewith the sameidand inspect itsresource_link.Call
import_to_chatgptand inspect its structured result andui://threegpp/import-to-chatgpt-v1.htmlresource.
MCP Inspector can verify tool discovery, annotations, structured output, resource MIME type, and widget HTML. It does not provide ChatGPT's optional window.openai.uploadFile host API, so the actual Library write must be tested in ChatGPT after deployment. The automated test suite uses a mocked bridge to verify the complete widget upload and deduplication flow.
Example search input:
{
"query": "S2-2601720"
}Example fetch input:
{
"id": "/ftp/tsg_sa/WG2_Arch/TSGS2_174_Malta_2026-04/Docs/S2-2601720.zip"
}Deploy
Authenticate Wrangler and deploy:
npx wrangler login
npm run deployWith the default Worker name, the deployed endpoint is:
https://threegpp-ftp-mcp.<cloudflare-subdomain>.workers.dev/mcpStreamed files use the same origin:
https://threegpp-ftp-mcp.<cloudflare-subdomain>.workers.dev/download?id=<artifact-id>Wrangler prints the exact URL after a successful deployment.
Connect to ChatGPT
The maintained ChatGPT app/plugin name, description, registration values, and test prompts are in chatgpt-plugin/. Update that metadata when the public endpoint or tool behavior changes.
Configuration
Public configuration is stored in wrangler.jsonc:
THREEGPP_BASE_URL: 3GPP website originTHREEGPP_FTP_ROOT: allowed FTP path rootTHREEGPP_SEARCH_ROOTS: comma-separated directories searched by defaultTHREEGPP_SEARCH_MAX_DIRECTORIES: maximum directories visited only by the generic fallbackTHREEGPP_SEARCH_MAX_RESULTS: maximum results returned per searchTHREEGPP_FETCH_TEXT_LIMIT: maximum text characters returned byfetchTHREEGPP_IMPORT_MAX_BYTES: maximum bytes the browser widget may buffer for one ChatGPT Library import; defaults to 100 MiB and is capped at 512 MiB
The Worker uses nodejs_compat because the Cloudflare Agents SDK currently includes dependencies that import Node built-in modules.
Current Scope
Public 3GPP FTP access only
Read-only
search,fetch, anddownload_filetoolsExplicit
import_to_chatgptwrite tool for ChatGPT LibraryNo portal authentication
Original files are relayed on demand with no persistent downloads or storage
No ZIP, RAR, Office, or PDF extraction inside the Worker
Cloudflare Workers can natively decompress deflate streams, so a strictly capped ZIP/DOCX proof of concept is technically possible. It is not enabled because the free plan allows only 10 ms of CPU per request, while RAR requires JavaScript/Wasm archive processing and comment/revision-aware Office extraction requires additional ZIP/XML work. That combination would be unreliable for real meeting packages. The relay therefore transfers original bytes without parsing or storing them. A parser service can be added later without changing the search, fetch, or download_file contracts.
Legacy Python Prototype
The original Python/stdin implementation is retained under legacy-python/. It is not used by the Cloudflare Worker or required for deployment.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that enables programmatic access to IETF RFC documents, allowing users to fetch, search, and extract specific sections from RFCs.35619Apache 2.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables file system search and inspection, including directory listing, regex-based file name and content searches, and reading text, PDF, and DOCX files.1MIT
- AlicenseBqualityDmaintenanceA secure, read-only MCP server for browsing and searching files in a specified directory with path traversal protection and .gitignore support.3MIT
- AlicenseNot gradedqualityDmaintenanceA read-only MCP server for operator-grade release inspection and benchmark browsing.41MIT
Related MCP Connectors
Read-only MCP server for searching Japan government procurement bid information from the KKJ portal.
2,000+ MCP servers read at source level. Know what one does before you connect. Free, no key.
MCP server for Open Archives: Dutch genealogical records and historical page transcriptions.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Kamu1403/3gpp-ftp-connector'
If you have feedback or need assistance with the MCP directory API, please join our Discord server