From fbc4fc1490ca989d044ff3c6e1e14096994c5f0b Mon Sep 17 00:00:00 2001 From: Jeremiah Lowin <153965+jlowin@users.noreply.github.com> Date: Sun, 22 Jun 2025 15:28:51 -0400 Subject: [PATCH] Add ChatGPT doc --- docs/docs.json | 3 +- docs/integrations/chatgpt.mdx | 158 +++++++++++++++++++++++++++ docs/integrations/claude-desktop.mdx | 2 +- 3 files changed, 161 insertions(+), 2 deletions(-) create mode 100644 docs/integrations/chatgpt.mdx diff --git a/docs/docs.json b/docs/docs.json index 66971c813..096d1ab80 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -124,9 +124,10 @@ "group": "Integrations", "pages": [ "integrations/anthropic", + "integrations/chatgpt", "integrations/claude-desktop", - "integrations/openai", "integrations/gemini", + "integrations/openai", "integrations/contrib" ] }, diff --git a/docs/integrations/chatgpt.mdx b/docs/integrations/chatgpt.mdx new file mode 100644 index 000000000..c5c2f1194 --- /dev/null +++ b/docs/integrations/chatgpt.mdx @@ -0,0 +1,158 @@ +--- +title: ChatGPT + FastMCP +sidebarTitle: ChatGPT +description: Connect FastMCP servers to ChatGPT Deep Research +icon: message-smile +tag: NEW +--- + +ChatGPT supports MCP servers through remote HTTP connections, allowing you to extend ChatGPT's capabilities with custom tools and knowledge from your FastMCP servers. + + +MCP integration with ChatGPT is currently limited to **Deep Research** functionality and is not available for general chat. This feature is available for ChatGPT Pro, Team, Enterprise, and Edu users. + + + +OpenAI's official MCP documentation and examples are built with **FastMCP v2**! Check out their [sample MCP server](https://github.com/openai/mcp-server-sample) which demonstrates FastMCP in action. + + +## Deep Research + +ChatGPT's Deep Research feature requires MCP servers to be internet-accessible HTTP endpoints with **exactly two specific tools**: + +- **`search`**: For searching through your resources and returning matching IDs +- **`fetch`**: For retrieving the full content of specific resources by ID + + +If your server doesn't implement both `search` and `fetch` tools with the correct signatures, ChatGPT will show the error: "This MCP server doesn't implement our specification". Both tools are required. + + +### Tool Descriptions Matter + +Since ChatGPT needs to understand how to use your tools effectively, **write detailed tool descriptions**. The description teaches ChatGPT how to form queries, what parameters to use, and what to expect from your data. Poor descriptions lead to poor search results. + +### Create a Server + +A Deep Research-compatible server must implement these two required tools: + +- **`search(query: str)`** - Takes a query of any kind and returns matching record IDs +- **`fetch(id: str)`** - Takes an ID and returns the record + +**Critical**: Write detailed docstrings for both tools. These descriptions teach ChatGPT how to use your tools effectively. Poor descriptions lead to poor search results. + +The `search` tool should take a query (of any kind!) and return IDs. The `fetch` tool should take an ID and return the record. + +Here's a reference server implementation you can adapt (see also [OpenAI's sample server](https://github.com/openai/mcp-server-sample) for comparison): + +```python server.py [expandable] +import json +from pathlib import Path +from dataclasses import dataclass +from fastmcp import FastMCP + +@dataclass +class Record: + id: str + title: str + text: str + metadata: dict + +def create_server( + records_path: Path | str, + name: str | None = None, + instructions: str | None = None, +) -> FastMCP: + """Create a FastMCP server that can search and fetch records from a JSON file.""" + records = json.loads(Path(records_path).read_text()) + + RECORDS = [Record(**r) for r in records] + LOOKUP = {r.id: r for r in RECORDS} + + mcp = FastMCP(name=name or "Deep Research MCP", instructions=instructions) + + @mcp.tool() + async def search(query: str): + """ + Simple unranked keyword search across title, text, and metadata. + Searches for any of the query terms in the record content. + Returns a list of matching record IDs for ChatGPT to fetch. + """ + toks = query.lower().split() + ids = [] + for r in RECORDS: + record_txt = " ".join( + [r.title, r.text, " ".join(r.metadata.values())] + ).lower() + if any(t in record_txt for t in toks): + ids.append(r.id) + + return {"ids": ids} + + @mcp.tool() + async def fetch(id: str): + """ + Fetch a record by ID. + Returns the complete record data for ChatGPT to analyze and cite. + """ + if id not in LOOKUP: + raise ValueError(f"Unknown record ID: {id}") + return LOOKUP[id] + + return mcp + +if __name__ == "__main__": + mcp = create_server("path/to/records.json") + mcp.run(transport="streamable-http", port=8000) +``` + +### Deploy the Server + +Your server must be deployed to a public URL in order for ChatGPT to access it. + +For development, you can use tools like `ngrok` to temporarily expose a locally-running server to the internet. We'll do that for this example (you may need to install `ngrok` and create a free account), but you can use any other method to deploy your server. + +Assuming you saved the above code as `server.py`, you can run the following two commands in two separate terminals to deploy your server and expose it to the internet: + + +```bash FastMCP server +python server.py +``` + +```bash ngrok +ngrok http 8000 +``` + + + +This exposes your unauthenticated server to the internet. Only run this command in a safe environment if you understand the risks. + + +### Connect to ChatGPT + +Replace `https://your-server-url.com` with the actual URL of your server (such as your ngrok URL). + +1. Open ChatGPT and go to **Settings** → **Connectors** +2. Click **Add custom connector** +3. Enter your server details: + - **Name**: Library Catalog + - **URL**: Your server URL (e.g., `https://abc123.ngrok.io`) + - **Description**: A library catalog for searching and retrieving books + +#### Test the Connection + +1. Start a new chat in ChatGPT +2. Click **Tools** → **Run deep research** +3. Select your **Library Catalog** connector as a source +4. Ask questions like: + - "Search for Python programming books" + - "Find books about AI and machine learning" + - "Show me books by the Python Software Foundation" + +ChatGPT will use your server's search and fetch tools to find relevant information and cite the sources in its response. + +### Troubleshooting + +#### "This MCP server doesn't implement our specification" + + +If you get this error, it most likely means that your server doesn't implement the required tools (`search` and `fetch`). To correct it, ensure that your server meets the service requirements. \ No newline at end of file diff --git a/docs/integrations/claude-desktop.mdx b/docs/integrations/claude-desktop.mdx index 0b03ae198..4c4faba1e 100644 --- a/docs/integrations/claude-desktop.mdx +++ b/docs/integrations/claude-desktop.mdx @@ -2,7 +2,7 @@ title: Claude Desktop + FastMCP sidebarTitle: Claude Desktop description: Call FastMCP servers from Claude Desktop -icon: desktop +icon: message-smile ---