Authlete MCP Server
A unified MCP server that enables management of Authlete services and clients, and provides natural language search over Authlete API specifications.
README
Authlete MCP Server
A unified Model Context Protocol (MCP) server that provides comprehensive tools for:
- Authlete Service Management: Managing Authlete services and clients through a standardized interface
- Advanced API Search: Natural language search capabilities for Authlete OpenAPI specifications with fuzzy matching and semantic search
⚠️ Compatibility Note: This server supports Authlete 3.0 only. It is not compatible with Authlete 2.3.
Architecture
The server follows a modular architecture with clear separation of concerns:
src/authlete_mcp/
├── server.py # Main MCP server with tool registration
├── config.py # Configuration and environment variables
├── search.py # AuthleteApiSearcher search engine
├── models/
│ └── base.py # Data models (Scope, ServiceDetail, etc.)
├── api/
│ └── client.py # HTTP client for Authlete APIs
└── tools/ # MCP tools organized by functionality
├── service_tools.py # Service management (8 tools)
├── client_tools.py # Client management (17 tools)
├── token_tools.py # Token operations (5 tools)
├── jose_tools.py # JOSE operations (2 tools)
├── search_tools.py # API/schema search (5 tools)
└── utility_tools.py # Utilities like JWKS generation (1 tool)
Reference Resources
When implementing new Authlete API tools, please refer to these resource files:
resources/postman_collection.json: Postman collection for Authlete service and client management APIs including service operations, client operations, and tool-related endpointsresources/openapi-spec.json: OpenAPI specification for Authlete API with detailed schema definitions and parameter descriptionsresources/idp-openapi-spec.json: Authlete IdP API specification for service creation and deletion operations (service create and service remove endpoints only)
These resources provide authoritative examples of:
- Correct API endpoint URLs and HTTP methods
- Required and optional request parameters
- Request body structures and data types
- Expected response formats and status codes
- Authentication requirements for each endpoint
Features
Service Management Tools
create_service: Create a new Authlete service with basic configurationcreate_service_detailed: Create a new Authlete service with comprehensive configurationget_service_schema_example: Get an example service configuration schemaget_service: Retrieve a service by API keylist_services: List all servicesupdate_service: Update service configuration (full overwrite)patch_service: Partially update service configuration (merges with current data)delete_service: Delete a service via IdP
Client Management
create_client: Create a new OAuth clientget_client: Retrieve a client by IDlist_clients: List all clients for a serviceupdate_client: Update client configuration (full overwrite)patch_client: Partially update client configuration (merges with current data)delete_client: Delete a clientrotate_client_secret: Generate new client secretupdate_client_secret: Update client secret manuallyupdate_client_lock: Lock or unlock a client
Extended Client Operations
get_authorized_applications: Get authorized applications for a subjectupdate_client_tokens: Update client tokens for a subjectdelete_client_tokens: Delete client tokens for a subjectget_granted_scopes: Get granted scopes for a client and subjectdelete_granted_scopes: Delete granted scopes for a client and subjectget_requestable_scopes: Get requestable scopes for a clientupdate_requestable_scopes: Update requestable scopes for a clientdelete_requestable_scopes: Delete requestable scopes for a client
Token Operations
list_issued_tokens: List issued tokens for a servicecreate_access_token: Create an access tokenupdate_access_token: Update an access tokenrevoke_access_token: Revoke an access tokendelete_access_token: Delete an access token
JOSE Operations
generate_jose: Generate JOSE (JSON Web Signature/Encryption) objectverify_jose: Verify JOSE (JSON Web Signature/Encryption) object
Advanced API Search Tools 🆕
search_apis: Natural language API search with semantic matching and relevance scoringget_api_detail: Detailed API information with parameters, request/response schemas, and sample code- Context Optimization: Advanced filtering options for description and body content (up to 96% size reduction)
- Smart Defaults: Optimized for LLM context efficiency while maintaining useful information
get_sample_code: Language-specific code samples for API endpointslist_schemas: List or search OpenAPI schemasget_schema_detail: Get detailed information for a specific schema
Utility Tools
generate_jwks: Generate JSON Web Key Set (JWKS) using mkjwk.org API
Search Features
- Natural Language Search: Ask questions like "revoke token" or "create client" and get relevant APIs
- Relevance Scoring: Results are ranked by relevance with intelligent scoring algorithm
- DuckDB-Powered: Fast, full-text search with optimized performance
Search Filters
- Path-based filtering (
path_query) - Description/summary filtering (
description_query) - HTTP method filtering (
method_filter) - API tag filtering (
tag_filter) - Result limit control (
limit)
Installation
Local Development
# Install dependencies
uv sync
# Create the search database (required for API search functionality)
uv run python scripts/create_search_database.py
# Run the unified Authlete MCP Server
uv run python main.py
Docker
The server is also available as a Docker image published to GitHub Container Registry.
Pull from GitHub Container Registry
# Pull the latest image
docker pull ghcr.io/watahani/authlete-mcp:latest
# Run with environment variables
docker run -it --rm \
-e ORGANIZATION_ACCESS_TOKEN=$YOUR_TOKEN \
-e ORGANIZATION_ID=$YOUR_ORG_ID \
ghcr.io/watahani/authlete-mcp:latest
Build Locally
# Build the Docker image
docker build -t authlete-mcp .
# Run the container
docker run -it --rm \
-e ORGANIZATION_ACCESS_TOKEN=$YOUR_TOKEN \
-e ORGANIZATION_ID=$YOUR_ORG_ID \
authlete-mcp
Using Docker Compose
# Create .env file with your credentials
cat > .env << EOF
ORGANIZATION_ACCESS_TOKEN=your-organization-token
ORGANIZATION_ID=your-organization-id
# Optional but recommended when you want a deterministic default
AUTHLETE_API_URL=https://jp.authlete.com
AUTHLETE_API_SERVER_ID=53285
EOF
# Run with Docker Compose
docker compose up authlete-mcp
# For development with live code reloading
docker compose --profile dev up authlete-mcp-dev
Usage
With Claude Desktop
Local Installation
Add the unified server to your Claude Desktop configuration:
{
"mcpServers": {
"authlete": {
"command": "uv",
"args": ["run", "python", "/path/to/authlete-mcp/main.py"],
"env": {
"ORGANIZATION_ACCESS_TOKEN": "your-organization-access-token",
"ORGANIZATION_ID": "your-organization-id",
// "AUTHLETE_API_URL": "https://jp.authlete.com",
// "AUTHLETE_API_SERVER_ID": "53285",
"LOG_LEVEL": "INFO"
}
}
}
}
AUTHLETE_API_URL and AUTHLETE_API_SERVER_ID act as optional defaults—you can omit them and call set_api_server after connecting if you prefer to choose dynamically.
Docker Installation
You can also run the server using Docker:
{
"mcpServers": {
"authlete": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "ORGANIZATION_ACCESS_TOKEN=your-organization-access-token",
"-e", "ORGANIZATION_ID=your-organization-id",
// "-e", "AUTHLETE_API_URL=https://jp.authlete.com",
// "-e", "AUTHLETE_API_SERVER_ID=53285",
"-e", "LOG_LEVEL=INFO",
"ghcr.io/watahani/authlete-mcp:latest"
]
}
}
}
The Docker example shows the optional defaults as well; remove them if you want the MCP client to decide the API server through set_api_server.
Direct Usage
# Run unified Authlete MCP Server (all tools: service, client, token, JOSE, search, utility)
uv run python main.py
# Using custom organization access token
ORGANIZATION_ACCESS_TOKEN=your-token uv run python main.py
# Run with specific Authlete server defaults (optional)
AUTHLETE_API_URL=https://eu.authlete.com AUTHLETE_API_SERVER_ID=63294 uv run python main.py
# You can also omit these and call `set_api_server` from the client to choose dynamically
Configuration
The unified server supports the following environment variables:
Required Environment Variables
ORGANIZATION_ACCESS_TOKEN: Your organization access token (required for all Authlete API operations)ORGANIZATION_ID: Your organization ID (required for service creation and deletion operations)
Optional Configuration
AUTHLETE_API_URL: Optional default Authlete API URL (falls back tohttps://jp.authlete.comwhen unset)AUTHLETE_BASE_URL: Legacy alias forAUTHLETE_API_URL(supported for backward compatibility but deprecated)AUTHLETE_API_SERVER_ID: Optional default API server ID. When provided together withAUTHLETE_API_URL, the pair becomes the starting configuration for all tools.AUTHLETE_IDP_URL: Authlete IdP URL (default:https://login.authlete.com)LOG_LEVEL: Logging level (default:INFO) - Set toDEBUGfor detailed HTTP request/response logging with PII masking
API server precedence
- Tool parameters (e.g.,
create_service_detailed(apiServerId=...)) and theset_api_servertool - Currently configured server from a previous
set_api_servercall or auto-detection within the same process - Environment defaults supplied via
AUTHLETE_API_URLandAUTHLETE_API_SERVER_ID - Automatic discovery based on
AUTHLETE_API_URL(if provided) followed by an instruction to runlist_api_servers/set_api_serverwhen no match is found
When you supply environment defaults, specify both values so the server is selected deterministically (examples: JP region → AUTHLETE_API_URL=https://jp.authlete.com, AUTHLETE_API_SERVER_ID=53285; EU region → AUTHLETE_API_URL=https://eu.authlete.com, AUTHLETE_API_SERVER_ID=63294).
API Search Requirements
resources/authlete_apis.duckdb: Search database file (created byscripts/create_search_database.py)
Note: API search functionality is automatically disabled if the search database is not found, but service management will still work.
Security Features
🔐 PII Masking and Secure Logging
The server includes comprehensive PII (Personally Identifiable Information) masking to protect sensitive data in logs:
Automatic PII Protection
- Authlete Credentials:
service_api_key,service_api_secret,ORGANIZATION_ACCESS_TOKEN - OAuth/OIDC Tokens:
client_secret,access_token,refresh_token,id_token,authorization_code - Device Flow:
user_code,client_notification_token - JWT/Crypto Data:
jwks,signature_key_id, JWK values (n,d,p,q, etc.) - Authentication Data:
password,authorizationheaders, Bearer tokens
Multi-Format Support
- JSON:
{"client_secret": "value"}→{"client_secret": "***** REDACTED *****"} - URL-encoded:
client_secret=value¶m=normal→client_secret=***** REDACTED *****¶m=normal - Environment Variables:
ORGANIZATION_ACCESS_TOKEN=token123→ORGANIZATION_ACCESS_TOKEN=***** REDACTED ***** - Authorization Headers:
Bearer token123456789→Bearer ***** REDACTED *****
Logging Configuration
# Default INFO level - basic operational logs only
LOG_LEVEL=INFO
# DEBUG level - includes detailed HTTP request/response with PII masked
LOG_LEVEL=DEBUG
# Other levels: WARNING, ERROR, CRITICAL
Sample Secure Log Output
2025-08-12 18:45:23 - authlete_mcp.tools.service_tools - DEBUG - HTTP POST IdP API /service - Request: {
"service": {
"client_secret": "***** REDACTED *****",
"serviceName": "MyService"
}
}
2025-08-12 18:45:23 - authlete_mcp.tools.service_tools - DEBUG - HTTP POST IdP API /service - Response (200): {
"resultMessage": "Service created successfully"
}
Security Benefits:
- ✅ Complete protection of sensitive tokens and secrets in all log outputs
- ✅ Safe for production environments and log aggregation systems
- ✅ Maintains debugging capability without exposing credentials
- ✅ Automatic detection across multiple data formats
API Reference
All service management tools automatically use the ORGANIZATION_ACCESS_TOKEN environment variable for authentication. No sensitive tokens are passed as parameters.
API search tools provide read-only access to OpenAPI documentation with advanced search capabilities.
Service Operations
create_service
Creates a new Authlete service.
Parameters:
name(string, required): Service namedescription(string, optional): Service description
create_service_detailed
Creates a new Authlete service with comprehensive configuration using individual parameters.
Parameters:
service_config(string, required): JSON string containing service configuration following Authlete API service schemaissuer(string, optional): Issuer identifier URL (https:// format)authorization_endpoint(string, optional): Authorization endpoint URLtoken_endpoint(string, optional): Token endpoint URLuserinfo_endpoint(string, optional): UserInfo endpoint URLrevocation_endpoint(string, optional): Token revocation endpoint URLjwks_uri(string, optional): JWK Set endpoint URLsupported_scopes(string, optional): Comma-separated scopes (default: "openid,profile,email")supported_response_types(string, optional): Comma-separated response types (default: "CODE")supported_grant_types(string, optional): Comma-separated grant types (default: "AUTHORIZATION_CODE")supported_token_auth_methods(string, optional): Comma-separated auth methods (default: "CLIENT_SECRET_BASIC")pkce_required(boolean, optional): Whether PKCE is requiredpkce_s256_required(boolean, optional): Whether S256 is required for PKCEaccess_token_duration(integer, optional): Access token duration in seconds (default: 86400)refresh_token_duration(integer, optional): Refresh token duration in seconds (default: 864000)id_token_duration(integer, optional): ID token duration in seconds (default: 86400)direct_authorization_endpoint_enabled(boolean, optional): Enable direct authorization endpointdirect_token_endpoint_enabled(boolean, optional): Enable direct token endpointdirect_userinfo_endpoint_enabled(boolean, optional): Enable direct userinfo endpointjwks(string, optional): JWK Set document content (JSON string)
get_service_schema_example
Returns a comprehensive JSON example that can be used as a template for service configuration.
Parameters:
- None required
get_service
Retrieves service information.
Parameters:
service_api_key(string, optional): Specific service API key to retrieve
update_service
Updates service configuration with complete data (full overwrite).
Parameters:
service_data(string, required): JSON string containing complete service dataservice_api_key(string, optional): Service API key
patch_service
Partially updates service configuration by merging with existing data.
Parameters:
service_patch_data(string, required): JSON string containing fields to update (partial data)service_api_key(string, optional): Service API key
delete_service
Deletes a service via IdP.
Parameters:
service_id(string, required): Service ID to delete
Client Operations
create_client
Creates a new OAuth client.
Parameters:
client_data(string, required): JSON string containing client configurationservice_api_key(string, optional): Service API key
get_client
Retrieves client information.
Parameters:
client_id(string, required): Client IDservice_api_key(string, optional): Service API key
update_client
Updates client configuration with complete data (full overwrite).
Parameters:
client_id(string, required): Client ID to updateclient_data(string, required): JSON string containing complete client dataservice_api_key(string, optional): Service API key
patch_client
Partially updates client configuration by merging with existing data.
Parameters:
client_id(string, required): Client ID to patchclient_patch_data(string, required): JSON string containing fields to update (partial data)service_api_key(string, optional): Service API key
API Search Operations
search_apis
Natural language search for Authlete APIs with intelligent relevance scoring.
Parameters:
query(string, optional): Natural language search query (e.g., "revoke token", "create client")path_query(string, optional): Specific API path search (e.g., "/api/auth/token")description_query(string, optional): Search in API descriptions and summariestag_filter(string, optional): Filter by API tag (e.g., "Authorization", "Token")method_filter(string, optional): Filter by HTTP method ("GET", "POST", "PUT", "DELETE")mode(string, optional): Search mode (maintained for compatibility, uses natural language search)limit(integer, optional): Maximum number of results (default: 20, max: 100)
Returns: JSON array of search results with path, method, summary, description, tags, and relevance score.
get_api_detail
Get comprehensive details for a specific API endpoint with advanced filtering options for context optimization.
Parameters:
path(string, optional): Exact API path (required if operation_id not provided)method(string, optional): HTTP method (required if operation_id not provided)operation_id(string, optional): Operation ID (alternative to path+method)language(string, optional): Programming language for sample codedescription_style(string, optional): Description filtering style (default: "summary_and_headers")"full": Complete description text"none": No description"summary_and_headers": Summary + header list (default, optimal for context efficiency)"line_range": Specific line range (use with line_start/line_end)
line_start(integer, optional): Start line for line_range style (1-indexed, default: 1)line_end(integer, optional): End line for line_range style (1-indexed, default: 100)request_body_style(string, optional): Request body filtering style (default: "none")"full": Complete request body details"none": No request body (default)"schema_only": Schema references only (significant size reduction)
response_body_style(string, optional): Response body filtering style (default: "none")"full": Complete response body details"none": No response body (default)"schema_only": Schema references only (significant size reduction)
Returns: Detailed API information including parameters, request body, responses, and sample code. Size optimized based on filtering options (up to 96% reduction with schema_only).
get_sample_code
Retrieve sample code for a specific API endpoint in the requested language.
Parameters:
language(string, required): Programming language ("curl", "javascript", "python", "java", etc.)path(string, optional): API path (required if operation_id not provided)method(string, optional): HTTP method (required if operation_id not provided)operation_id(string, optional): Operation ID (alternative to path+method)
Returns: Sample code string for the specified endpoint and language.
Working Configuration Examples
Example 1: Basic Configuration with Environment Variables
{
"mcpServers": {
"authlete": {
"command": "uv",
"args": ["run", "python", "/path/to/authlete-mcp/main.py"],
"env": {
"ORGANIZATION_ACCESS_TOKEN": "06uqWx-1R9pH8z07Ex3OxvBOdrwJeps-hPxxUm35uTc",
"ORGANIZATION_ID": "143361107080408",
"AUTHLETE_API_URL": "https://jp.authlete.com",
"AUTHLETE_API_SERVER_ID": "53285"
}
}
}
}
With this configuration, you can create services using the ORGANIZATION_ID from environment variables:
# Creates a service using ORGANIZATION_ID from environment variables
create_service(name="My Test Service", description="Test service")
Example 2: Configuration for Different Regions
For EU region (eu.authlete.com):
{
"mcpServers": {
"authlete-eu": {
"command": "uv",
"args": ["run", "python", "/path/to/authlete-mcp/main.py"],
"env": {
"ORGANIZATION_ACCESS_TOKEN": "your-eu-org-token",
"ORGANIZATION_ID": "your-eu-org-id",
"AUTHLETE_API_URL": "https://eu.authlete.com",
"AUTHLETE_IDP_URL": "https://login.authlete.com",
"AUTHLETE_API_SERVER_ID": "63294"
}
}
}
}
Example 3: Testing Configuration
For testing and development:
# Set environment variables
export ORGANIZATION_ACCESS_TOKEN="your-test-token"
export ORGANIZATION_ID="your-test-org-id"
export AUTHLETE_API_URL="https://jp.authlete.com"
export AUTHLETE_API_SERVER_ID="53285"
# Run the server
uv run python main.py
## Usage Examples
### Basic Search
```bash
# Search for token-related APIs
search_apis(query="token")
# Search by specific path
search_apis(path_query="/api/auth/authorization")
# Search with filters
search_apis(query="service", method_filter="POST", limit=5)
Natural Language Search
# Ask questions in natural language
search_apis(query="how to revoke access token")
search_apis(query="create new oauth client")
search_apis(query="get user information")
Get API Details
# Get detailed information for a specific API
get_api_detail(path="/api/auth/token", method="POST")
# Get details with sample code
get_api_detail(path="/api/auth/token", method="POST", language="curl")
# Use operation ID instead of path+method
get_api_detail(operation_id="revokeToken", language="javascript")
# Context-optimized API details (recommended for large APIs)
get_api_detail(operation_id="client_create_api", description_style="summary_and_headers",
request_body_style="schema_only", response_body_style="schema_only")
# Get only schema structure without verbose content (96% size reduction)
get_api_detail(path="/api/auth/authorization", method="POST", description_style="none",
request_body_style="schema_only", response_body_style="schema_only")
# Get specific line range of description
get_api_detail(operation_id="auth_authorization_api", description_style="line_range",
line_start=1, line_end=50)
Get Sample Code
# Get sample code in different languages
get_sample_code(language="javascript", path="/api/auth/token", method="POST")
get_sample_code(language="python", operation_id="revokeToken")
get_sample_code(language="curl", path="/api/auth/authorization", method="POST")
Combined Service Management and Search
# Create a service then search for related APIs
create_service(name="My OAuth Service", description="Test OAuth service")
# Search for APIs to use with the new service
search_apis(query="oauth client registration")
search_apis(query="token endpoint")
License
MIT License
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.