SecureInput について
SecureInputは、コーディングエージェント向けのオープンソースなローカルMCPサーバーです。APIキー、パスワード、トークンを別の入力画面で受け取り、通常はMCPの結果に秘密情報を含めず、ローカルコマンドへの受け渡しや権限制限付き.envへの保存を行います。
主な機能
- 01インラインフォームまたはペアリング済みブラウザー入力
- 02標準入力または環境変数で受け渡し
- 03.envファイルへ安全に書き込み
- 04リクエストの確認とキャンセル
- 05MCPの結果に秘密情報を含めない設計
- 06ローカルループバックアドレスのみで待ち受け
活用シーン
- 01チャットに貼らずにAPIキーを渡す
- 02ローカルコマンドに認証情報を渡す
- 03プロジェクトの.env設定を更新
- 04ヘッドレスエージェントから一度限りの認証情報を要求
MCP 対応
stdioのMCPブリッジを通じてrequest_secret、状態確認、キャンセル用ツールを提供します。対応クライアントではインラインフォームを表示し、それ以外ではペアリング済みのローカルブラウザーを使います。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
SecureInput — AI コーディングエージェント向けのプライベートな API キー入力
チャットに API キーを貼り付けずに、AI コーディングエージェントに必要なアクセス権を渡せます。 SecureInput は、API キー、パスワード、トークンを扱うオープンソースのローカル優先型 Model Context Protocol(MCP)サーバーです。ホストが対応している場合はインライン MCP App で入力を受け付け、それ以外の場合はペアリング済みの localhost ブラウザーで受け付けます。値を標準入力または環境変数経由でローカルコマンドに渡すか、.env ファイルに書き込めます。
デフォルトの MCP 応答には、シークレットではなくステータスと終了情報が含まれます。MCP ブリッジは、Claude Code、Cursor、Codex、VS Code / GitHub Copilot、Windsurf、Cline などの stdio クライアント向けに設計されています。インライン表示は、ホストが MCP Apps に対応している場合に利用できます。macOS と Linux では Node.js 22 以降が必要です。
インストール · エージェントを接続する · セキュリティと信頼 · FAQ
20 秒の図解付き概要を見る · 偽のキーで実際のウィジェットを試す
agent: "I need a GitHub token to create the repo."
│
▼
request_secret (MCP)
│
▼
inline form in a compatible host, or paired localhost browser
│
▼
SecureInput daemon on 127.0.0.1
├── execute: gh auth login --with-token (token through stdin)
└── write_env: .env.local (plaintext file, mode 0600)
│
▼
agent: { "ok": true, "status": "completed", "exitCode": 0 }
このツールが必要な理由
コーディングエージェントは、常に認証情報を必要とします。一般的な方法には問題があります。
| 方法 | 問題点 |
|---|---|
| キーをチャットに貼り付ける | モデルのコンテキスト、トランスクリプト、ログ、場合によってはテレメトリにも含まれます。 |
| エージェントにターミナルコマンドを出力させる | 手動で実行する必要があり、キーがシェル履歴や ps に残る可能性があります。 |
| ターミナルのプロンプトに入力する | 問題ありませんが、繰り返しが面倒で、入力ミスも起きやすく、リモートエージェントやヘッドレスエージェントには使えません。 |
.env を手作業でコミットする | パーミッションの設定ミスやキーの重複、ファイルのコミットが起きやすくなります。 |
SecureInput は、認証情報を入力するための独立した経路を提供します。デフォルトでは、値を MCP ツールの結果として返しません。インラインホスト、実行するコマンド、書き込まれた .env ファイルにアクセスできるアプリケーションは、引き続き信頼境界の一部です。セキュリティモデルを参照してください。
機能
- MCP ネイティブ —
request_secretツールに加え、ポーリング、キャンセル、ステータス確認用のツールを備えています。 - ローカルのみ —
127.0.0.1にバインドし、ペアリングトークン、署名付きセッション Cookie、Origin および CSRF チェックを使用します。 - デフォルトではチャットにシークレットを含めない — エージェントが受け取るのは、リクエストのステータスと終了情報です。標準出力と標準エラー出力は MCP の結果に含まれません。
- コマンドを直接実行 — シェルは使用せず、シークレットは標準入力または環境変数経由で渡します。コマンドライン引数には決して含めません。
- 安全な
.env書き込み — アトミック置換、0600パーミッション、コメントと改行の保持に対応し、対象は.envと.env.*のみに限定されます。 - 2 つの入力モード — コンパクトなインラインフォームでは Enter キーで送信できます。ペアリング済みブラウザーでは、リクエストの詳細と、リスクの高い操作に対する追加確認が表示されます。
- 1 回限りのリクエスト — 保留中のリクエストは期限切れになり、結果は短時間のみ保持され、送信内容を取得できるのは 1 回だけです。
- 多層防御 — RE2 セーフな検証パターン、値と出力サイズの上限、ANSI の除去、出力の秘匿化、値を含まない監査メタデータを備えています。
- 小規模な shadcn/ui フロントエンド — UI はあえてシンプルにしています。ペアリング、リクエスト一覧、フォーム、結果で構成されています。
- オプトインの値返却モード — 値を本当に返す必要があるクライアント向けのモードです。デフォルトでは無効で、危険なモードであることが明示されます。
要件
- Node.js 22 以降
- macOS または Linux(Windows はコード上でサポートされていますが、CI ではまだ対象外です)
- MCP Apps 対応ホスト、またはフォールバック用の同一マシン上のブラウザー
インストール
Claude Desktop:バンドルをダウンロードする
- GitHub Releasesから
secureinput-release-0.1.0.mcpbをダウンロードします。このバンドルには署名がありません。インストールする前に、ソースとリリースを確認してください。 - Claude Desktopで、Settings → Desktop app → Manage(または旧バージョンの場合はSettings → Extensions)を開き、Extensionsの横にあるManageを選択します。次に、**Advanced settings → Install Extension…**を開き、ダウンロードしたファイルを選択します。利用可能かどうかは、組織の設定によって異なる場合があります。Claudeのインストールガイドを参照してください。
- Claudeのコネクターまたは拡張機能の設定でSecureInputが接続されていることを確認し、偽のキーを使ってテストを依頼します。インライン入力はホストのサポート状況に依存します。サポートされていない場合は、ペアリング済みのローカルブラウザーを使用してください。
このバンドルにはNode.js 22互換のランタイムが必要で、macOSとLinuxに対応しています。これは直接ダウンロードするバンドルであり、Claudeの公式ディレクトリーには掲載されていません。更新するには、新しいバンドルをダウンロードしてインストールしてください。GitHubへのプッシュだけでは、インストール済みのコピーは自動更新されません。
ソースからインストールする
npmパッケージは公開されていません。このリポジトリーからインストールするか、MCPB対応クライアント向けにGitHub ReleasesからMCPバンドルをダウンロードしてください。バンドルにはNode.js 22以降が必要で、現在署名はありません。
git clone https://github.com/r69shabh/secureinput.git
cd secureinput
npm ci
npm run build
npm link # puts `secureinput` on your PATH
SecureInputをMCPクライアントに追加します。最初のクライアント接続時に、ローカルデーモンが自動的に起動します。デーモンを自分で起動してブラウザーのフォールバックをペアリングするには、次のようにします。
secureinput serve
インラインリクエストではブラウザーは開きません。クライアントがブラウザーのフォールバックを必要とする場合、ブラウザーを開く設定が有効であれば、ペアリングページが自動的に開きます。手動で開いてペアリングすることもできます。
secureinput pair
すべて正常に動作していることも確認できます。
secureinput status
secureinput doctor
デーモンはhttp://127.0.0.1:4780でリッスンします。設定ファイルは~/.secureinput/にあり、モードは0600です。
npm linkはローカルでの使用専用です。npm install -g .またはdist/cli/index.jsの絶対パスも使用できます。
ブラウザーまたはインライン入力
ローカルのインラインウィジェットを再ビルドすると、接続済みの SecureInput サーバーが更新されたリソースを自動的に通知します。MCP ツール一覧の変更通知に対応するクライアントは、再接続せずに、以降のリクエストで新しいフォームを使用できます。すでに開いているフォームは元のバージョンのままです。ツールのメタデータを更新しないクライアントでは、再接続が必要になる場合があります。この更新機能をインストールするには、既存の MCP プロセスを一度再起動する必要があります。
GitHub へのプッシュによって、ユーザーのコンピューターに更新がインストールされることはありません。まずローカルのチェックアウトを更新してから、再ビルドしてください。更新機構が更新するのはウィジェットのみです。実行中のサーバーやデーモンに変更を反映するには、再起動が必要な場合があります。SecureInput が更新をサイレントにダウンロードまたは実行することはありません。
対応する MCP Apps クライアントでは、インライン入力がデフォルトです。クライアントがインライン入力を表示できない場合、SecureInput はペアリング済みの localhost ブラウザー入力を自動的に開きます。対応するインラインリクエストではブラウザーは開かれず、Enter キーを押すと、追加の SecureInput 確認ダイアログなしで、要求された送信が承認されます。ホストは独自の MCP ツール権限を適用する場合があります。
既存の明示的なブラウザー専用設定は維持されます。既存のインストールをインライン優先に切り替えるには、次のようにします。
secureinput settings --input-mode inline
secureinput stop
設定の変更を適用するには、MCP クライアントを再接続してください。ブラウザー入力を強制したい場合に限り、secureinput settings --input-mode browser を使用してください。
インライン入力には、MCP Apps HTML 機能を通知するホストが必要です。テキストのみのクライアントは自動的にブラウザーを使用します。どちらのモードも、同じローカルの execute または write_env の実装にデータを送信します。インラインフォームに表示されるのは、フィールドラベルと、内側に送信矢印がある丸みを帯びた枠線付きの入力欄のみです。インラインモードでは、エージェントが明示的に要求した上書きも含め、Enter キーを押すと要求された送信が承認されます。ブラウザーのフローには、独立した確認操作が用意されています。インラインフォームでは、値と1回限りのリクエスト機能を AES-256-GCM で暗号化し、新しい RSA-OAEP-SHA-256 鍵ペアで暗号化鍵をラップします。秘密鍵を保持するのはデーモンのみです。機能と公開鍵は、ウィジェット専用のツール結果メタデータで提供されます。ホストは、このメタデータがモデルのコンテキストに含まれないようにする必要があります。インラインモードではエージェントへの返送に対応していないため、ブラウザーが使用されます。
インラインウィジェットに直接のネットワークアクセスは不要です。ホストの MCP ブリッジを通じて暗号文を送信します。ただし、これはウィジェットのコードや鍵を改変する悪意あるホストから保護するものではありません。ローカルブラウザーは、チャットホストからより強固に隔離されています。どちらのモードも、承認されたコマンドのファイルシステムやネットワークへのアクセスをサンドボックス化するものではありません。また、ターミナルコマンドを使うだけで「学習に使用されない」と主張できるわけでもありません。
実際のウィジェットと、ターミナルから環境変数への書き込みフローをローカルで合成テストするには、次のようにします。
npm run build
npm run demo:host
表示されたループバック URL を開き、テスト用の偽のキーを送信してください。リファレンスホストは、制限付き iframe 内で実際の MCP App を表示します。デモ用の Node コマンドは、隔離された一時ディレクトリに、モード 0600 で .env.inline-demo を書き込みます。コンパクトなインラインフォームには、確認用のコマンドは表示されません。このリファレンスホストはテスト用フィクスチャであり、特定のチャット製品がインラインアプリに対応していることを証明するものではありません。実際の認証情報は、別途評価したホストでのみ使用してください。
コーディングエージェントを接続する
SecureInput は stdio MCP ブリッジとして動作します。最初に SecureInput を必要とするクライアントが、共有デーモンを自動的に起動します。ブラウザーのペアリングは一度だけ行えば完了です。
Claude Code
claude mcp add secureinput -- secureinput mcp
接続を確認するには、claude mcp list を実行してください。すべてのプロジェクトで設定を使用できるようにするには、secureinput の前に --scope user を追加してください。
Cursor
~/.cursor/mcp.json(またはプロジェクトの .cursor/mcp.json)に追加します。
{
"mcpServers": {
"secureinput": {
"command": "secureinput",
"args": ["mcp"]
}
}
}
Codex CLI
Codex CLI を使ってサーバーを登録します。
codex mcp add secureinput -- secureinput mcp
codex mcp list
または、~/.codex/config.toml に追加します。
[mcp_servers.secureinput]
command = "secureinput"
args = ["mcp"]
VS Code / GitHub Copilot
.vscode/mcp.json に追加します。
{
"servers": {
"secureinput": {
"type": "stdio",
"command": "secureinput",
"args": ["mcp"]
}
}
}
あらゆる MCP クライアント
コマンド secureinput、引数 mcp を指定して stdio サーバーを使用します。
{
"mcpServers": {
"secureinput": {
"command": "secureinput",
"args": ["mcp"]
}
}
}
実行ファイルが PATH にない場合は、dist/cli/index.js の絶対パスを使用します。
{
"mcpServers": {
"secureinput": {
"command": "node",
"args": ["/absolute/path/to/secureinput/dist/cli/index.js", "mcp"]
}
}
}
キーを貼り付けるよう求めるのではなく、ツールを使用するよう、エージェントのルールに次のような指示を追加します。
When you need an API key, password, or token, call the SecureInput MCP tool
request_secret. Do not ask me to paste secrets into chat. Prefer delivery
mode "execute" with the secret in stdin/env, or "write_env" for .env files.
MCP ツール
request_secret
セキュア入力リクエストを作成し、任意でユーザーの応答を待ちます。
{
"title": "GitHub CLI login",
"description": "Authenticate gh so I can create and push the repository.",
"fields": [
{
"id": "token",
"label": "GitHub token",
"description": "A fine-grained token with repo access.",
"type": "password",
"minLength": 20
}
],
"delivery": {
"mode": "execute",
"command": "gh",
"args": ["auth", "login", "--with-token"],
"stdin": "{{token}}",
"timeoutSeconds": 60
},
"waitSeconds": 30
}
フィールド:
title— リクエストの短い名前。最大 100 文字。description— シークレットが必要な理由。最大 1000 文字。cwd— 任意の作業ディレクトリ。MCP クライアントの作業ディレクトリを基準に解決され、許可されたルート内に解決される必要があります。fields— 1~10 個の入力項目。それぞれにid、label、任意のdescription、type(passwordまたはtext)、placeholder、minLength、maxLength、pattern(RE2)、required、sensitive、autocompleteを指定します。delivery—execute、write_env、またはreturn(デフォルトでは無効)。timeoutSeconds— リクエストの有効期間。30~900 秒。デフォルトは 300 秒です。waitSeconds— このツール呼び出しが待機する時間。0~240 秒。デフォルトは 30 秒です。
ユーザーが waitSeconds 以内に送信しなかった場合、結果は { "requestId": "req_…", "status": "pending", "inputMode": "inline" }(または "browser")になります。返されたリクエスト ID を指定して check_secret_request を呼び出してください。
check_secret_request
既存のリクエストをロングポーリングします。最大 45 秒間待機します。
{ "requestId": "req_…", "waitSeconds": 30 }
cancel_secret_request
保留中のリクエストをキャンセルします。
{ "requestId": "req_…" }
secureinput_status
入力モード、return モードの状態、保留中のリクエスト ID/ステータスを返します。ブラウザー/API ポリシーの完全な応答は変更されません。
配信モード
execute — シークレットを使ってコマンドを実行する
{
"mode": "execute",
"command": "gh",
"args": ["auth", "login", "--with-token"],
"cwd": ".",
"stdin": "{{token}}",
"env": {},
"timeoutSeconds": 120
}
- コマンドは
shell: falseで直接起動されます。SecureInput によるシェル補間はありません。 - シークレットフィールドは
{{fieldId}}としてstdinまたはenvの値に含められます。commandまたはargsには含められません。一部のシステムでは環境変数が他のプロセスから見える場合があるため、可能な場合は stdin を優先してください。 - 機密情報ではない
textフィールドは、ユーザー名などにargsで使用できます。 - 少なくとも 1 つのシークレット参照を
stdinまたはenv経由で渡す必要があります。 - stdout と stderr はエージェントには渡されません。ペアリングされたローカルブラウザーでは、サイズ上限付きのベストエフォートなマスキング済み出力を表示できます。
- 子プロセスには、基本的な OS 変数(PATH、HOME、一時ディレクトリの設定など)、固定のターミナル設定、明示的に指定した配信 env マッピングが渡されます。その他のデーモン環境変数は継承されません。
- タイムアウト時にはプロセスグループが終了されます。
- コマンドは非対話型である必要があります。TTY 専用のログインフローはサポートされていません。代わりに、ツールのトークン/非対話型モードを使用してください。
write_env — .env ファイルを書き込む
{
"mode": "write_env",
"path": ".env.local",
"mapping": {
"secret": "STRIPE_SECRET_KEY"
},
"overwrite": false
}
- 使用できるのは
.envと.env.*ファイルのみです。名前にexample、sample、template、dist、defaults、またはschemaが含まれるファイルは拒否されます。.envrc` のようなスクリプト形式の名前も使用できません。 - 親ディレクトリが存在し、許可されたルート内に解決される必要があります。
- シンボリックリンクは拒否されます。
- 既存のキーを上書きするには
overwrite: trueが必要です。ブラウザーでは上書きの確認を求めます。インライン送信では、別途確認することなく、要求された上書きが許可されます。 - 書き込みはアトミックに行われ、生成されるファイルのモードは
0600になります。既存のコメント、export接頭辞、引用符のスタイル、改行コードは保持されます。 - 1 MiB を超えるファイルは拒否されます。
return — シークレットをエージェントに返す(危険)
デフォルトでは無効です。有効にするには、デーモンを --allow-return 付きで起動します。
secureinput serve --allow-return
この設定は設定ファイルに保存されます。return モードではシークレットがモデルのコンテキストとトランスクリプトに含まれます。execute と write_env で解決できない場合に限り使用してください。
エージェントに表示される内容
MCP のレスポンスは、コンパクトな最小化済みステータスオブジェクトです。リクエストの詳細はウィジェット専用の _meta にのみ送信され、モデルに表示されるコンテンツには繰り返し含まれません。インラインウィジェットは入力が保留中の間、ポーリングを行いません。送信後はアプリ専用のステータスツールをロングポーリングし、UI の更新をモデルのコンテキストに含めないようにします。
完了した execute リクエストは次のようになります。
{"requestId":"req_…","status":"completed","exitCode":0}
シークレットは、ツールの結果、リクエストオブジェクト、SSE ストリーム、監査ログ、サーバーログのいずれにも表示されません。
セキュリティモデル
SecureInput は、悪意のある複数ユーザーのホストではなく、ローカルデスクトップの脅威モデルを想定して構築されています。
図、データの保存場所、実用的なチェックリストについては、セキュリティと信頼のガイドを参照してください。
設計上の保護
- ループバック専用サーバー。DNS リバインディングの試行を拒否する Host ヘッダー検査を備えています。
- 256 ビットのランダムな MCP トークンとペアリングトークンを、
0600の設定ファイルに保存します。 - ペアリングトークンを、署名付きの HttpOnly、
SameSite=Strictセッション Cookie と交換します。 - 状態を変更するブラウザーリクエストには、同一オリジンチェックとカスタム CSRF ヘッダーを適用します。
- 厳格な CSP、
frame-ancestors 'none'、CORS なし、API と HTML のエントリーポイントでの no-store。 - リクエストの一度限りの取得、リクエストごとの TTL、保留中リクエストの上限、レート制限。
- 定時間トークン比較とペアリングのレート制限。
- 正規表現によるサービス拒否を回避する RE2 検証パターン。
- 送信されたフィールド値は、意図的に URL、argv、ログ、監査記録、エラーメッセージに含めません。初回のペアリング URL には別のペアリングトークンが含まれるため、秘密にしてください。
- 出力の秘匿化では、各シークレットの生データ、JSON エスケープ、URL エンコード、base64 の各形式に加え、一般的なトークン形式も対象とします。
shell: falseでコマンドを実行し、タイムアウト時にはプロセスグループを終了します。- 環境変数への書き込みはアトミックで、
0600に設定され、シンボリックリンクに対して安全であり、許可されたルート内に制限されます。 - リスク評価では、シェル、ネットワーク、絶対パスを使うコマンド、環境変数の上書き、戻り値のモードを確認します。ブラウザーフローでは確認用チェックボックスが追加されますが、インラインフローでは表示されず、送信によって受け渡しが承認されます。
- 監査ログにはメタデータと結果のみを記録します。リクエスト ID、クライアント、受け渡し先、フィールド名、終了コード、所要時間が含まれます。
保護の対象外
- 承認したコマンドによって、シークレットが外部に持ち出される可能性があります。コマンドと送信先を正確に確認することが、最後の防御策です。
- ファイルシステムまたはターミナルへのアクセス権を持つエージェントは、
.envファイルの書き込み後に読み取ったり、読み取りを伴うコマンドを実行したりできる場合があります。永続的なファイルを作成したくない場合は、executeで stdin を使用してください。 - 同じユーザー権限で動作するマルウェア、root、侵害されたブラウザー、悪意のある拡張機能、キーロガーは、入力したものをすべて読み取れる可能性があります。SecureInput はこれらを阻止するとは主張しません。
- 一部のシステムでは、環境変数が同じユーザーとして動作する他のプロセスから見える場合があります。コマンドが対応している場合は、stdin を優先してください。
- 変換されたシークレット(ハッシュ化、分割、暗号化、再エンコードされた出力)の秘匿化は、ベストエフォートです。
- 保留中のリクエストとシークレット値はメモリ内にのみ存在します。デーモンを再起動すると破棄されます。
.envファイルは平文です。SecureInput は安全なアクセス権を設定しますが、暗号化は行いません。
設定
デフォルトの設定ディレクトリ:~/.secureinput/
| ファイル | 用途 |
|---|---|
config.json | ポート、トークン、許可されたルート、戻り値/監査/ブラウザーの設定。モードは 0600 です。 |
runtime.json | 実行中のデーモンの PID とポート。 |
audit.jsonl | メタデータのみの監査記録。シークレット値は含まれません。 |
server.log | デーモンのログ。シークレット値は含まれません。 |
環境変数:
| 変数 | 意味 |
|---|---|
SECUREINPUT_HOME | 設定ディレクトリを上書きします。 |
SECUREINPUT_NO_OPEN | 1 に設定すると、ブラウザーが自動的に開かないようにします。 |
SECUREINPUT_WEB_DIR | ビルド済みの Web UI ディレクトリを上書きします。 |
許可されるルートのデフォルトはホームディレクトリです。デーモンの起動時に、これをより厳しく設定してください。
secureinput serve --root ~/projects
複数のディレクトリを指定する場合は、--root を繰り返します。値は初回実行時に解決され、保存されます。変更後はデーモンを再起動してください。
CLI リファレンス
secureinput serve [--port 4780] [--root <path>]... [--allow-return]
[--no-open] [--no-audit] [--home <path>] [--web-dir <path>]
secureinput mcp [--home <path>] [--port <port>]
[--client-name <name>] [--client-version <version>]
secureinput pair [--home <path>] [--port <port>] [--no-open]
secureinput status
secureinput stop
secureinput doctor
serveはデーモンを実行し、ペアリングページを開きます。mcpは stdio ブリッジを実行し、必要に応じてデーモンを自動起動します。pairは必要に応じてデーモンを起動し、ペアリング URL を表示します。statusはデーモンの状態、ポリシー、保留中のリクエストを表示します。stopはデーモンを停止します。doctorは Node のバージョン、デーモンへの到達性、ランタイムの PID を確認します。
MCP ブリッジは現在の作業ディレクトリを引き継ぎ、デーモンに通知します。そのディレクトリは許可されたルート内にある必要があります。そうでない場合、暗黙にフォールバックするのではなく、リクエストは拒否されます。
HTTP API と HTTP MCP
デーモンは、ステートレスな Streamable HTTP MCP エンドポイントも公開します。
POST http://127.0.0.1:4780/mcp
Authorization: Bearer <mcpToken from ~/.secureinput/config.json>
Content-Type: application/json
これは、stdio よりも HTTP を優先するクライアントやテストハーネスに便利です。このエンドポイントは、長時間の SSE セッションではなく JSON レスポンスを使用します。引き続きループバック接続のみで利用でき、MCP トークンが必要です。
ブラウザー UI は /api 配下の認証済み REST および SSE エンドポイントを使用します。これらは実装の詳細であり、変更される可能性があります。MCP ツールは安定したインターフェースです。
配信方法を選択する
| 方法 | 適した用途 | 永続化されるもの |
|---|---|---|
stdin を使う execute | 非対話型の CLI ログイン、または stdin でトークンを受け取るコマンド | コマンドが認証情報を保存する場合があります |
環境変数を使う execute | 環境変数が必要なコマンド | コマンドが認証情報を保存する場合があります。同じユーザーのほかのプロセスから環境変数を参照できる場合があります |
write_env | .env ファイルを読み取るローカルアプリケーション | 所有者のみがアクセスできる権限のプレーンテキストファイル |
宛先とリスク確認を SecureInput 自体で確認する必要がある場合は、ブラウザー入力モードを使用してください。コンパクトなインライン形式では入力ラベルが表示され、すぐに送信されますが、ブラウザーの確認画面は表示されません。どちらのモードでも、入力する人が必要です。
FAQ
コーディングエージェントに API キーは見えますか?
MCP の結果には、デフォルトでは意図的に API キーは含まれません。エージェントに見えるのはリクエスト ID、ステータス、終了コードです。標準出力/標準エラー出力はローカルにとどまります。ただし、承認済みのコマンドが値を書き込んだり送信したりする可能性はあります。また、ターミナルやファイルシステムにアクセスできるエージェントは、書き込まれた .env ファイルを読み取れる場合があります。return モードでは値が明示的にエージェントに渡されます。このモードは、--allow-return を付けてデーモンを起動しない限り無効です。
エージェントのチャット内でシークレットを入力できますか? はい。互換性のある MCP Apps ホストでは、デフォルトで入力できます。ウィジェットは、ホストを経由してローカルデーモンに送信する前に入力内容を暗号化します。コマンド/環境ファイルへの受け渡しには、同じローカル実装を使用します。Enter キーを押すとインラインでの受け渡しが承認され、ブラウザーには引き続き確認用のコントロールが表示されます。ホストは描画とウィジェットのメタデータを引き続き制御するため、インライン入力は信頼できるホストでのみ使用してください。以下の入力モード設定を参照してください。これは、すべてのチャットクライアントとの互換性を保証するものではありません。
シークレットはどこに保存されますか?
SecureInput は保留中のリクエストと送信された値をプロセスメモリに保持し、受け渡し後に参照を破棄します。ただし、JavaScript のメモリがゼロ化される保証はありません。write_env は、承認した .env ファイルに意図的に平文を書き込みます。コマンド自体が認証情報を永続化する場合もあります。完了したリクエストのメタデータは 10 分間メモリに保持され、監査ログにはメタデータのみが書き込まれます。
Claude Code で動作しますか?
はい。claude mcp add secureinput -- secureinput mcp を実行してください。同じ stdio ブリッジは、Cursor、Codex CLI、VS Code Copilot、Cline、Windsurf、その他の MCP クライアントでも動作します。
Cursor で動作しますか?
はい。上記の mcpServers エントリーを Cursor の MCP 設定に追加してください。
パスワードマネージャーを使うだけではだめですか? パスワードマネージャーは人間にとって便利ですが、MCP の受け渡し手段ではありません。SecureInput は、エージェントの API キーを使わずに、監査可能な送信先を指定して、シークレットを特定のコマンドまたは環境ファイルに渡すことに特化しています。
エージェントは環境変数全体を読み取れますか? コマンドに渡されるのは、少数の OS 環境変数と、受け渡しマッピングで明示的に指定された値です。ただし、コマンドは引き続き OS ユーザーの権限で実行され、ファイルや認証情報ストアを読み取れる可能性があります。ブラウザーモードではコマンドが表示され、リスクの高いリクエストには確認が追加されます。コンパクトなインラインモードでは詳細は表示されません。できるだけ権限の小さい認証情報と、範囲の狭いスコープを使用してください。
デーモンを再起動するとどうなりますか? 保留中のリクエストと完了済みの結果は失われます。エージェントには「request not found」エラーが返され、新しいリクエストを作成できます。これは意図した動作です。シークレット保管庫も、古くなった認証情報もありません。
SSH 経由や開発コンテナー内で使用できますか? デーモンはループバックでのみ待ち受けます。ブラウザーとエージェントを同じマシンで実行している場合は動作します。リモートコンテナーの場合は、SSH 経由でポートを転送し、そのマシンのブラウザーセッションからペアリングしてください。ポート 4780 をインターネットに公開しないでください。リモート/マルチユーザーでのホスティングは対象外です。
Windows についてはどうですか? コードは Windows のプロセス終了処理とパスに対応していますが、現在 CI は Linux 上で実行されています。現時点では、Windows はベストエフォート対応としてご利用ください。
ブラウザー UI は shadcn/ui のみで構築されていますか? UI では、shadcn/ui コンポーネント、Radix プリミティブ、Tailwind、lucide アイコンを使用しています。サードパーティ製 UI キットや外部アセットはありません。
Development
npm ci
npm run typecheck
npm test
npm run build
npm run devは Web UI をビルドし、ブラウザーを開かずにデーモンを起動します。npm run dev:webはポート 5173 で Vite を実行し、/apiをデーモンにプロキシします。npm testは、認証、CSRF、Origin/Host の拒否、SSE、HTTP 経由の MCP、1 回限りの送信、有効期限、秘匿化、環境ファイルへの書き込み、stdio ブリッジの動作を含む、node:test の単体テストと統合テストを実行します。
プロジェクトの構成:
src/shared/ schemas, validation, redaction, env parser
src/server/ daemon, auth, policy, request service, delivery, audit
src/mcp/ stdio bridge
src/cli/ command-line entry point
src/web/ React + Vite + Tailwind + shadcn/ui
test/ node:test unit and integration tests
詳細な設計と脅威モデルについては PLAN.md、脆弱性の報告については SECURITY.md、貢献ガイドラインについては CONTRIBUTING.md を参照してください。
License
MIT。詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。