# Building ChatGPT Apps and Claude Connectors
One remote MCP server serves both ChatGPT and Claude. Build the server once. Then package it for each directory.
> [!note] Terms
> OpenAI renamed "connectors" to "apps" on 17 Dec 2025. Anthropic uses "connectors" (MCP only) and "plugins" (MCP + skills).
## Architecture
```mermaid
graph LR
A[ChatGPT app] --> M[Remote MCP server]
B[Claude connector / plugin] --> M
C[Agents, CLI] --> M
M --> API[Product API]
API --> DB[(Postgres + knowledge graph)]
```
## Generic spec
### Transport
- Remote HTTPS server. Streamable HTTP transport. ChatGPT connects only to remote servers.^[Source: [OpenAI: Connect from ChatGPT](https://developers.openai.com/apps-sdk/deploy/connect-chatgpt)]
- Pin the MCP spec revision. The 2026-07-28 revision removes sessions and the `initialize` handshake. The server becomes stateless.^[Source: [MCP changelog](https://modelcontextprotocol.io/specification/2026-07-28/changelog)]
- Use an official MCP SDK (TypeScript or Python). It absorbs spec changes.
### Auth
- OAuth 2.0 for any account-linked data. Anthropic requires it for authenticated services.^[Source: [Claude: connector submission](https://claude.com/docs/connectors/building/submission)]
- Publish Protected Resource Metadata. Prefer Client ID Metadata Documents over Dynamic Client Registration.^[Source: [MCP 2025-11-25 changelog](https://modelcontextprotocol.io/specification/2025-11-25/changelog)]
- Option: a free, no-auth, read-only tier for discovery.
### Tools
- 5–10 tools. Clear verb names. JSON Schema inputs with examples in the description.
- Every tool has a `title` and a `readOnlyHint` or `destructiveHint` annotation. Anthropic rejects tools without them.
- Return structured content plus a short text summary. Paginate large results.
### Docs and policy
- Privacy policy. A missing policy means immediate rejection on Claude.
- Setup and usage docs with example prompts.
## Platform specifics
| | ChatGPT (Apps SDK) | Claude |
|---|---|---|
| Test | Developer Mode: Settings → Apps & Connectors → Advanced | Add as custom connector |
| UI | Optional widgets rendered in chat | Text and artifacts |
| Package | MCP server + app metadata | Connector (MCP only) or plugin (MCP + skills, GitHub repo) |
| Validate | OpenAI submission guidelines | Pre-submission checklist; `claude plugin validate` for plugins |
| Submit | OpenAI app submission | Claude submission portal (paid plan, no partner programme)^[Source: [Claude: publish](https://claude.com/docs/directory/publish)] |
## Build steps
1. Write the tool list and schemas.
2. Build the server with the SDK. Deploy behind HTTPS.
3. Add OAuth.
4. Test with MCP Inspector.
5. Test in Claude (custom connector) and ChatGPT (Developer Mode).
6. For Claude, add skills that chain the tools into workflows. See [[Agent Skills as Codified Domain Expertise]].
7. Write the privacy policy and docs. Submit to both directories.
## Drugverse tool set (draft)
- `search_entity`: free text → candidate entities
- `resolve_identifier`: any ID or symbol → canonical entity, with ambiguity flags
- `get_entity`: full Scope profile
- `get_mechanism`: drug → targets → pathways
- `find_paths`: graph paths between two entities
- `get_evidence`: literature and source evidence for a link
- `run_analysis`: async job (e.g. repurposing scan), returns a job ID
- `get_versions`: source versions in the current release
All read-only. See [[Making Drugverse Agent-Accessible]].
----
tags: #boat #ai
links: [[Drugverse]] [[Connector Layer and MCP]] [[CLI vs MCP]] [[AI Agents Stack]] [[TechBio MoC]]