This repository is a minimal EdgeOne Pages project that shows how to build an MCP server compatible with the OpenAI Apps SDK using Next.js and edge functions.
Live Demo: https://chatgpt-apps-edgeone-pages.edgeone.run
The project demonstrates how to host an MCP server with Tencent Cloud EdgeOne Pages + Functions using Next.js. The MCP server exposes tools to ChatGPT and renders widgets with structured content.
- Next.js 15: React framework with App Router
- Hono: Fast, lightweight web framework for EdgeOne Functions
- MCP SDK: Model Context Protocol implementation
- Tailwind CSS: Utility-first CSS framework
- TypeScript: Type-safe development
- MCP server: A serverless
onRequest
handler built on EdgeOne Functions using Hono - Widget support: The
hello_stat
tool renders dynamic widgets with structured content - CORS support: Built-in logic keeps the server compatible with ChatGPT iframes and browser debugging
- Next.js frontend: Modern React-based UI with Tailwind CSS styling
functions/mcp/index.ts
: Implements MCP JSON-RPC, registers thehello_stat
tool, and handles widget renderingfunctions/httpTransport.ts
: Custom HTTP transport for MCP serverapp/page.tsx
: Next.js landing page that explains the projectapp/layout.tsx
: Root layout with global stylesapp/globals.css
: Tailwind CSS configuration and global stylesedgeone.json
: EdgeOne Pages configuration with CORS headers
- Click the button above for one-click deployment.
- After provisioning, the EdgeOne console assigns a domain that hosts both the Next.js app and the MCP endpoint.
Once deployment finishes, the Next.js app is served from the root path and functions/mcp/index.ts
is automatically mapped to /mcp
.
- Ensure your account has ChatGPT Apps developer access.
- In ChatGPT, open Settings → Connectors → Create.
- Add the EdgeOne Pages deployment URL as the MCP server, for example:
https://<your-project-url>/mcp
- Save the configuration, then call the
hello_stat
tool in a conversation to render a stat widget with your name.
- ChatGPT calls
/mcp
via the MCP protocol, triggering theinitialize
andtools/list
handshake. - When a user invokes
hello_stat
, the server returns structured content with title/value/description. - The widget template is fetched from the Next.js app root and rendered in ChatGPT with the structured data.
- Errors are returned in a structured format so ChatGPT and developers can debug quickly.
examples/chatgpt-apps-edgeone-pages/
├── app/
│ ├── layout.tsx # Next.js root layout
│ ├── page.tsx # Landing page
│ └── globals.css # Global styles with Tailwind
├── functions/
│ ├── mcp/
│ │ ├── index.ts # MCP server with hello_stat tool
│ │ └── [[default]].ts # Dynamic route handler
│ └── httpTransport.ts # Custom HTTP transport for MCP
├── edgeone.json # EdgeOne configuration
├── next.config.js # Next.js configuration
└── tailwind.config.js # Tailwind CSS configuration
- OpenAI Apps SDK docs
- Model Context Protocol spec
- EdgeOne Pages & Functions guide
- ChatGPT connector creation guide
To extend the setup, continue evolving the MCP logic in functions/mcp/index.ts
. EdgeOne Pages scales compute as needed.