llng mcp
MCP服务器 柠檬花,但
从Claude、Cursor或任何兼容MCP的AI助手管理您的Lemondap NG web SSO实例。47种工具,涵盖配置、会话、OIDC、SAML、2FA等。
快速开始
1.添加到克劳德代码
claude mcp add llng-mcp -- npx llng-mcp或添加到克劳德桌面(~/.claude/desktop_config.json):
{
"mcpServers": {
"llng": {
"command": "npx",
"args": ["llng-mcp"]
}
}
}2.配置您的SSO实例
创建 ~/.llng-mcp.json:
{
"instances": {
"prod": {
"mode": "ssh",
"ssh": { "host": "sso.example.com", "user": "root" }
},
"staging": {
"mode": "ssh",
"ssh": { "host": "sso-staging.example.com", "user": "root" }
}
},
"default": "prod"
}所有工具都接受可选 instance 参数以针对特定实例。看 配置 以下是SSH、API、Kubernetes和Docker模式。
3.开始使用
用自然语言问克劳德:
- _“显示当前SSO配置”_
- _“有多少个活动会话?”_
- _“列出所有OIDC依赖方”_
- _“使用重定向URI为我的应用程序添加新的OIDC RPhttps://my-app.example.com/callback"_
- _“删除用户jdoe的所有会话”_
- _“用户alice有哪些2FA设备?”_
- _“旋转OIDC签名密钥”_
- _“将完整配置导出为备份”_
你能做什么
| 能力 | 描述 |
|---|---|
| 配置 | 读取、更新、导出、导入、合并和回滚SSO配置。测试电子邮件设置。 |
| 会话 | 搜索、检查、修改和删除用户会话。备份所有会话。管理离线/刷新令牌。 |
| OIDC依赖方 | 启用OIDC发行人,列出/添加/更新/删除具有合理默认值的依赖方。 |
| OIDC测试 | 完整的OIDC流测试:发现、使用PKCE授权、令牌交换、用户信息、自检。 |
| SAML联盟 | 下载IdP元数据,导入SAML联盟。 |
| 双因素认证 | 列出并管理用户的2FA设备(TOTP、U2F、WebAuthn)。 |
| 用户同意书 | 列出并撤销每个用户的OIDC同意。 |
| 用户目录 | 从配置的后端查找用户属性。 |
| 缓存和维护 | 清除中央和本地缓存,旋转OIDC密钥,按UID模式删除会话。 |
| 多实例 | 从单个服务器管理多个SSO实例(prod、staging、dev)。 |
| 文档 | 在完整的LemonLDAP::NG文档中进行语义搜索。捆绑索引,只需要Ollama进行嵌入。 |
安装
需要Node.js 20或更高版本。
npm install llng-mcp
npm run build配置
MCP服务器从以下位置读取配置 ~/.llng-mcp.json 支持环境变量重写。有两种操作模式可供选择。
SSH/CLI模式(默认)
通过SSH或使用Lemondap NG CLI工具在本地执行命令。
{
"mode": "ssh",
"ssh": {
"binPrefix": "/usr/share/lemonldap-ng/bin"
}
}对于远程SSH连接:
{
"mode": "ssh",
"ssh": {
"host": "llng.example.com",
"user": "root",
"port": 22,
"sudo": "root",
"binPrefix": "/usr/share/lemonldap-ng/bin"
}
}remoteCommand -通过Docker、LXC等执行。
这 remoteCommand 字段在SSH/sudo和LLNG CLI二进制文件之间插入命令。这允许在容器内或通过其他包装器运行命令:
{
"mode": "ssh",
"ssh": {
"host": "server.example.com",
"remoteCommand": "docker exec sso-auth-1",
"binPrefix": "/usr/share/lemonldap-ng/bin"
}
}这产生了: ssh server.example.com docker exec sso-auth-1 /usr/share/lemonldap-ng/bin/lemonldap-ng-cli ...
binPrefix -自定义二进制位置
这 binPrefix 字段(默认值: /usr/share/lemonldap-ng/bin)设置所有LLNG CLI工具的基本目录。个人路径(cliPath, sessionsPath, configEditorPath)仍然可以覆盖特定的二进制文件。
SSH模式限制:以下操作需要API模式:
llng_2fa_list-列出2FA设备llng_2fa_delete-删除2FA设备llng_2fa_delType-删除所有类型的设备llng_consent_list-列出用户同意llng_consent_delete-撤销同意
API模式
使用可选的HTTP基本身份验证调用LLNG管理器上的REST端点。
{
"mode": "api",
"api": {
"baseUrl": "https://manager.example.com/api/v1",
"basicAuth": {
"username": "admin",
"password": "secret"
},
"verifySsl": true
}
}Kubernetes模式
使用以下命令在Kubernetes Pod中执行命令 kubectl exec服务器使用标签选择器自动解析Deployment中的pod。
{
"mode": "k8s",
"k8s": {
"context": "prod-cluster",
"namespace": "auth",
"deployment": "lemonldap-ng",
"container": "sso"
}
}context(可选)-要使用的kubectl上下文namespace(必填)-Kubernetes命名空间deployment(必需)-部署名称(用于派生默认pod选择器app.kubernetes.io/name=DEPLOYMENT)container(可选)-pod中的容器名称(如果是单个容器,则省略)podSelector(可选)-覆盖吊舱分辨率的标签选择器(默认值:app.kubernetes.io/name=DEPLOYMENT)binPrefix(可选)-pod内LLNG二进制文件的路径(默认:/usr/share/lemonldap-ng/bin)
K8s模式具有与SSH模式相同的限制(2FA和同意需要API模式)。
OIDC配置(可选)
对于OIDC测试工具:
{
"oidc": {
"issuer": "https://auth.example.com",
"clientId": "my-app",
"clientSecret": "secret",
"redirectUri": "http://localhost:8080/callback",
"scope": "openid profile email"
}
}多实例配置
要从单个MCP服务器管理多个LLNG实例,请使用 instances 格式:
{
"instances": {
"prod": {
"mode": "api",
"api": {
"baseUrl": "https://manager-prod.example.com/api/v1",
"basicAuth": { "username": "admin", "password": "secret" }
}
},
"staging": {
"mode": "ssh",
"ssh": {
"host": "staging.example.com",
"user": "root"
}
},
"local": {
"mode": "ssh"
}
},
"default": "prod"
}instances-命名LLNG实例配置,每个配置都有自己的mode,ssh,api,以及oidc设置default-在执行以下操作时使用的实例的名称instance省略参数(如果未指定,则默认为第一个实例)- 所有工具都接受可选
instance针对特定实例的参数 - 传统的平面格式(无
instances)完全受支持,并被视为单个“默认”实例 - 环境变量(
LLNG_*)仅应用于默认实例
环境变量
可以通过环境变量覆盖配置:
模式
LLNG_MODE-设置为“ssh”或“api”
SSH配置
LLNG_SSH_HOST-SSH连接的主机名LLNG_SSH_USER-SSH用户名LLNG_SSH_PORT-SSH端口(默认值:22)LLNG_SSH_SUDO-用户使用sudoLLNG_SSH_REMOTE_COMMAND-在SSH/sudo和LLNG二进制文件之间插入的命令(例如。,docker exec container-name)LLNG_SSH_BIN_PREFIX-LLNG CLI工具的基本目录(默认:/usr/share/lemonldap-ng/bin)LLNG_SSH_CLI_PATH-lemondap-ng-cli的路径(覆盖binPrefix)LLNG_SSH_SESSIONS_PATH-lemondap-ng会话的路径(覆盖binPrefix)LLNG_SSH_CONFIG_EDITOR_PATH-lmConfigEditor的路径(覆盖binPrefix)
Kubernetes配置
LLNG_K8S_CONTEXT-kubectl上下文LLNG_K8S_NAMESPACEKubernetes 命名空间LLNG_K8S_DEPLOYMENT-部署名称LLNG_K8S_CONTAINER-容器名称(可选)LLNG_K8S_POD_SELECTOR-标签选择器覆盖LLNG_K8S_BIN_PREFIX-pod内LLNG二进制文件的路径
API配置
LLNG_API_URL-API基本URLLLNG_API_BASIC_USER-HTTP基本身份验证用户名LLNG_API_BASIC_PASSWORD-HTTP基本身份验证密码LLNG_API_VERIFY_SSL-设置为“false”跳过SSL验证
OIDC配置
LLNG_OIDC_ISSUER-OIDC发行人URLLLNG_OIDC_CLIENT_ID-OIDC客户端IDLLNG_OIDC_CLIENT_SECRET-OIDC客户端机密LLNG_OIDC_REDIRECT_URI-oidc重定向类型LLNG_OIDC_SCOPE-OIDC范围
文档
LLNG_DOC_INDEX-自定义文档索引文件的路径(覆盖捆绑索引)OLLAMA_URL-嵌入的Ollama服务器URL(默认值:http://localhost:11434)
备注:使用多实例配置时,环境变量会覆盖 默认实例 只有。
使用Claude Desktop
将此添加到您的Claude Desktop配置中(~/.claude/desktop_config.json):
{
"mcpServers": {
"llng": {
"command": "node",
"args": ["/path/to/llng-mcp/dist/index.js"]
}
}
}如果您在中有配置 ~/.llng-mcp.json,它将自动加载。您还可以通过环境变量进行覆盖:
{
"mcpServers": {
"llng": {
"command": "node",
"args": ["/path/to/llng-mcp/dist/index.js"],
"env": {
"LLNG_MODE": "api",
"LLNG_API_URL": "https://manager.example.com/api/v1"
}
}
}
}与其他MCP客户端一起使用
使用npx检查工具
使用官方MCP检查器测试服务器:
npx @modelcontextprotocol/inspector node dist/index.js这将打开一个交互式检查器,您可以在其中调用工具并查看结果。
配置
配置MCP客户端以连接到stdio服务器。例如,与 cline:
{
"mcpServers": {
"llng": {
"command": "node",
"args": ["/absolute/path/to/llng-mcp/dist/index.js"]
}
}
}工具参考
备注:所有工具都接受可选 instance 参数(字符串),以针对特定的LLNG实例。如果省略,则使用默认实例。配置管理
| 工具 | 说明 | 参数 | 模式 |
|---|---|---|---|
| llng_config_info | 获取配置元数据 | 无 | 两者都有 |
| llng_health | 健康检查 | 无 | 两者都有 |
| llng_flush_cache | 刷新本地缓存 | 目标(config/sessions/all) | SSH/K8s |
| llng_version | 获取llng版本 | 无 | SSH/K8s |
| llng_config_get | 获取配置值 | 键(string\[\]) | 两者都有 |
| llng_config_set | 更新配置值 | 键(对象)、日志(字符串) | 两者都有 |
| llng_config_addKey | 添加复合键 | 键、子键、值 | 两者都有 |
| llng_config_delKey | 删除复合密钥 | 密钥,子密钥 | 两者都有 |
| llng_config导出 | 导出为JSON | 无 | 两者都有 |
| llng_config_import | 从JSON导入 | JSON(字符串) | 两者都有 |
| llng_configure_merge | 合并JSON | JSON(字符串) | 两者都有 |
| llng_config_rollback | 还原上一个 | 无 | 两者都有 |
| llng_configure_update_cache | 强制缓存刷新 | 无 | 两者都有 |
| llng_config_test_email | 发送测试电子邮件 | 目的地(字符串) | SSH/K8s |
会话管理
| 工具 | 说明 | 参数 | 模式 |
|---|---|---|---|
| llng_session_get | 获取会话 | id、后端、持久、哈希、刷新令牌 | 两者都有 |
| llng_session_search | 搜索会话 | 其中,选择,后端,计数,种类,持久,哈希,idOnly,refreshTokens | 两者都有 |
| llng_session_delete | 删除会话 | id(可选),其中、种类、后端、持久、哈希、刷新令牌 | 两者都有 |
| llng_session_setKey | 修改会话 | id、密钥、后端、持久、哈希、刷新令牌 | 两者 |
| llng_session_delKey | 删除属性 | id、键、后端、持久、哈希、刷新令牌 | 两者 |
| llng_session_backup | 导出会话 | 后端、持久、刷新令牌 | 两者都有 |
双重认证
| 工具 | 说明 | 参数 | 模式 |
|---|---|---|---|
| llng_2fa_list | 仅列出设备 | 用户(字符串) | API |
| llng_2fa_delete | 删除设备 | 用户,id(string\[\]) | 仅限API |
| llng_2fa_delType | 按类型删除 | 用户,类型(字符串) | 仅限API |
用户同意书
| 工具 | 说明 | 参数 | 模式 |
|---|---|---|---|
| llng_consent_list | 列表同意 | 用户(字符串) | 仅限API |
| llng_consent_delete | 吊销同意 | 用户,id(string\[\]) | 仅限API |
实例发现
| 工具 | 说明 | 参数 | 模式 |
|---|---|---|---|
| llng_instances | 列出可用实例 | 无 | 两者都有 |
OIDC依赖方管理
| 工具 | 说明 | 参数 | 模式 |
|---|---|---|---|
| llng_oidc_issuer_enable | 启用oidc发卡机构 | 强制(可选bool) | 两者都有 |
| llng_oidc_rp_list | 列出oidc rp | 无 | 两者都有 |
| llng_oidc_rp_get | 获取rp详细信息 | confKey | 两者都有 |
| llng_oidc_rp_add | 添加新的rp | confKey、clientId、redirectUris、clientSecret、displayName、exportedVars、extraClaims、选项 | 两者都有 |
| llng_oidc_rp_delete | 删除rp | confKey | 两者都有 |
CLI实用程序
| 工具 | 说明 | 参数 | 模式 |
|---|---|---|---|
| llng_download_saml_metadata | 下载saml元数据 | url,输出文件,无检查,详细 | SSH/K8s |
| llng_import_metadata | 导入SAML联合 | url、spPrefix、idpPrefix、ignoreSp、ignoreIdp、remove、noCheck、verbose | SSH/K8s |
| llng_delete_session | 按UID删除会话 | UID、强制、调试 | SSH/K8s |
| llng_user_attributes | 查找用户属性 | 用户名,字段 | SSH/K8s |
| llng_purge_central_cache | 从中央缓存中清除过期会话 | 调试、强制、json | SSH/K8s |
| llng_purge_local_cache | 从本地缓存中清除过期会话 | 调试 | SSH/K8s |
| llng_rotate_oidc_keys | 旋转oidc签名密钥 | 调试 | SSH/K8s |
OIDC测试
| 工具 | 描述 | 参数 | 需要配置 |
|---|---|---|---|
| llng_oidc_mediata | 提取发现 | 无 | oidc配置 |
| llng_oidc_authority | 获取身份验证URL | 作用域(可选) | oidc配置 |
| llng_oidc_tokens | 交换代码 | 代码,代码验证器 | oidc配置 |
| llng_oidc_userinfo | 获取用户信息 | 访问令牌(字符串) | oidc配置 |
| llng_oidc_Inspect | 检查令牌 | 令牌(字符串) | oidc配置 |
| llng_oidc_refresh | 刷新令牌 | 刷新令牌(字符串) | oidc配置 |
| llng_oidc_whami | 解码ID令牌 | ID_token(字符串) | oidc配置 |
| llng_oidc_check_auth | 测试保护 | url,access_token | oidc配置 |
文档
完整的LemonLDAP::NG文档索引作为Brotli压缩文件捆绑在包中(data/index.json.br).在查询时,只需要一个Ollama实例来计算搜索查询的嵌入(模型: nomic-embed-text).
| 工具 | 描述 | 参数 | 需要 |
|---|---|---|---|
| llng_doc_search | llng文档中的语义搜索 | 查询(字符串),限制(int) | Ollama |
配置:
OLLAMA_URL--Ollama端点(默认值:http://localhost:11434)LLNG_DOC_INDEX--覆盖文档索引文件的路径
发展
构建
npm run build观看模式
npm run dev单元测试
npm test集成测试
运行Lemondap NG实例需要Docker Compose:
npm run test:integration测试堆栈包括一个完整的Lemondap NG实例,可在以下网址访问 http://localhost:19876.
在中查看测试配置 docker-compose.test.yml.
建筑
llng-mcp使用抽象层(ILlngTransport)有两种实现方式:
- SshTransport -通过SSH或本地使用child_process执行CLI命令
- K8s运输 -通过kubectl exec在Kubernetes Pod中执行CLI命令
- ApiTransport -向LLNG REST API发出HTTP请求
A. TransportRegistry 管理每个命名配置的传输实例,实现多实例支持。所有工具都通过注册表解析其传输,允许在模式和实例之间无缝切换。
捆绑的Brotli压缩文档索引(data/index.json.br)通过Ollama嵌入实现语义搜索,而不需要原始RST源。
局限性
SSH模式
2FA管理和用户同意操作需要REST API。CLI工具(lemonldap-ng-cli 和 lemonldap-ng-sessions)为这些功能提供只读或仅删除功能。
API模式
确保LLNG管理器已正确配置,启用了REST端点并提供了身份验证凭据。
OIDC工具
OIDC测试工具是可选的。如果不需要,省略OIDC配置。
相关项目
许可证
AGPL-3.0
版权所有:2026 利纳戈拉
