Keycard Hello MCP Server
OfficialClick 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., "@Keycard Hello MCP Servershow the Keycard logo"
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.
π Keycard Hello MCP Server
A production-ready MCP server demonstrating OAuth 2.0 authentication with Keycard's Security Token Service (STS). This project showcases best practices for building secure, type-safe, and modular MCP servers with enterprise-grade observability.
π― What This Demonstrates
π OAuth 2.0 Authentication - Secure authentication via Keycard STS
β¨ Type Safety - Full TypeScript with Zod runtime validation
ποΈ Modular Architecture - Clean separation of concerns for easy extension
π Production Ready - Error handling, validation, and comprehensive logging
π Educational - Well-documented code showing MCP best practices
π§ͺ Testing Framework - Jest with coverage, integration tests, and watch modes
π Observability - OpenTelemetry integration with traces and metrics
π Quick Start
ποΈ Architecture
βββββββββββββββ ββββββββββββββββ βββββββββββββββ
β Cursor βββββΆβ MCP Server βββββΆβ Keycard STS β
β IDE β β (localhost: β β β
β β β 8888) β β β
βββββββββββββββ ββββββββββββββββ βββββββββββββββ
β β β
OAuth Flow JWT Validation Token Issuanceπ Authentication Flow
Cursor discovers OAuth endpoints from MCP server
User authenticates via Keycard STS (redirected to identity provider)
Keycard STS issues JWT access tokens
MCP Server validates tokens and grants access to tools
Prerequisites
Node.js 18+ and npm
Cursor IDE (or any MCP-compatible client)
Keycard account with access to the Console
Configured Keycard zone (for authentication)
1. Clone & Install
git clone https://github.com/keycardai/hello-mcp-server.git
cd hello-mcp-server
npm install2. Configure Environment
Create a .env file:
# Required: Your Keycard STS issuer URL
KEYCARD_STS_ISSUER_URL=https://your-zone-id.keycard.cloud
# Optional: Server configuration
PORT=8888
HOST=localhostπ‘ Finding your Zone ID:
Log into the Keycard Console
Navigate to Zone Settings
Copy the Zone ID (e.g.,
j434uokph8th1ia1npxiaykh7p)Replace
your-zone-idin your STS URL
Note: Use the zone ID, not the zone name or label.
3. Start the Server
# Development mode with auto-reload
npm run dev
# Production mode
npm run build && npm startYou should see:
π Keycard Hello MCP Server started!
π MCP Endpoint: http://localhost:8888/mcp
π STS Issuer: https://your-zone-id.keycard.cloud
π οΈ Available Tools: keycard-logo, whoami4. Configure Cursor IDE
Add to your Cursor MCP settings:
{
"mcpServers": {
"keycard-hello-mcp": {
"url": "http://localhost:8888/mcp"
}
}
}5. Test Authentication
Restart Cursor to pick up the new MCP server
Cursor will show "needs login" for the server
Click to authenticate β complete OAuth flow
Use the tools:
keycard-logo,whoami
π οΈ Available Tools
keycard-logo
Displays the official Keycard ASCII art logo.
whoami
Provides detailed information about the authenticated user including:
Client ID and authentication scopes
JWT payload with user information
Token expiration and timing details
Custom claims and metadata
π§ Configuration
Environment Variables
Variable | Description | Default | Required |
| Keycard STS issuer URL (single-tenant mode) | - | β * |
| Base domain for STS (multi-tenant mode) | - | β * |
| Base domain for MCP server (multi-tenant mode) | - | β * |
| Server port |
| |
| Server host |
| |
| Logging level |
| |
| Enable OpenTelemetry |
| |
| Service name for telemetry |
| |
| Environment for telemetry |
|
*Either KEYCARD_STS_ISSUER_URL (single-tenant) OR ISSUER_BASE_DOMAIN + MCP_BASE_DOMAIN (multi-tenant) is required.
Multi-Tenant Configuration
For multi-tenant deployments (serving multiple organizations/zones), use these environment variables instead:
# Multi-tenant mode
ISSUER_BASE_DOMAIN=keycard.cloud
MCP_BASE_DOMAIN=mcp.example.com
# Other configuration
PORT=8888
ENABLE_OTEL=trueThis enables dynamic issuer discovery based on subdomain routing, allowing one deployment to serve multiple Keycard zones.
Observability
The server includes comprehensive observability features:
Structured Logging: Environment-aware logging with trace correlation
Request Tracing: Full distributed tracing with OpenTelemetry
Metrics Collection: Performance and usage metrics
Health Checks: Available at
/health
In development, logs are formatted for console readability. In production, logs are sent to configured OTLP endpoints.
ποΈ Architecture
src/
βββ config.ts # Configuration management
βββ index.ts # Application entry point
βββ server.ts # Express server setup
βββ middleware/ # Express middlewares
β βββ auth.ts # Authentication middleware
β βββ logging.ts # Request logging and tracing
βββ observability/ # Telemetry and logging
β βββ logger.ts # Structured logger
β βββ telemetry.ts # OpenTelemetry setup
βββ tools/ # MCP tools
β βββ index.ts # Tool registration
β βββ logo.ts # Keycard logo tool
β βββ whoami.ts # User information tool
βββ types/ # Type definitions
βββ auth.ts # Authentication types
βββ index.ts # Exported typesπ§ͺ Testing
# Run all tests
npm test
# Run tests with coverage
npm run test:coverage
# Run integration tests
npm run test:integration
# Watch mode for development
npm run test:watchπ Code Quality
# Lint code
npm run lint
# Fix linting issues
npm run lint:fix
# Format code
npm run format
# Check all (lint + format)
npm run check
# Fix all issues
npm run check:fixπ MCP Integration
Cursor IDE
Start the server:
npm run devIn Cursor, go to Settings > MCP Servers
Add server:
http://localhost:8888/mcp
π¦ Health Checks
The server provides a health check endpoint at /health:
curl http://localhost:8888/healthResponse:
{
"status": "healthy",
"timestamp": "2024-01-01T00:00:00.000Z",
"service": "hello-mcp-server",
"version": "1.0.0"
}π€ Contributing
Fork the repository
Create a feature branch
Make your changes
Run tests and quality checks
Submit a pull request
π License
Apache-2.0 License - see LICENSE file for details.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/keycardai/hello-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server