SSO管理工具

一款用于管理Lemonldap-NG Web SSO实例的工具,支持配置、会话、OIDC、SAML、双因素认证等功能。

  • by linagora
  • TypeScript
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 linagora/llng-mcp

使用说明

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 -用户使用sudo
  • LLNG_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_NAMESPACE Kubernetes 命名空间
  • LLNG_K8S_DEPLOYMENT -部署名称
  • LLNG_K8S_CONTAINER -容器名称(可选)
  • LLNG_K8S_POD_SELECTOR -标签选择器覆盖
  • LLNG_K8S_BIN_PREFIX -pod内LLNG二进制文件的路径

API配置

  • LLNG_API_URL -API基本URL
  • LLNG_API_BASIC_USER -HTTP基本身份验证用户名
  • LLNG_API_BASIC_PASSWORD -HTTP基本身份验证密码
  • LLNG_API_VERIFY_SSL -设置为“false”跳过SSL验证

OIDC配置

  • LLNG_OIDC_ISSUER -OIDC发行人URL
  • LLNG_OIDC_CLIENT_ID -OIDC客户端ID
  • LLNG_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配置。

相关项目

  • llng助理 --由本地LLM(Ollama)支持的LLNG交互式CLI助手。使用llng-mcp通过自然语言管理多个实例。
  • 柠檬汁: --web SSO和访问管理平台。

许可证

AGPL-3.0

版权所有:2026 利纳戈拉