Token导航 LogoToken导航TokenDH.com
Acidni MCP Portal logo
运维云端stdio官方级别未说明来源级核验

Acidni MCP Portal

MCP Server

一个提供用户仪表盘、自助服务API密钥生命周期管理和自动发现服务的API密钥管理门户。

工具数

0

提示词数

0

GitHub Stars

0

资源数

0
API集成密钥管理PythonClaudeClaude DesktopClaudeVS Code

安装说明

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

作者 / 组织

Acidni-LLC

提供方

Acidni-LLC

最后核验

2026/5/17 20:20

运行时

Python

快速接入

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

命令预览

python -m venv venv

详细介绍

Acidni MCP门户

MCP发现门户 按用户密钥管理 -用户仪表板、自助APIM密钥生命周期和Acidni MCP服务器的自动发现。

特性

  • 每个用户的APIM密钥:每个用户为每个MCP服务器获得唯一的API密钥(无共享密钥)
  • 自助服务密钥生命周期:从仪表板生成、旋转和撤销密钥
  • 审计跟踪:每个关键操作都记录到Cosmos DB中以符合要求
  • 用户黑板:使用Microsoft登录以查看可用的MCP服务器并管理您的密钥
  • 自动发现: /.well-known/mcp MCP客户端自动发现服务器的端点
  • 复制粘贴配置:Claude Desktop、VS Code和cURL的预格式化配置-使用您的密钥进行个性化设置
  • 健康监测:所有注册的MCP服务器的实时运行状况

可用的MCP服务器

服务器IDAPIM产品描述
🌿 三重打印MCPterprint-mcpprod-terprint-mcp大麻批次数据、萜烯概况、库存分析
🤖 AI SDO MCPsdo-mcpprod-sdo-mcpCMDB、产品、治理、代理配置
☀️ 太阳能MCPsolar-mcpprod-solar-mcp太阳能监测、EG4逆变器数据、电池分析
🔍 RepoLens MCPrepolens-mcpprod-repolens-mcpGitHub仓库分析、清单、CI/CD、PR差异

______________________________________________________________________

每个用户密钥管理

为什么是每个用户密钥?

以前,所有用户在每台服务器上共享相同的APIM订阅密钥。这违反了 秒-003 (按产品APIM订阅密钥),并且无法:

  • 在不影响所有人的情况下撤销单个用户的访问权限
  • 跟踪哪个用户进行了哪些API调用
  • 在不干扰所有用户的情况下旋转受损密钥

现在,每个用户在每台服务器上都有自己唯一的APIM订阅,范围为正确的APIM产品。密钥是按需创建的,可以独立旋转或撤销。

建筑

