[](https://mseep.ai/app/anisirji-mcp-server-remote-setup-with-jwt-auth)
# π SSE MCP Server with JWT Authentication
This is a **Model Context Protocol (MCP)** SSE server with JWT-based authentication.
It allows you to expose multiple AI tools over an SSE transport, protected via secure Bearer Token flow.
Built with:
- π Node.js + Express
- π§© @modelcontextprotocol/sdk
- π JSON Web Tokens (JWT) for authentication
- βοΈ Zod for input validation
> β
Fully tested with [`@modelcontextprotocol/inspector`](https://modelcontextprotocol.github.io/inspector)
## π Project Structure
```
server/
βββ index.ts # Main Express + MCP server
βββ .env # Environment variables
βββ package.json # Project metadata & scripts
βββ tsconfig.json # TypeScript config
βββ README.md # You are here!
```
## β¨ Features
- β
Secure SSE connection using Bearer JWT token
- β
Dynamic Tool registration (echo, time, random number, etc.)
- β
Tested with MCP Inspector
- β
Logs all request lifecycle events
- β
Session management for /message endpoint
- π Ready to extend for production use
## βοΈ Setup
### 1. Clone the repository
```bash
git clone https://github.com/anisirji/mcp-server-remote-setup-with-jwt-auth.git
cd mcp-server-remote-setup-with-jwt-auth
```
### 2. Install dependencies
```bash
npm install
```
### 3. Create `.env` file
```bash
echo "JWT_SECRET=your-secret-key" > .env
```
### 4. Run the server
```bash
npm run dev
```
β
Server will run on:
```
http://localhost:3001/sse
```
## π§ͺ Testing the server with MCP Inspector
### Step 1 β Install MCP Inspector
> π Official Docs: [MCP Inspector](https://modelcontextprotocol.github.io/inspector)
```bash
npx @modelcontextprotocol/inspector
```
### Step 2 β Generate a token
Use cURL to get your JWT token:
```bash
curl "http://localhost:3001/auth/token?username=aniket&scope=mcp:access"
```
β
Example response:
```json
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
```
### Step 3 β Connect MCP Inspector
1. Open Inspector UI
2. Set Transport Type: **SSE**
3. URL:
```
http://localhost:3001/sse
```
4. Add Authorization Header:
```
Authorization: Bearer <your-token>
```
5. Click **Connect**
π Success! Your server is now connected.
### Step 4 β Test tools
Go to **Tools** tab in Inspector and click **List Tools**.
You will see:
- β
`test`
- β
`echo`
- β
`get-time`
- β
`random-number`
Test them and enjoy!
## π API Reference
### π Generate Token
```
GET /auth/token?username=<username>&scope=mcp:access
```
### π SSE Endpoint (requires token)
```
GET /sse
Authorization: Bearer <token>
```
### π© Send Message to active session
```
POST /message?sessionId=<sessionId>
Authorization: Bearer <token>
```
## π§© Tools Reference
| Tool Name | Description |
| ---------------- | ------------------------------ |
| `test` | Test connection (security check) |
| `echo` | Echo back provided message |
| `get-time` | Returns current server time |
| `random-number` | Returns random number (min/max) |
## ποΈ Upcoming Changes
- [ ] Token revocation list (blacklist)
- [ ] Role-based tool access (scope checks)
- [ ] Session heartbeat / keep-alive
- [ ] Rate limiting & logging
- [ ] Dockerization for deployment
## π Useful Resources
- [Model Context Protocol Introduction](https://modelcontextprotocol.github.io/specification)
- [MCP Inspector Docs](https://modelcontextprotocol.github.io/inspector)
- [JWT.io Debugger](https://jwt.io/)
- [Zod Validation Docs](https://zod.dev/)
## π¨βπ» Maintainer
> **Aniket**
## π License
This project is open-source and free to use.
# π Build. Secure. Empower.