[](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.