graph TD
    U[User signs in via Entra ID] --> P[MCP Portal
mcp.acidni.net]
    P -->|"Generate Key"| APIM[Azure APIM
apim-terprint-dev]
    APIM -->|"Creates subscription scoped to Product"| SUB["APIM Subscription
mcp-{oid}-{server}"]
    P -->|Stores key record| COSMOS[(Cosmos DB
mcp-portal-dev)]
    P -->|Logs audit event| AUDIT[(audit-log container)]

    U2[User's MCP Client
Claude / VS Code] -->|"Per-user key in header"| APIM
    APIM -->|Routes to correct backend| MCP1[Terprint MCP]
    APIM --> MCP2[SDO MCP]
    APIM --> MCP3[Solar MCP]
    APIM --> MCP4[RepoLens MCP]

关键生命周期

动作发生了什么APIM效应宇宙效应
生成创建服务器产品范围内的新APIM订阅PUT /subscriptions/{sid} 随着 state: active在中更新关键记录 user-keys
旋转重新生成主键(旧密钥立即停止工作)POST /subscriptions/{sid}/regeneratePrimaryKey更新 key_hint,增量 rotation_count
撤销暂停订阅(软删除,可以重新启用)PATCH /subscriptions/{sid} 随着 state: suspended套装 state: revoked,记录 revoked_at

订阅命名

APIM订阅使用确定性命名模式:

mcp-{first 12 chars of user OID}-{server-id}

例子: mcp-a1b2c3d4e5f6-terprint-mcp

这确保了每个用户+服务器组合映射到一个订阅,并重新生成创建/更新,而不是复制。

数据流

  1. 用户登录: mcp.acidni.net 通过输入ID(MSAL)
  2. 仪表板显示所有4台MCP服务器的关键状态(绿色=活动,红色=无)
  3. 用户点击 生成密钥 在服务器上
  4. 门户调用APIM Management API以创建范围为服务器的APIM产品的订阅
  5. 通过APIM获取键值 listSecrets
  6. 存储在Cosmos DB中的关键记录(提示+元数据) user-keys 容器
  7. 审计事件记录到Cosmos DB audit-log 容器
  8. 用户从服务器详细信息页面复制其个性化配置(Claude Desktop、VS Code或cURL)
  9. MCP客户端使用每个用户密钥发送请求 Ocp-Apim-Subscription-Key 头球
  10. APIM验证密钥,根据产品到API的映射路由到正确的后端

共享密钥(仅健康检查)

门户仍然保存来自密钥库的共享APIM订阅密钥(apim-*-subscription-key).这些被使用 用于服务器端健康检查代理(/api/health/{id}).它们永远不会暴露给用户或包含在导出的配置中。

______________________________________________________________________

快速开始

对于用户

  1. 访问 https://mcp.acidni.net
  2. 使用您的Microsoft帐户登录
  3. 在仪表板上,单击 生成密钥 在要使用的每个MCP服务器旁边
  4. 转到服务器详细信息页面并复制您的配置代码段
  5. 粘贴到MCP客户端配置文件中

配置Claude桌面

在门户上生成密钥后,转到每个服务器的详细信息页面。门户生成一个即贴即用的 claude_desktop_config.json 使用您的个人密钥的片段:

{
  "mcpServers": {
    "terprint-mcp": {
      "command": "npx",
      "args": ["-y", "@anthropic-ai/mcp-proxy@latest", "--header",
               "Ocp-Apim-Subscription-Key: YOUR_PERSONAL_KEY_HERE",
               "https://api.acidni.net/terprint-mcp/mcp"]
    }
  }
}

每个服务器都有自己的唯一密钥。做 重用旧的共享密钥-从门户生成新的每个用户密钥。

配置VS代码

该门户还生成VS代码MCP设置。从服务器详细信息页面复制:

{
  "mcp": {
    "servers": {
      "terprint-mcp": {
        "type": "sse",
        "url": "https://api.acidni.net/terprint-mcp/mcp",
        "headers": {
          "Ocp-Apim-Subscription-Key": "YOUR_PERSONAL_KEY_HERE"
        }
      }
    }
  }
}

自动发现(适用于MCP客户端)

MCP客户端可以通过以下方式发现可用服务器:

GET https://mcp.acidni.net/.well-known/mcp

______________________________________________________________________

API终点

门户网站和Web

端点身份验证描述
GET /登录页面
GET /dashboard每个服务器都有密钥状态的用户仪表板
GET /server/{id}服务器详细信息,包括密钥管理+配置片段
GET /.well-known/mcpMCP发现清单
GET /health门户健康检查

数据API

端点身份验证描述
GET /api/servers可选列出所有服务器(包括 has_key 每个用户)
GET /api/configs/claude-desktop带每个用户密钥的完整Claude桌面配置
GET /api/configs/vscode具有每个用户密钥的完整VS代码配置
GET /api/health/{id}代理服务器健康检查(使用共享密钥)

密钥管理API

端点身份验证描述
GET /api/keys列出当前用户的所有关键记录
POST /api/keys/{server_id}为服务器生成新的每个用户密钥
POST /api/keys/{server_id}/rotate旋转(重新生成)用户密钥
DELETE /api/keys/{server_id}撤销(挂起)用户密钥

______________________________________________________________________

基础设施

Azure资源

资源类型资源组
ca-mcp-portal容器应用程序rg-dev-acidni-shared
apim-terprint-devAPI管理rg-terprint-apim-dev
acidni-cosmos-devCosmos数据库rg-acidni-shared-dev
kv-terprint-dev密钥库rg-terprint-dev

Cosmos数据库

财产价值
账户 acidni-cosmos-dev
端点https://acidni-cosmos-dev.documents.azure.com:443/
数据库mcp-portal-dev
集装箱: user-keys分区密钥: /user_oid
集装箱: audit-log分区密钥: /user_oid

APIM产品

每个MCP服务器都映射到一个APIM产品。每个用户的订阅仅限于这些产品,因此APIM会自动处理到正确后端API的路由。

服务器IDAPIM产品
terprint-mcpprod-terprint-mcp
sdo-mcpprod-sdo-mcp
solar-mcpprod-solar-mcp
repolens-mcpprod-repolens-mcp

所需的RBAC角色分配

容器应用程序的托管身份(ca-mcp-portal)需求:

资源角色目的
apim-terprint-devAPI Management Service Contributor创建/管理每个用户的订阅
acidni-cosmos-dev / mcp-portal-devCosmos DB Built-in Data Contributor读/写关键记录和审计日志
kv-terprint-devKey Vault Secrets User读取共享密钥和身份验证密钥

______________________________________________________________________

发展

先决条件

  • Python 3.12+
  • Azure CLI(用于密钥库和托管身份访问)

本地设置

# Clone the repository
git clone https://github.com/Acidni-LLC/acidni-mcp-portal.git
cd acidni-mcp-portal

# Create virtual environment
python -m venv venv
venv/Scripts/Activate.ps1  # Windows
source venv/bin/activate   # Linux/Mac

# Install dependencies
pip install -e ".[dev]"

# Create .env file
cat > .env << EOF
ENVIRONMENT=development
DEBUG=true
KEYVAULT_NAME=kv-terprint-dev
EOF

# Run locally
python -m src.main

环境变量

变量描述默认值
ENVIRONMENT开发/生产
DEBUG启用调试模式false
KEYVAULT_NAMEAzure密钥保管库名称kv terprint dev
SECRET_KEY会话加密密钥(从KV加载)

密钥库秘密

秘密目的
azure-tenant-id 输入租户ID。
mcp-portal-client-id应用注册客户端ID
mcp-portal-client-secret应用注册客户端密码
mcp-portal-session-secret会话加密密钥
apim-terprint-mcp-subscription-key共享密钥-仅用于健康检查代理
apim-sdo-mcp-subscription-key共享密钥-仅用于健康检查代理
apim-solar-mcp-subscription-key共享密钥-仅用于健康检查代理
apim-repolens-mcp-subscription-key共享密钥-仅用于健康检查代理

项目结构

src/
  main.py                  # FastAPI app, lifespan init for Cosmos + APIM manager
  config.py                # Settings loaded from env + Key Vault
  auth.py                  # Entra ID / MSAL authentication
  registry.py              # MCP server registry (static catalog)
  routes/
    __init__.py             # Exports api_router, keys_router, web_router
    api.py                  # Data API routes (servers, configs, health proxy)
    keys.py                 # Key lifecycle API (generate, rotate, revoke)
    web.py                  # HTML page routes (dashboard, server detail)
  services/
    key_manager.py          # APIM Management REST API client
    cosmos_client.py        # Cosmos DB user-keys + audit-log client
  templates/
    dashboard.html          # Dashboard with key status + HTMX key management
    server_detail.html      # Server detail with key display + config snippets
    ...

部署

通过GitHub Actions部署到Azure容器应用程序:

  • 容器应用: ca-mcp-portal
  • 资源组: rg-dev-acidni-shared
  • 自定义域名: mcp.acidni.net
  • ACR图像: cracidnidev.azurecr.io/acidni-mcp-portal

______________________________________________________________________

安全

  • 用户访问没有共享密钥 -每个用户都获得唯一的APIM订阅密钥(SEC-ASR-003)
  • APIM验证所有请求 -MCP服务器位于内部入口后面,只能通过APIM(SEC-ASR-001)访问
  • 处处管理身份 -门户使用 DefaultAzureCredential 适用于APIM、Cosmos和密钥库
  • 审计日志 -每个键的创建/旋转/撤销都会与用户OID、电子邮件、时间戳一起记录到Cosmos DB中
  • 撤销时软删除 -订阅被暂停,而不是被销毁,允许进行取证审查
  • 仅在Cosmos中提供关键提示 -仅存储最后4个字符;APIM是完整键值的真实来源

许可证

专有-Acidni有限责任公司

目录标签

目录标签

API集成密钥管理PythonClaudeAPI管理本地部署自助服务用户仪表盘自动发现

支持客户端

Claude DesktopClaudeVS Code

接入字段

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

stdio

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

session

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

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

0

权限和风险

stdiosession部署方式未说明

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

安装前确认

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

来源信息

继续浏览同类 MCP