---
schema: rendered-html/v1
title: "Descope 🤝 FastMCP - FastMCP"
source_url: https://gofastmcp.com/integrations/descope
generated_at: 2026-06-11T19:41:50.908575+00:00
---




[FastMCP home page![light logo](images/gofastmcp__com__integrations__descope__wordmark.avif)![dark logo](images/gofastmcp__com__integrations__descope__wordmark-white.avif)](gofastmcp__com.md)







Auth

Descope 🤝 FastMCP



















  - [Auth0](gofastmcp__com__integrations__auth0.md)
  - [AuthKit](gofastmcp__com__integrations__authkit.md)
  - [AWS Cognito](gofastmcp__com__integrations__aws-cognito.md)
  - [Azure (Entra ID)](gofastmcp__com__integrations__azure.md)
  - [Descope](/integrations/descope)
  - [Discord](gofastmcp__com__integrations__discord.md)
  - [Eunomia Auth](gofastmcp__com__integrations__eunomia-authorization.md)
  - [GitHub](gofastmcp__com__integrations__github.md)
  - [Google](gofastmcp__com__integrations__google.md)
  - [Keycloak

    NEW](gofastmcp__com__integrations__keycloak.md)
  - [Oracle](gofastmcp__com__integrations__oci.md)
  - [Permit.io](gofastmcp__com__integrations__permit.md)
  - [PropelAuth](gofastmcp__com__integrations__propelauth.md)
  - [Scalekit](gofastmcp__com__integrations__scalekit.md)
  - [Supabase](gofastmcp__com__integrations__supabase.md)
  - [WorkOS](gofastmcp__com__integrations__workos.md)




- [Configuration](#configuration)
  - [Prerequisites](#prerequisites)
  - [Step 1: Configure Descope](#step-1-configure-descope)
  - [Step 2: Environment Setup](#step-2-environment-setup)
  - [Step 3: FastMCP Configuration](#step-3-fastmcp-configuration)
- [Testing](#testing)
- [Production Configuration](#production-configuration)

Auth

# Descope 🤝 FastMCP


Secure your FastMCP server with Descope


New in version `2.12.4`
This guide shows you how to secure your FastMCP server using [**Descope**](https://www.descope.com), a complete authentication and user management solution. This integration uses the [**Remote OAuth**](gofastmcp__com__servers__auth__remote-oauth.md) pattern, where Descope handles user login and your FastMCP server validates the tokens.

## [​](#configuration) Configuration

### [​](#prerequisites) Prerequisites

Before you begin, you will need:

1. To [sign up](https://www.descope.com/sign-up) for a Free Forever Descope account
2. Your FastMCP server’s URL (can be localhost for development, e.g., `http://localhost:3000`)

### [​](#step-1-configure-descope) Step 1: Configure Descope

1

Create an MCP Server

1. Go to the [MCP Servers page](https://app.descope.com/mcp-servers) of the Descope Console, and create a new MCP Server.
2. Give the MCP server a name and description.
3. Ensure that **Dynamic Client Registration (DCR)** is enabled. Then click **Create**.
4. Once you’ve created the MCP Server, note your Well-Known URL.

DCR is required for FastMCP clients to automatically register with your authentication server.

2

Note Your Well-Known URL

Save your Well-Known URL from [MCP Server Settings](https://app.descope.com/mcp-servers):

Well-Known URL: https://.../v1/apps/agentic/P.../M.../.well-known/openid-configuration

### [​](#step-2-environment-setup) Step 2: Environment Setup

Create a `.env` file with your Descope configuration:

DESCOPE_CONFIG_URL=https://.../v1/apps/agentic/P.../M.../.well-known/openid-configuration     # Your Descope Well-Known URL
SERVER_URL=http://localhost:3000     # Your server's base URL

### [​](#step-3-fastmcp-configuration) Step 3: FastMCP Configuration

Create your FastMCP server file and use the DescopeProvider to handle all the OAuth integration automatically:


from fastmcp.server.auth.providers.descope import DescopeProvider

# The DescopeProvider automatically discovers Descope endpoints
# and configures JWT token validation
auth_provider = DescopeProvider(
    config_url="https://.../.well-known/openid-configuration",  # Your MCP Server .well-known URL
    base_url=SERVER_URL,                                        # Your server's public URL

# Create FastMCP server with auth
mcp = FastMCP(name="My Descope Protected Server", auth=auth_provider)

## [​](#testing) Testing

To test your server, you can use the `fastmcp` CLI to run it locally. Assuming you’ve saved the above code to `server.py` (after replacing the environment variables with your actual values!), you can run the following command:

fastmcp run server.py --transport http --port 8000

Now, you can use a FastMCP client to test that you can reach your server after authenticating:

import asyncio

async def main():
    async with Client("http://localhost:8000/mcp", auth="oauth") as client:
        assert await client.ping()

    asyncio.run(main())

## [​](#production-configuration) Production Configuration

For production deployments, load configuration from environment variables:


import os
from fastmcp.server.auth.providers.descope import DescopeProvider

# Load configuration from environment variables
auth = DescopeProvider(
    config_url=os.environ.get("DESCOPE_CONFIG_URL"),
    base_url=os.environ.get("BASE_URL", "https://your-server.com")

mcp = FastMCP(name="My Descope Protected Server", auth=auth)

[Azure (Microsoft Entra ID) OAuth 🤝 FastMCP

Previous](gofastmcp__com__integrations__azure.md)[Discord OAuth 🤝 FastMCP

Next](gofastmcp__com__integrations__discord.md)






