Authed authentication integration for Model Context Protocol (MCP)
Project description
Authed MCP Integration
This package provides integration between Authed authentication and the Model Context Protocol (MCP).
Overview
The Authed MCP integration allows you to:
- Create MCP servers with Authed authentication
- Create MCP clients that can authenticate with Authed
- Register MCP servers as Authed agents
- Grant access permissions between MCP clients and servers
Installation
pip install authed-mcp
Usage
Server Example
import asyncio
import os
from dotenv import load_dotenv
from client.sdk import Authed
from integrations.mcp import AuthedMCPServer
async def main():
# Load environment variables
load_dotenv()
# Initialize Authed client
registry_url = os.getenv("AUTHED_REGISTRY_URL", "https://api.getauthed.dev")
agent_id = os.getenv("AUTHED_AGENT_ID")
agent_secret = os.getenv("AUTHED_AGENT_SECRET")
private_key = os.getenv("AUTHED_PRIVATE_KEY")
public_key = os.getenv("AUTHED_PUBLIC_KEY")
# Create MCP server with Authed authentication
server = AuthedMCPServer(
name="example-server",
registry_url=registry_url,
agent_id=agent_id,
agent_secret=agent_secret,
private_key=private_key,
public_key=public_key
)
# Register a resource handler
@server.resource("/hello/{name}")
async def hello_resource(name: str):
return f"Hello, {name}!", "text/plain"
# Register a tool handler
@server.tool("echo")
async def echo_tool(message: str):
return {"message": message}
# Register a prompt handler
@server.prompt("greeting")
async def greeting_prompt(name: str = "World"):
return f"Hello, {name}! Welcome to the MCP server."
# Run the server
server.run()
if __name__ == "__main__":
asyncio.run(main())
Client Example
import asyncio
import os
from dotenv import load_dotenv
from integrations.mcp import AuthedMCPClient
async def main():
# Load environment variables
load_dotenv()
# Initialize client with Authed credentials
registry_url = os.getenv("AUTHED_REGISTRY_URL", "https://api.getauthed.dev")
agent_id = os.getenv("AUTHED_AGENT_ID")
agent_secret = os.getenv("AUTHED_AGENT_SECRET")
private_key = os.getenv("AUTHED_PRIVATE_KEY")
public_key = os.getenv("AUTHED_PUBLIC_KEY")
# Create MCP client with Authed authentication
client = AuthedMCPClient(
registry_url=registry_url,
agent_id=agent_id,
agent_secret=agent_secret,
private_key=private_key,
public_key=public_key
)
# Get server agent ID
server_agent_id = os.getenv("MCP_SERVER_AGENT_ID")
# Define server URL
server_url = "http://localhost:8000/sse"
try:
# Call a tool
result = await client.call_tool(
server_url=server_url,
server_agent_id=server_agent_id,
tool_name="echo",
arguments={"message": "Hello from MCP client!"}
)
print(f"Echo result: {result}")
# List available resources
resources = await client.list_resources(
server_url=server_url,
server_agent_id=server_agent_id
)
print(f"Available resources: {resources}")
except Exception as e:
print(f"Error: {str(e)}")
if __name__ == "__main__":
asyncio.run(main())
Components
AuthedMCPServer
A wrapper around the MCP server that adds Authed authentication. It initializes both the Authed client and the MCP server, and registers the necessary middleware to handle authentication.
AuthedMCPClient
A client for making authenticated requests to MCP servers. It automatically:
- Creates and attaches DPoP proofs to requests
- Handles token management
- Provides a simple interface for interacting with MCP servers
- Includes improved URL normalization for consistent comparison
- Provides robust error handling
Utility Functions
register_mcp_server
Registers an MCP server as an agent in Authed:
from client.sdk import Authed
from integrations.mcp import register_mcp_server
async def setup():
authed = Authed.initialize(...)
server_info = await register_mcp_server(
authed=authed,
name="My MCP Server",
description="MCP server with Authed authentication",
capabilities={"tools": ["echo", "calculator"], "resources": ["hello"]}
)
# Save the resulting agent_id, private_key, etc.
print(f"Server registered with ID: {server_info['agent_id']}")
grant_mcp_access
Grants an MCP client access to an MCP server:
from client.sdk import Authed
from integrations.mcp import grant_mcp_access
async def setup_permissions():
authed = Authed.initialize(...)
success = await grant_mcp_access(
authed=authed,
client_agent_id="client-agent-id",
server_agent_id="server-agent-id",
permissions=["mcp:call_tool", "mcp:list_resources"]
)
if success:
print("Access granted successfully")
else:
print("Failed to grant access")
Requirements
- Python 3.8+
- Authed SDK
- MCP SDK
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file authed_mcp-0.1.2.tar.gz.
File metadata
- Download URL: authed_mcp-0.1.2.tar.gz
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
477a42a1dc830ff01bd9aaec3d8f58bdc2a84ed69e484c5bc2a9ac568e56bf4c
|
|
| MD5 |
81e277d389aec5431fa114e5742080bb
|
|
| BLAKE2b-256 |
010886d3829831492f818dc6e6a33cda16d56ce88ffca662e7f972b61265e39e
|
File details
Details for the file authed_mcp-0.1.2-py3-none-any.whl.
File metadata
- Download URL: authed_mcp-0.1.2-py3-none-any.whl
- Upload date:
- Size: 12.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
760f4cf9e8ae118e90df23481e09fe5accaf7c5ae6dd57da26c3155eedb0201b
|
|
| MD5 |
1d3d9c9cf245fe40a0dc589106b238a5
|
|
| BLAKE2b-256 |
9fb147cca90c393d639d2b4a5bde325dcbe9d455276f641c894a184e6e673bab
|