Token导航 LogoToken导航TokenDH.com
MCP Oauth Dcr Demo logo
AI代理未说明官方级别未说明来源级核验

MCP Oauth Dcr Demo

MCP Server

Mordecai是一个针对Keycloak的MCP授权流程演示工具,支持动态客户端注册(DCR),包含模拟代理、简易MCP服务器和Keycloak授权服务器组件。

工具数

1

提示词数

0

GitHub Stars

0

资源数

0
PythonAI代理工作流自动化

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

jonshea

提供方

jonshea

最后核验

2026/5/17 20:21

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

末底改

Mordecai是针对Keycloak的MCP授权流与动态客户端注册的演示。

快速开始

# Clone the repository
git clone https://github.com/yourusername/mordecai.git
cd mordecai

# Run the complete demo (requires docker/podman/orbstack)
./scripts/run-demo.sh

概述

有三个组成部分:

  • Mordecai,一个可以拨打MCP电话的模拟代理
  • TinyNotesMCP,用于创建和检索笔记的MCP服务器
  • Keycloak,授权服务器

末底改

莫迪凯是一名模拟特工 src/mordecai/在交互模式下,它支持以下命令 connect 到MCP服务器,列表可用 tools,以及 call 一个工具。它不是一个真正的代理或聊天机器人,也不调用LLM API,因为这不是本演示的目的,但添加起来很容易。

TinyNotesMCP

TinyNotesMCP,in src/notes_mcp_server/,是一个超级简单的MCP服务器,用于演示MCP身份验证流程。它允许用户创建、读取、更新和删除存储在内存中的笔记。它被配置为使用Keycloak的本地实例作为其授权服务器,并要求客户端具有 readwrite Keycloak授予的范围。

钥匙斗篷

我们在podman/docker中使用基本Keycloak映像。它被配置为从中的快照还原数据库状态 data/keycloak/。快照包含一个名为的领域 mcp 与用户 jonsheapeter,以及客户赠款 readwrite。值得注意的是,快照确实 _不_ 包含Mordecai的客户端条目,因为这是Mordecai在尝试连接到MCP服务器时动态创建的。

思绪

我并不完全相信DCR的整体价值。该规范设想了一个组织拥有 N 代理人/客户和 M MCP服务器(每个服务器可能具有不同的身份验证服务),因此如果没有DCR,管理员需要手动注册和配置 N * M 客户。那肯定会很烦人。但我想,一家公司有一个单一的身份验证服务器(Okta)的情况要常见得多,管理员只需为每个代理创建一个客户端,就可以联合所有MCP服务器所需的作用域。或者,甚至可以由所有代理共享一个客户端。这就留下了如何用正确的client_id配置代理的挑战,但我认为这不应该太难。我想我对企业环境中身份验证服务器的使用和管理了解不够,无法很好地判断DCR的价值。

这不是DCR特有的,但我对MCP中需要内置多少身份验证支持感到有点惊讶 _服务器_MCP服务器需要配置为知道正确的身份验证服务器,必须对其进行编程以验证用户的令牌,并且必须对其编程以根据身份验证服务器授予的范围验证用户操作。MCP作者真的做到了这一切吗?

相关地,当MCP服务器与AWS或Slack等第三方服务交互时,所有这些身份验证内容都与第三方服务的权限和授权系统正交。Keycapture或Okta没有告诉你用户拥有什么AWS IAM权限,或者他们可以访问什么Slack频道,所以这是一个完全不同的问题。

实现注意事项

Python MCP SDK对OAuth2身份验证流(包括DCR)具有本机支持,尽管使用起来并不直观。直到我很好地参与了这个项目,我才发现这一点,但 示例 目录有一个针对玩具/模拟授权服务器的身份验证流(包括DCR)的简单演示。

Python MCP SDK与Keycloak有一些小的不兼容,我必须在SDK中修补。你可以在这里看到我的更改https://github.com/modelcontextprotocol/python-sdk/compare/main...jonshea:python-sdk:主要。

运行演示

当系统提示输入用户名时,使用 peterjonshea。两者的密码都是 admin.

运行演示有两种方法。在开发过程中,我一直在手动运行它,Keycloak运行在容器中的一个选项卡中,TinyNotesMCP服务器在另一个选项卡本地运行,最后Mordecai客户端运行在第三个选项卡中。

为了便于分享,我还创建了一个脚本, scripts/run-demo.sh,它试图为这三个组件构建容器,并在容器化环境中运行它们。

手动运行

Python设置

uv sync
source .venv/bin/activate

钥匙斗篷

在一个选项卡中,启动Keycloak服务器:

podman run -it \
  --name keycloak \
  --rm \
  -p 127.0.0.1:8080:8080 \
  -p 127.0.0.1:9000:9000 \
  -e KC_BOOTSTRAP_ADMIN_USERNAME=admin \
  -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin \
  -e KEYCLOAK_IMPORT=/opt/keycloak/data/import/mcp-realm.json \
  -v "$(pwd)/data/keycloak:/opt/keycloak/data/import:ro" \
  quay.io/keycloak/keycloak:26.3.3 start-dev --health-enabled=true --import-realm

在另一个选项卡中,启动MCP服务器:

PYTHONPATH=src python src/notes_mcp_server/main.py

最后,在第三个选项卡中,启动Mordecai客户端:

# Interactive mode (recommended for exploration)
PYTHONPATH=src python src/mordecai/main.py --interactive

# Or automated demo mode
PYTHONPATH=src python src/mordecai/main.py --demo-dcr

使用 scripts/run-demo.sh

如果你安装了docker、podman或orbstack,那么这应该“正常工作”。

./scripts/run-demo.sh

这将在后台容器中运行Keycloak和TinyNotesMCP,并将Mordecai的日志输出打印到终端。

测试

PYTHONPATH=src python -m unittest tests/test_oauth_dcr_flow.py -v

全部

  • 这段代码在很大程度上假设了快乐的道路,如果服务器无法访问或配置错误,通常会崩溃。生产代码显然需要更好的错误处理。
  • 我认为在TinyNotesMCP中有一个用户和授权模型会很有趣,但没有来得及实现它。
  • 围绕MCP服务器连接的Mordecai客户端代码对我来说相当混乱。我可能可以通过为TinyNotesMCP服务器创建一个适当的连接管理器类,或者通过重构交互模式循环的实现方式来清理它。

规范和文件

一些相关规范和其他文档已添加到 docs/ 目录,主要供LLM参考。

目录标签

目录标签

PythonAI代理工作流自动化授权流程本地部署动态客户端注册Keycloak集成MCP协议开发演示

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

1

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明none部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP