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., "@MCP Demo Serverread the widget resource file"
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.
MCP Demo Server
A stateless HTTP Streaming server built with Model Context Protocol (MCP) and Express.
π Live Demo
Production URL: https://mcp-demo-d3cj.onrender.com/mcp
Try it now:
curl -X POST https://mcp-demo-d3cj.onrender.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'π Documentation
Quick Start Guide - Get started in 5 minutes
HTTP Streaming Guide - Complete HTTP Streaming Transport guide
Usage Examples - Full code examples (Node.js, Python, Browser)
Troubleshooting Guide - Common issues and solutions
Features
β Fully Stateless - Each request is processed independently
β HTTP Streaming - Standard HTTP POST-based streaming transport
β Easy to Scale - No session management, horizontally scalable
β Simple Deployment - Perfect for serverless environments (Lambda, Cloud Functions)
β Production Ready - Live at https://mcp-demo-d3cj.onrender.com
β Two built-in tools:
read_widget_resource: Read widgetResource.md fileread_page_resource: Read pageResource.md file
Installation
npm installRunning Locally
# Production mode
npm start
# Development mode (with hot reload)
npm run dev
# Test with MCP Inspector
npm run testServer runs on http://localhost:3000 by default.
Testing and Debugging
Using Production Server
Test the live production server:
# List available tools
curl -X POST https://mcp-demo-d3cj.onrender.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
# Call read_widget_resource tool
curl -X POST https://mcp-demo-d3cj.onrender.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"read_widget_resource","arguments":{}}}'Using HTTP Streaming Test Client (Recommended)
# First start the server
npm start
# In another terminal, run the test client
npm run test-streamingThe test client will:
List all available tools
Call
read_widget_resourcetoolCall
read_page_resourcetool
Using curl for Local Testing
# List available tools
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
# Call read_widget_resource tool
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"read_widget_resource","arguments":{}}}'
# Check server health
curl http://localhost:3000/health
# Get server information
curl http://localhost:3000/API Endpoints
HTTP Streaming Transport
1. MCP Endpoint
Path:
/mcpMethod: POST
Description: HTTP streaming endpoint for MCP JSON-RPC requests
Features: Fully stateless, each request is processed independently
Other Endpoints
2. Health Check
Path:
/healthMethod: GET
Description: Check server status
3. Root Path
Path:
/Method: GET
Description: Get server information and available tools list
Available Tools
read_widget_resource
Reads the content of src/resources/widgetResource.md file.
Input: No parameters required
Output: File content as text
Example:
# Local
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"read_widget_resource","arguments":{}}}'
# Production
curl -X POST https://mcp-demo-d3cj.onrender.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"read_widget_resource","arguments":{}}}'read_page_resource
Reads the content of src/resources/pageResource.md file.
Input: No parameters required
Output: File content as text
Example:
# Local
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"read_page_resource","arguments":{}}}'
# Production
curl -X POST https://mcp-demo-d3cj.onrender.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"read_page_resource","arguments":{}}}'Usage Examples
Check Server Health
# Local
curl http://localhost:3000/health
# Production
curl https://mcp-demo-d3cj.onrender.com/healthGet Server Information
# Local
curl http://localhost:3000/
# Production
curl https://mcp-demo-d3cj.onrender.com/MCP Client Integration
To connect to this MCP server, your MCP client needs to:
Send HTTP POST requests to the
/mcpendpointUse JSON-RPC 2.0 format
Include proper Accept headers:
application/json, text/event-streamReceive results through HTTP response
Configuration Examples
Local Development
{
"mcpServers": {
"mcp-demo-local": {
"transport": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
}
}
}Production
{
"mcpServers": {
"mcp-demo": {
"transport": {
"type": "http",
"url": "https://mcp-demo-d3cj.onrender.com/mcp"
}
}
}
}Using MCP SDK
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
const client = new Client({
name: 'my-client',
version: '1.0.0',
});
// Use production server
const transport = new StreamableHTTPClientTransport(
new URL('https://mcp-demo-d3cj.onrender.com/mcp')
);
// Or use local server
// const transport = new StreamableHTTPClientTransport(
// new URL('http://localhost:3000/mcp')
// );
await client.connect(transport);
// List tools
const tools = await client.listTools();
// Call tool
const result = await client.callTool({
name: 'read_widget_resource',
arguments: {},
});Tech Stack
@modelcontextprotocol/sdk: MCP protocol implementation
Express: Web framework
CORS: Cross-Origin Resource Sharing support
Node.js: ES Modules
Project Structure
mcp-demo/
βββ src/
β βββ index.js # Main server file
β βββ resources/
β βββ widgetResource.md # Widget resource file
β βββ pageResource.md # Page resource file
βββ test-http-streaming.js # HTTP Streaming test client
βββ package.json
βββ README.md
βββ LICENSEEnvironment Variables
PORT: Server port (default: 3000)
PORT=8080 npm startDevelopment
The server uses ES Modules and requires Node.js 14.0 or higher.
In development mode, use the --watch flag for automatic restarts:
npm run devDeployment
This server is deployed on Render and available at: https://mcp-demo-d3cj.onrender.com/mcp
You can deploy your own instance:
Fork this repository
Connect to Render/Vercel/Railway
Set environment variables if needed
Deploy!
License
MIT
This server cannot be installed
Resources
Looking for Admin?
Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.