Contentstack MCP Streamable HTTP Server
DEPRECATED: Contentstack will build a Streamable http server soon
A Streamable HTTP transport wrapper for the @contentstack/mcp package. This server exposes all Contentstack MCP tools over HTTP instead of stdio, enabling remote access, horizontal scaling, and integration with browser-based and networked MCP clients.
How It Works
This server acts as a transparent proxy:
- Spawns
@contentstack/mcpas a child process communicating via stdio - Discovers all available tools from the child process
- Exposes them over Streamable HTTP transport at a single
/mcpendpoint - Forwards tool calls from HTTP clients to the underlying Contentstack MCP server
All tools from @contentstack/mcp are available — CMA, CDA, Analytics, BrandKit, Launch, DeveloperHub, Lytics, and Personalize.
Prerequisites
- Node.js 18+
- A Contentstack account with appropriate credentials
- OAuth authentication completed (for CMA, Analytics, BrandKit, Launch, DeveloperHub, Personalize)
Setup
1. Install dependencies
npm install
2. Configure environment variables
Copy the example env file and fill in your credentials:
cp .env.example .env
Edit .env with your Contentstack credentials:
CONTENTSTACK_API_KEY=your_stack_api_key
GROUPS=cma
See Environment Variables for the full list.
3. Authenticate with OAuth
Before using CMA, Analytics, BrandKit, Launch, DeveloperHub, or Personalize tools, run the OAuth flow:
npm run auth
This stores your OAuth tokens locally for the child process to use.
4. Build and run
npm run build
npm start
For development with auto-reload:
npm run dev
The server starts on port 3000 by default.
Connecting a Client
Configure your MCP client to connect via Streamable HTTP. Example mcp-config.json:
{
"mcpServers": {
"contentstack": {
"type": "streamable-http",
"url": "http://localhost:3000/mcp"
}
}
}
Cursor IDE
Add to your Cursor MCP settings (.cursor/mcp.json):
{
"mcpServers": {
"contentstack": {
"type": "streamable-http",
"url": "http://localhost:3000/mcp"
}
}
}
Environment Variables
| Variable | Required | Description |
|---|---|---|
PORT | No | Server port (default: 3000) |
CONTENTSTACK_API_KEY | Yes | Your Stack API Key |
CONTENTSTACK_DELIVERY_TOKEN | CDA only | Delivery token for Content Delivery API |
CONTENTSTACK_BRAND_KIT_ID | BrandKit only | Brand Kit ID |
CONTENTSTACK_LAUNCH_PROJECT_ID | Launch only | Launch Project ID |
CONTENTSTACK_PERSONALIZE_PROJECT_ID | Personalize only | Personalize Project ID |
LYTICS_ACCESS_TOKEN | Lytics only | Lytics access token |
GROUPS | No | Comma-separated API groups to enable (default: cma). Options: cma, cda, analytics, brandkit, launch, developerhub, lytics, personalize, all |
API Groups
| Group | Authentication | Required Configuration |
|---|---|---|
| CMA | OAuth | Stack API Key |
| CDA | Token-based | Stack API Key + Delivery Token |
| Analytics | OAuth | Stack API Key |
| BrandKit | OAuth | Stack API Key + Brand Kit ID |
| Launch | OAuth | Stack API Key + Launch Project ID |
| DeveloperHub | OAuth | Stack API Key |
| Lytics | Token-based | Lytics Access Token |
| Personalize | OAuth | Stack API Key + Personalize Project ID |
Endpoints
| Method | Path | Description |
|---|---|---|
POST | /mcp | MCP JSON-RPC requests (initialize, tool calls) |
GET | /mcp | SSE stream for server-to-client notifications |
DELETE | /mcp | Session termination |
GET | /health | Health check with tool count and active sessions |
License
MIT