Token导航 LogoToken导航TokenDH.com
Create Gh App logo
安全风控stdio官方级别未说明来源级核验

Create Gh App

MCP Server

@true-and-useful/create-gh-app

Janee是一款通过MCP协议为AI代理提供密钥管理的本地优先服务,可安全注入凭证、执行策略并记录完整审计日志。

工具数

5

提示词数

0

GitHub Stars

27

资源数

0
密钥管理安全TypeScriptClaudeClaude DesktopClaudeCursor

安装说明

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

作者 / 组织

rsdouglas

提供方

rsdouglas

最后核验

2026/5/17 20:20

运行时

Node.js

快速接入

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

命令预览

npx @true-and-useful/create-gh-app create my-agent --owner @me

详细介绍

珍妮🔐

通过MCP对AI代理进行秘密管理

](https://www.npmjs.com/package/@true-and-useful/janee) ](https://www.npmjs.com/package/@true-and-useful/janee) ![License: MIT](https://opensource.org/licenses/MIT) ](https://github.com/rsdouglas/janee)

您的人工智能代理需要API访问才能发挥作用。但是他们不应该有你的原始API密钥。 Janee位于代理和API之间——注入凭据、执行策略和记录所有内容。

✨ 特性

🔒 零知识代理代理在没有看到密钥的情况下调用API
📋 完整的审计追踪每个请求都记录了时间戳、方法、路径和状态
🛡️ 请求策略允许/拒绝每个功能的规则(例如,只读条带)
⏱️ 会话TTL具有即时撤销功能的限时访问
🔌 适用于任何MCP客户端Claude Desktop、Cursor、OpenClaw等
🏠 本地优先密钥在您的计算机上加密,从不发送到云端
🖥️ 执行模式使用注入的凭据运行CLI工具——代理永远看不到密钥
🤖 GitHub应用程序认证自治代理的短期令牌——没有静态PAT
🐦 Twitter/X OAuth 1.0a按请求OAuth签名——4个秘密保持加密
☁️ AWS SigV4签署AWS API服务器端请求-SES、S3等
🔧 自动git身份验证git push/pull 仅在凭据包含GitHub令牌时有效

______________________________________________________________________

问题

人工智能代理需要API访问才能发挥作用。目前的做法是给他们你的钥匙,并希望他们表现良好。

  • 🔓 客服可以完全访问Stripe、Gmail和数据库
  • 📊 没有访问内容或原因的审计跟踪
  • 🚫 事情出错时没有停止开关
  • 💉 一次及时注射远离灾难

______________________________________________________________________

解决方案

珍妮是一个 主控程序 为人工智能代理管理API机密的服务器:

  1. 存储API密钥 --在本地加密 ~/.janee/
  2. janee serve --启动MCP服务器
  3. 代理请求访问 --via execute MCP工具
  4. Janee注入真正的密钥 --特工从未见过它
  5. 所有内容都已记录 --完整审计追踪

你的钥匙留在你的机器上。特工们从未见过他们。你保持控制。

______________________________________________________________________

配置一次,随处使用

在Janee中设置API一次:

services:
  stripe:
    baseUrl: https://api.stripe.com
    auth: { type: bearer, key: sk_live_xxx }
  github:
    baseUrl: https://api.github.com
    auth: { type: bearer, key: ghp_xxx }
  openai:
    baseUrl: https://api.openai.com
    auth: { type: bearer, key: sk-xxx }

现在 每个代理人 连接到Janee的用户可以使用它们:

  • 克劳德桌面版 --访问您的API
  • 光标 --访问您的API
  • 开爪 --访问您的API
  • 任何MCP客户端 --访问您的API

不再在工具之间复制密钥。不再是“哪个代理配置了哪个API?”添加新代理?它已经可以访问一切。撤销钥匙?在Janee中更新一次。

一个配置。每个特工。完整的审计跟踪。

______________________________________________________________________

快速开始

安装

npm install -g @true-and-useful/janee

初始化

janee init

这创造了 ~/.janee/config.yaml 示例服务。

添加服务

选项1:交互式(建议首次使用)

janee add

Janee将指导您添加服务:

Service name: stripe
Base URL: https://api.stripe.com
Auth type: bearer
API key: sk_live_xxx

✓ Added service "stripe"

Create a capability for this service? (Y/n): y
Capability name (default: stripe): 
TTL (e.g., 1h, 30m): 1h
Auto-approve? (Y/n): y

✓ Added capability "stripe"

Done! Run 'janee serve' to start.

使用AI代理?非交互式设置 对于跳过提示的标志,或 特定代理指南 在......下面

选项2:直接编辑配置

编辑 ~/.janee/config.yaml:

services:
  stripe:
    baseUrl: https://api.stripe.com
    auth:
      type: bearer
      key: sk_live_xxx

capabilities:
  stripe:
    service: stripe
    ttl: 1h
    autoApprove: true

添加CLI工具(exec模式)

一些工具需要凭据作为环境变量,而不是HTTP标头。Exec模式处理此问题:

janee add twitter --exec \
  --key "tvly-xxx" \
  --allow-commands "bird,tweet-cli" \
  --env-map "TWITTER_API_KEY={{credential}}"

现在,代理可以通过Janee运行CLI工具,而无需看到API密钥:

// Agent calls janee_exec tool
janee_exec({
  capability: "twitter",
  command: ["bird", "post", "Hello world!"],
  cwd: "/home/agent/project",  // optional working directory
  reason: "User asked to post a tweet"
})

Janee创建了这个过程 TWITTER_API_KEY 注入后,运行命令并返回stdout/stderr。凭证永远不会进入代理的上下文。

关键标志:

  • --exec --配置为exec模式(CLI包装器而不是HTTP代理)
  • --allow-commands --允许的可执行文件白名单(安全)
  • --env-map --将凭据映射到环境变量
  • --work-dir --子流程的工作目录
  • --timeout --最大执行时间(默认值:30秒)

Git操作(自动HTTPS身份验证)

当使用带有GitHub凭据的exec模式时,Janee会自动处理git身份验证。无需额外配置-- git push, git pull,以及 git clone 只是工作:

capabilities:
  - name: git-ops
    service: github
    mode: exec
    allowCommands: [git]
    env:
      GH_TOKEN: "{{credential}}"
// Agent can push code without ever seeing the token
janee_exec({
  capability: "git-ops",
  command: ["git", "push", "origin", "main"],
  cwd: "/workspace/my-repo"
})

Janee检测到 git 命令与 GH_TOKEN/GITHUB_TOKEN 并为HTTPS身份验证创建临时askpass脚本。命令完成后,脚本会自动清理。

添加GitHub App auth(适用于自主代理)

静态令牌对于长时间运行的代理来说是有风险的。GitHub App auth按需生成短期安装令牌,不需要长期PAT。

选项1:使用create gh应用程序(推荐)

npx @true-and-useful/create-gh-app create my-agent --owner @me
# Opens browser → creates app → saves credentials locally

# Install the app on your repos
# https://github.com/apps/my-agent/installations/new

# Register with Janee in one command
npx @true-and-useful/create-gh-app janee-add my-agent

完成。您的代理现在通过Janee的MCP代理获得短期GitHub令牌。

选项2:手动设置

janee add github-app \
  --auth-type github-app \
  --app-id 123456 \
  --pem-file /path/to/private-key.pem \
  --installation-id 789

或者通过配置:

services:
  github:
    baseUrl: https://api.github.com
    auth:
      type: github-app
      appId: "123456"
      pemFile: /path/to/private-key.pem
      installationId: "789"

它是如何工作的: 当代理请求访问时,Janee使用应用程序的私钥签署JWT,通过GitHub的API将其交换为1小时的安装令牌,并缓存该令牌直到到期。代理永远看不到私钥——只有短暂的令牌到达API。

启动MCP服务器

janee serve

与您的代理人一起使用

支持MCP(Claude Desktop、Cursor、OpenClaw)的代理现在可以调用 execute 通过Janee发出API请求的工具:

// Agent calls the execute tool
execute({
  capability: "stripe",
  method: "GET",
  path: "/v1/balance",
  reason: "User asked for account balance"
})

Janee解密密钥,发出请求,记录所有内容,并返回响应。

______________________________________________________________________

集成

与任何讲MCP的代理合作:

  • 开爪 --原生插件(@true-and-useful/janee-openclaw)

- 集装箱代理?容器设置指南

______________________________________________________________________

OpenClaw集成

如果你正在使用 开爪,安装本机工具支持插件:

npm install -g @true-and-useful/janee
janee init
# Edit ~/.janee/config.yaml with your services

# Install the OpenClaw plugin
openclaw plugins install @true-and-useful/janee-openclaw

在代理配置中启用:

{
  agents: {
    list: [{
      id: "main",
      tools: { allow: ["janee"] }
    }]
  }
}

您的代理现在拥有以下工具:

  • janee_list_services --发现可用的API
  • janee_execute -通过Janee发出API请求

插件生成 janee serve 自动。所有请求都记录到 ~/.janee/logs/.

______________________________________________________________________

MCP工具

Janee公开了三个MCP工具:

工具说明
list_services发现可用的API及其策略
execute通过Janee(HTTP代理模式)发出API请求
exec使用注入的凭据运行CLI命令(exec模式)
manage_credential查看、授予或撤销对代理范围凭据的访问权限
reload_config添加/删除服务后从磁盘重新加载配置(在启动时可用 janee serve)

代理发现可用的内容,然后通过Janee调用API。相同的审计追踪,相同的保护。

______________________________________________________________________

配置

Config住在 ~/.janee/config.yaml:

server:
  host: localhost

services:
  stripe:
    baseUrl: https://api.stripe.com
    auth:
      type: bearer
      key: sk_live_xxx  # encrypted at rest

  github:
    baseUrl: https://api.github.com
    auth:
      type: bearer
      key: ghp_xxx

capabilities:
  stripe:
    service: stripe
    ttl: 1h
    autoApprove: true

  stripe_sensitive:
    service: stripe
    ttl: 5m
    requiresReason: true

服务 =具有真实密钥的真实API\ 能力 =代理可以根据策略请求什么

支持的身份验证类型

类型描述示例
bearer授权头中的承载令牌Stripe、OpenAI、GitHub
basicHTTP基本身份验证(用户名+密码)内部API
hmac-bybitBybit的HMAC-SHA256签名Bybit交换
hmac-okxHMAC-SHA256+用于OKXOKX交换的密码
hmac-mexcMEXCMEXC交易所的HMAC-SHA256签名
headers自定义键值头非标准API
service-account谷歌服务帐户JSON密钥谷歌云
github-app短时间使用的GitHub安装令牌GitHub API
oauth1a-twitterOAuth 1.0a per-request签名Twitter/X API v2
aws-sigv4AWS Signature V4每次请求签名SES、S3和其他AWS服务

Twitter/X OAuth 1.0a

Janee在服务器端计算OAuth 1.0a签名(HMAC-SHA1),因此您的4个推特秘密在静止时保持加密,永远不会进入代理的上下文:

services:
  twitter:
    baseUrl: https://api.x.com
    auth:
      type: oauth1a-twitter
      consumerKey: xxx        # encrypted at rest
      consumerSecret: xxx     # encrypted at rest
      accessToken: xxx        # encrypted at rest
      accessTokenSecret: xxx  # encrypted at rest

capabilities:
  twitter:
    service: twitter
    ttl: 1h
    autoApprove: true

或者使用内置模板:

janee add twitter

AWS SigV4

Janee根据每个请求计算AWS签名V4(HMAC-SHA256),使您的访问密钥保持加密状态。非机密字段(region, awsService)保持普通配置:

services:
  aws-ses:
    baseUrl: https://email.us-east-1.amazonaws.com
    auth:
      type: aws-sigv4
      accessKeyId: AKIA...     # encrypted at rest
      secretAccessKey: xxx     # encrypted at rest
      region: us-east-1
      awsService: ses

capabilities:
  aws-ses:
    service: aws-ses
    ttl: 1h
    autoApprove: true

常见AWS服务的内置模板:

janee add aws-ses    # Amazon SES
janee add aws-s3     # Amazon S3

访问控制

控制哪些代理可以使用哪些功能:

server:
  host: localhost
  defaultAccess: restricted   # capabilities require explicit allowlist

capabilities:
  stripe:
    service: stripe
    ttl: 1h
    allowedAgents: ["agent-a", "agent-b"]   # only these agents can use it

  github:
    service: github
    ttl: 1h
    # no allowedAgents + defaultAccess: restricted → no agent can use this
  • defaultAccess: restricted --能力没有 allowedAgents 列表对所有代理隐藏
  • defaultAccess: open (默认)--没有 allowedAgents 列表可供所有代理使用
  • allowedAgents --代理名称的每个功能列表(与 clientInfo.name 从MCP初始化握手开始)

代理在运行时创建的凭据默认为 agent-only access——只有创建代理可以使用它们,除非它通过 manage_credential 工具。

执行模式功能

services:
  twitter:
    auth:
      type: bearer
      key: tvly-xxx

capabilities:
  twitter:
    service: twitter
    mode: exec
    allowCommands: ["bird", "tweet-cli"]
    envMap:
      TWITTER_API_KEY: "{{credential}}"
    ttl: 1h
    autoApprove: true

执行模式功能使用 janee_exec 而不是 execute。凭据作为环境变量注入——代理只看到stdout/stderr。

exec模式下的转轮硬化默认值:

  • 隔离的最小环境(没有完整的主机环境继承)
  • 临时的 HOME 按命令
  • 超时会终止进程组

运行者/权限模式(适用于容器)

当代理在Docker容器内运行时, janee_exec 在远程主机上无法访问容器文件系统。Runner/Authority架构解决了这个问题:

  • 权威 在主机上运行:保存凭据,强制执行策略,代理API请求
  • 跑者 在每个容器内运行:将MCP提供给代理,将非exec调用转发给权威机构,运行 janee_exec 本地
# Host: start Authority (MCP + exec authorization on one port)
janee serve -t http -p 3100 --host 0.0.0.0 --runner-key "$JANEE_RUNNER_KEY"

# Container: start Runner (agent talks to this)
janee serve -t http -p 3200 --host 127.0.0.1 \
  --authority http://host.docker.internal:3100 --runner-key "$JANEE_RUNNER_KEY"

代理人只需要 JANEE_URL=http://localhost:3200.

您还可以将管理局作为独立进程运行:

janee authority --runner-key "$JANEE_RUNNER_KEY" --host 127.0.0.1 --port 9120

请参阅 跑步者/权威指南 完整的架构、exec授权流程、Docker Compose示例和故障排除。

______________________________________________________________________

请求策略

准确控制每个功能可以使用哪些请求 rules:

capabilities:
  stripe_readonly:
    service: stripe
    ttl: 1h
    rules:
      allow:
        - GET *
      deny:
        - POST *
        - PUT *
        - DELETE *

  stripe_billing:
    service: stripe
    ttl: 15m
    requiresReason: true
    rules:
      allow:
        - GET *
        - POST /v1/refunds/*
        - POST /v1/invoices/*
      deny:
        - POST /v1/charges/*  # Can't charge cards
        - DELETE *

规则如何运作:

  1. deny 先检查图案 --明确否认总是成功的
  2. 然后 allow 检查图案 --必须匹配才能继续
  3. 未定义规则 → 允许所有(向后兼容)
  4. 规则已定义但不匹配 → 默认拒绝

图案格式: METHOD PATH

  • GET * → 任何GET请求
  • POST /v1/charges/* → POST到/v1/charges/和子路径
  • * /v1/customers → 任何方法到/v1/客户
  • DELETE /v1/customers/* → 删除任何客户

这使得安全成为现实: 即使代理对其“原因”撒谎,它也只能访问策略允许的端点。执行发生在服务器端。

______________________________________________________________________

CLI参考

janee init                    # Set up ~/.janee/ with example config
janee add                     # Add a service (interactive)
janee add stripe -u https://api.stripe.com -k sk_xxx  # Add with args
janee remove         # Remove a service
janee remove  --yes  # Remove without confirmation
janee list                    # List configured services
janee list --json             # Output as JSON (for integrations)
janee search [query]          # Search service directory
janee search stripe --json    # Search with JSON output
janee cap list                # List capabilities
janee cap list --json         # List capabilities as JSON
janee cap add  --service   # Add capability
janee cap edit          # Edit capability
janee cap remove        # Remove capability
janee serve                   # Start MCP server (stdio, default)
janee serve --transport http --port 9100  # Start with HTTP transport (for containers)
janee serve --authority https://janee.example.com --runner-key $JANEE_RUNNER_KEY  # Runner mode
janee authority --runner-key $JANEE_RUNNER_KEY  # Start authority API
janee logs                    # View audit log
janee logs -f                 # Tail audit log
janee logs --json             # Output as JSON
janee sessions                # List active sessions
janee sessions --json         # Output as JSON
janee revoke              # Kill a session

非交互式设置(适用于AI代理)

AI代理无法响应交互式提示。使用 --*-from-env 从环境变量中读取凭据的标志——这可以将秘密排除在代理的上下文窗口之外:

# Bearer auth (Stripe, OpenAI, etc.)
janee add stripe -u https://api.stripe.com --auth-type bearer --key-from-env STRIPE_KEY

# HMAC auth (Bybit)
janee add bybit --auth-type hmac-bybit --key-from-env BYBIT_KEY --secret-from-env BYBIT_SECRET

# HMAC auth with passphrase (OKX)
janee add okx --auth-type hmac-okx --key-from-env OKX_KEY --secret-from-env OKX_SECRET --passphrase-from-env OKX_PASS

# GitHub App auth (short-lived tokens)
janee add github --auth-type github-app --app-id-from-env GH_APP_ID --pem-from-env GH_PEM --installation-id-from-env GH_INSTALL_ID

# Twitter/X OAuth 1.0a (per-request signing)
janee add twitter --consumer-key $TWITTER_CONSUMER_KEY --consumer-secret $TWITTER_CONSUMER_SECRET \
  --access-token $TWITTER_ACCESS_TOKEN --access-token-secret $TWITTER_ACCESS_TOKEN_SECRET

# AWS SigV4 (SES, S3, etc.)
janee add aws-ses --access-key-id $AWS_ACCESS_KEY_ID --secret-access-key $AWS_SECRET_ACCESS_KEY \
  --region us-east-1 --aws-service ses

当所有必需的凭据都通过标志提供时,Janee:

  • 从不打开读线(不挂在stdin上)
  • 自动创建具有合理默认值的功能(1h TTL,自动批准)

您还可以编辑 ~/.janee/config.yaml 如果你愿意,可以直接。

______________________________________________________________________

运作原理

┌─────────────┐      ┌──────────┐      ┌─────────┐
│  AI Agent   │─────▶│  Janee   │─────▶│  Stripe │
│             │ MCP  │   MCP    │ HTTP │   API   │
└─────────────┘      └──────────┘      └─────────┘
      │                   │
   No key           Injects key
                    + logs request
  1. 客服电话 execute 具有能力、方法和路径的MCP工具
  2. Janee查找服务配置,解密真实密钥
  3. 使用密钥向真实的API发出HTTP请求
  4. 日志:时间戳、服务、方法、路径、状态
  5. 向代理返回响应

特工从不碰真正的钥匙。

📐 深潜:架构和安全模型 查看详细的图表、威胁模型以及与替代方案的比较。

______________________________________________________________________

安全

  • 加密:使用AES-256-GCM存储的密钥
  • 代理人身份:源自 clientInfo.name 在MCP初始化握手中--不需要自定义标头
  • 代理隔离:每个代理都有自己的会话,具有隔离的身份(HTTP传输为每个会话创建服务器+传输)
  • 访问控制:按能力 allowedAgents 白名单+服务器范围 defaultAccess 政策
  • 凭证范围:代理创建的凭据默认为 agent-only
  • 审核日志:记录到的每个请求 ~/.janee/logs/
  • 会话:有时限,可撤销
  • 紧急停止开关: janee revoke 或删除配置

______________________________________________________________________

码头工人

将Janee作为容器运行——不需要本地Node.js:

# Build
docker build -t janee .

# Run in HTTP mode
docker run -d -p 3000:3000 \
  -v ~/.janee:/root/.janee:ro \
  janee --transport http --port 3000 --host 0.0.0.0

或者使用Docker Compose:

mkdir -p config && cp ~/.janee/config.yaml config/
docker compose up -d

有关带Docker的Claude Desktop,请参阅 .

______________________________________________________________________

贡献

我们欢迎捐款!请阅读 贡献.md 在提交PR之前,它包括所需的PR清单(测试、变更日志、版本升级等)。

______________________________________________________________________

许可证

麻省理工学院-由 真实有用有限责任公司

______________________________________________________________________

停止向AI代理提供密钥。开始控制访问。 🔐

目录标签

目录标签

密钥管理安全TypeScriptClaude本地部署AI安全零信任架构API网关审计日志

支持客户端

Claude DesktopClaudeCursor

接入字段

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

stdio

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

oauth

运行时(runtime,运行环境)

Node.js

来源包(packageName,安装包名)

@true-and-useful/create-gh-app

工具数量(toolCount,工具数)

5

资源数量(resourceCount,资源数)

0

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

0

权限和风险

stdiooauth部署方式未说明

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

安装前确认

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

来源信息

继续浏览同类 MCP