Quirna について
Quirnaは、返金や本番環境へのデプロイなどの前に人間の承認を求めるMCPサーバーです。承認者と必要人数は組織のポリシーで決まり、スマートフォンでの判断は署名付きで記録されます。
主な機能
- 01人間への承認依頼と待機
- 02組織ポリシーに基づく承認
- 03スマートフォンでの判断
- 04判断記録の署名とエクスポート
- 05拒否とシステム障害の区別
活用シーン
- 01返金処理前の承認取得
- 02本番デプロイ前の確認
- 03破壊的なデータベース移行の承認
MCP 対応
MCPクライアントに`request_approval`と`check_approval`ツールを提供し、エージェントが人間に承認を求め、保留中の依頼を確認できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @quirna/mcpQUIRNA_API_KEYシークレットKey of a System registered in the Quirna Console (Users → Systems).QUIRNA_REQUESTER_IDWho the Console shows as having asked. Defaults to "mcp".QUIRNA_REQUESTER_NAMEDisplay name for the requester. Defaults to "AI agent".QUIRNA_ENVIRONMENTEnvironment used when a tool call names none. Empty means the org default.QUIRNA_WAIT_MSHow long a tool call waits for a decision before returning pending. Defaults to 90000.QUIRNA_BASE_URLOverride the Quirna API URL. Leave unset.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
2掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| kind | string | はい | 操作の分類を snake_case で指定します。例:"database_migration"、"refund"、"deploy"。この分類に関する組織のポリシーによって、誰に確認するか、人間の承認が必要かどうかが決まります。 |
| tier | enum | いいえ | 承認者に表示するリスクレベルを引き上げます。ポリシーで最低レベルが設定されており、この値で引き上げることはできますが、引き下げることはできません。routine | elevated | critical |
| message | string | はい | 操作を示す命令形の一文を指定します。承認者のスマートフォンに見出しとして表示されます:"Drop table users_v1 on production"。あなたのセッションを見られない人でも判断できるように記述してください。 |
| environment | string | いいえ | デプロイ環境のラベル。例:"production"、"staging"。 |
| identifiers | object | いいえ | 承認者に必要な詳細情報を、フラットな文字列のキーと値のペアで指定します。金額、テーブル名、アカウント ID、ホスト名などです。例:{"table": "users_v1", "rows": "48213"}。ポリシー条件はこれらの情報に基づいて評価されます。 |
詳細
@quirna/mcp
エージェントが行動する前に、人間に確認を求めます。Model Context Protocol向けの公式Quirna サーバーです。
設定を1ブロック追加するだけで、返金、本番環境へのデプロイ、破壊的なマイグレーションなど、重大な操作を実行する前にエージェントが呼び出せるツールが使えるようになります。指定された人がスマートフォンで承認します。エージェントが先に進めるのは、承認された場合だけです。その判断には署名が付与され、保存されます。
誰かが「はい」と言うまで、何も実行されません。
エージェントのフレームワークには、確認のために一時停止する仕組みがすでに用意されているかもしれません。自分だけがターミナルの前にいる状況を超えると、重要になる次の3つの点が異なります。
- 判断がループの外に出ます。 エージェントの実行をたまたま見ている人ではなく、ポリシーで指定された人に、Face IDで保護されたスマートフォン上で確認が送られます。
- 誰が承認するかは、プロンプトではなくポリシーで決まります。 定足数、リスクレベル、確認を求めるグループは、組織の設定で定められます。エージェント自身が承認者を選ぶことはできません。プロンプトインジェクションでも選べません。
- 証拠が残ります。 すべての判断には実行時に署名が付与され、当社を信頼しなくても第三者が検証できるファイルにエクスポートできます。
インストール
インストールは不要です。以下の設定により、必要に応じて npx で実行されます。バージョンを固定するには、npm install -g @quirna/mcp を実行し、コマンドとして quirna-mcp を使用してください。
始める前に
モバイルアプリは非公開ベータ版です。 判断はスマートフォン上でのみ行われます。Consoleで設定できるのはポリシーであり、判断はできません。そのため、アプリがない場合、承認リクエストは作成されますが、期限切れになるまで待機します。ご利用を希望される方は [email protected] までご連絡ください。ご案内します。以下のその他の機能は、すべて今すぐご利用いただけます。
次に、Consoleで以下を行います。
- システムキー。 ユーザー → システムを開き、このエージェント用のシステムを登録します。キー(
ck_…)が発行され、一度だけ表示されます。 - ポリシー。 リクエストの種類ごとに誰が承認するか、何人の承認が必要かを決定します。
- アプリ。 承認者のスマートフォンにインストールします。
エージェントを設定する
Claude Code — claude mcp add quirna --env QUIRNA_API_KEY=ck_… -- npx -y @quirna/mcp
Cursor(~/.cursor/mcp.json)、Claude Desktop
(claude_desktop_config.json)およびほとんどのクライアントも、同じ形式で設定できます。
{
"mcpServers": {
"quirna": {
"command": "npx",
"args": ["-y", "@quirna/mcp"],
"env": {
"QUIRNA_API_KEY": "ck_your_system_key",
"QUIRNA_REQUESTER_NAME": "Ops Agent",
"QUIRNA_ENVIRONMENT": "production"
}
}
}
}
環境変数
| 変数 | デフォルト | 機能 |
|---|---|---|
QUIRNA_API_KEY | — | 必須。 Consoleで発行されたシステムキーです。 |
QUIRNA_REQUESTER_NAME | AI agent | 承認者に、リクエストを行った人として表示される名前です。 |
QUIRNA_REQUESTER_ID | mcp | 監査記録でこの呼び出し元を識別するための、固定IDです。 |
QUIRNA_ENVIRONMENT | — | 呼び出しで環境が指定されていない場合に適用されます。 |
QUIRNA_WAIT_MS | 90000 | ツール呼び出しが結果を返すまで待機する時間です。 |
QUIRNA_BASE_URL | https://api.quirna.com | セルフホストのAPIを指定します。 |
キーについて。 キーはエージェントクライアントの設定ファイルに保存されます。このファイルはドットファイルの場合もあれば、リポジトリ内にある場合もあります。デプロイ用の認証情報として扱ってください。エージェントごとに個別のシステムを用意し、Consoleでリクエスト可能な種類を限定してください。ファイルが想定外の場所に置かれた場合は、Consoleでキーをローテーションしてください。システムキーでできるのは「リクエスト」だけで、承認は一切できません。
ツール
request_approval
リクエストを作成し、人間の判断を待ちます。
| 引数 | 必須 | |
|---|---|---|
kind | はい | 操作の種類です。例:database_migration。適用するポリシーを選択します。 |
message | はい | 命令形の1行です。スマートフォンに見出しとして表示されます。 |
identifiers | いいえ | 承認者が必要とする金額、テーブル名、ホストなどを、フラットな文字列のキーと値で指定します。 |
environment | いいえ | production、staging、… |
tier | いいえ | routine、elevated、critical。ポリシーで定められた下限を引き上げることのみ可能です。 |
特筆すべきことに、承認者、必要な人数、リクエストを有効にしておく期間は指定できません。これらは、すべての呼び出し元について一度だけ、Consoleで組織が決定します。自分で承認者を選べるエージェントは、統制にはなりません。
check_approval
approval_id を受け取り、既存のリクエストを待ちます。request_approval が保留中のまま返された場合に使用してください。再度 request_approval を呼び出すと、同じアクションを別の人にもう一度確認することになります。
エージェントが受け取る結果
APPROVED 以外の結果はすべて、NOT AUTHORIZED で始まり、その理由と、アクションを実行しないよう明示する指示が続きます。構造化された結果には、読み取る代わりに解析するコード向けに authorized: true | false が含まれます。
質問して回答を得られれば、回答内容にかかわらずツール呼び出しは成功です。拒否は製品が正常に機能していることを示すものであり、失敗ではありません。isError は、ツールをまったく実行できず、何もわからなかった場合に限って使用されます。たとえば、Quirna に接続できない、キーが拒否された、呼び出しが中断された場合です。これにより、エージェントは「人間が拒否した」と「承認システムが停止している」を区別できます。この2つは正反対の状況であり、拒否されたリクエストを別の人に再度確認させるようなことも起こりません。
誰も回答しない場合
午前3時に無人で実行されるエージェントは、この状況に直面します。リクエストは期限切れになり、アクションは承認されません。それが正しい結果であり、回避策を設計すべきバグではありません。エージェントを誰も起きていない時間帯にも実行する必要がある場合は、そのケースで人間の確認を必要としない条件を定めたポリシーを使うべきです。タイムアウトを長くするべきではありません。
関係するタイムアウトは2つあり、それぞれ異なります。
QUIRNA_WAIT_MS(デフォルトは90秒)は、エージェントが再開できるよう、承認 ID を返すまでツール呼び出しが待機する時間です。エージェントのクライアントが長時間のツール呼び出しを終了させてしまうため、この設定があります。リクエストは引き続き有効です。- ポリシーの有効期限(Console で設定)は、リクエストが開いたままになる時間です。リクエストをタイムアウトさせるのは、この設定だけです。
リンク
- quirna.com — その概要
- console.quirna.com — ポリシー、グループ、システム
@quirna/sdk— Quirna を独自のコードから呼び出す場合に使用
MIT © Quirna
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。