Skip to main content
Glama
anisirji

SSE MCP Server with JWT Authentication

README.mdβ€’3.92 kB
[![MseeP.ai Security Assessment Badge](https://mseep.net/mseep-audited.png)](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.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/anisirji/mcp-server-remote-setup-with-jwt-auth'

If you have feedback or need assistance with the MCP directory API, please join our Discord server