Since.dev について
Since.devは、依存関係や公開情報の監視、記憶した事実の検証、共有リポジトリやGrantの情報取得をエージェントに提供するホステッドサービスです。永続カーソルにより、エージェントは変更を繰り返しポーリングせず、確認済みの位置から処理を再開できます。
主な機能
- 01依存関係と公開情報の監視
- 02永続カーソルによる変更の追跡
- 03観測情報に基づく記憶内容の検証
- 04共有リポジトリと修復情報の確認
- 05Grantのチーム状況と調査結果の取得
活用シーン
- 01依存パッケージのリリースや情報源の変更を追跡
- 02エージェント再接続後に変更処理を再開
- 03行動前に記憶したパッケージ情報を検証
- 04共有リポジトリへの影響と修復案を確認
MCP 対応
リモートMCPサーバーはStreamable HTTPで接続し、World State、リポジトリ、Grant、アカウント利用状況の20ツールを提供します。利用にはワークスペース認証情報が必要で、権限は個別に付与されます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://api.since.dev/mcpclaude mcp add --transport http since-dev https://api.since.dev/mcp{"mcpServers":{"since-dev":{"type":"http","url":"https://api.since.dev/mcp"}}}Cursor で開く{"servers":{"since-dev":{"type":"http","url":"https://api.since.dev/mcp"}}}VS Code で開く{"mcpServers":{"since-dev":{"type":"http","url":"https://api.since.dev/mcp"}}}{"mcpServers":{"since-dev":{"serverUrl":"https://api.since.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
Since.dev MCP
あなたの COO、Grant とその AI チームに、最新情報、チームの状況や決定事項、さらに World State を提供します。
製品 · ドキュメント · MCP リファレンス
Since.dev はホステッドサービスであり、このリポジトリはそのリモート MCP サーバーです。AI エージェント向けに、次の 3 種類のツールを提供します。
- Grant: AI COO の Grant とそのチームが取り組んでいる内容を確認し、調査結果や実行履歴を読み、Grant に質問し、実行中の作業を停止して、調査結果に関する決定事項を記録できます。
- World State: コードが依存する公開情報(パッケージ、リポジトリ、サービスのステータスページ、ウェブページ、アドバイザリーカタログ)を監視し、永続的なカーソルを使ってエージェントが最後に確認してからのすべての変更を把握し、行動する前に記憶された事実を確認できます。
- リポジトリと修復: エージェントと共有されているリポジトリ、その依存関係への影響、提案された修復を確認できます。
このリポジトリには接続用ファイルのみが含まれています。README、クライアント設定例、Gemini CLI 拡張機能です。インストールまたは実行するサーバーコードはありません。
目次
要件
- Since.dev アカウント。 メールアドレス、GitHub、または Google で作成できます。ログインごとに Free ワークスペースが 1 つ含まれます。
- そのワークスペースの認証情報: API キー、または対応クライアントでのブラウザーサインイン(OAuth)。サーバーは匿名アクセスを許可しておらず、認証情報でアクセスできるのはその認証情報に対応するワークスペースのみです。
- 使用するツールが含まれるプラン。 World State、リポジトリ、使用状況のツールは、プランの上限内であれば Grant Free を含むすべてのプランで利用できます。
get_usageを呼び出すと確認できます。Grant のツールには有料プラン(Grant Pro または Grant Studio)が必要です。Grant Free ではplan_requiredが返されます。料金をご覧ください。
API キーを取得する
- https://app.since.dev にサインインし、エージェントが使用するワークスペースを選択します。
- 接続 → 外部エージェント(https://app.since.dev/connections/agents)を開きます。
- 新しい接続を選択し、
release-botなどの接続名を入力してから、接続を作成を選択します。 - キーをコピーします。キーは
sc_live_で始まり、一度だけ表示されます。紛失した場合は、接続の 管理 から新しいキーを発行してください。 SINCE_API_KEY環境変数、またはクライアントのシークレット設定に保存します。API キーをコミットしないでください。
ワークスペースのメンバーであれば誰でも接続を作成できます。各接続はワークスペース内で個別のエージェントとして扱われ、それぞれ独自のキーを持ちます。接続は subscribe で作成したウォッチの変更を読み取ります。既存のウォッチを与えるには、接続で ウォッチを接続 を選択するか、attach_to_set を呼び出してください。リポジトリアクセスとGrant へのアクセスは別途付与します。
キーを使わずに、ブラウザーサインインを利用することもできます。Claude、Codex、Cursor など、リモート MCP サインインに対応するクライアントでは、サーバー URL を追加し、プロンプトが表示されたらサインインできます。サインイン時に、ワークスペースの所有者または管理者がワークスペース、プロジェクト、権限を承認します。
接続する
Streamable HTTP を使用して、MCP クライアントにサーバーを追加します。
https://api.since.dev/mcp
- OAuth: クライアントが対応している場合は、ブラウザーでサインインします。
- API キー: ワークスペースの API キーを Bearer トークンとして
Authorizationヘッダーに送信します。
mcpServers ファイルを使用するクライアント
{
"mcpServers": {
"since": {
"url": "https://api.since.dev/mcp",
"headers": {
"Authorization": "Bearer ${SINCE_API_KEY}"
}
}
}
}
この例では、環境変数から SINCE_API_KEY を読み取ります。クライアントが環境変数を展開しない場合は、代わりにシークレット設定を使用してください。
VS Code
ワークスペースの .vscode/mcp.json 用の examples/vscode-mcp.json の例です。VS Code はキーの入力を求め、シークレット入力として保持します。
{
"servers": {
"since": {
"type": "http",
"url": "https://api.since.dev/mcp",
"headers": {
"Authorization": "Bearer ${input:since-key}"
}
}
},
"inputs": [
{
"id": "since-key",
"type": "promptString",
"description": "Since.dev API key",
"password": true
}
]
}
Gemini CLI
gemini extensions install https://github.com/since-dev/mcp
インストーラーのシークレット入力プロンプトで、Since.dev ワークスペースの API キーを入力します。
アクセス権の付与
新しい認証情報には「アクセス権の付与」がありません。ワークスペースのオーナーまたは管理者が Connections → External agents を開き、接続の Manage を選択して、Grant access で共有するプロジェクトと許可する操作(read、question、investigate、decision、control)を選びます。
- まず
grant_team_statusを呼び出します。承認済みのプロジェクト、権限、Grant のチームが表示されます。または、オーナーがアクセス権を付与する場所が示されます。 - 承認済みのすべてのプロジェクトを対象にするには、
applicationIdsを省略します。 grant_questionは最大55秒間待機します。Grant の作業が続いている場合は、同じrequestKeyを指定して再度呼び出すと、待機を続けられます。質問には、アプリと同じワークスペースモデルと利用枠が適用されます。- World State とリポジトリのツールはそれぞれ独自のアクセス権が付与され、Grant のアクセス権がなくても動作します。
ツール
サーバーは20個のツールを提供し、tools/list は各ツールの完全な入力スキーマを返します。ブラウザーサインインを使用する接続では、承認された権限で利用可能なGrantツールが一覧表示されます。
Grant
Grantツールを利用するには、有料プランと接続へのGrantアクセス権が必要です(アクセス権の付与を参照)。各ツールは、引数を含む input オブジェクトと、対象プロジェクトを絞り込む任意の applicationIds 配列を受け取ります。applicationIds を指定しない場合、接続で承認されたすべてのプロジェクトが対象になります。input 内のNullableフィールドも必須です。該当しない場合は null を指定します。
| ツール | 内容 | 主な入力 |
|---|---|---|
grant_team_status | 最初に呼び出してください。承認済みのプロジェクト、権限、Grant のチームが表示されます。チームメンバーごとの役割、ソース、状態、現在の作業、最新の概要も確認できます。特定の実行の状態を読み取るには、runIds を指定します。 | input.runIds:最大20個の実行ID。概要を表示する場合は null |
grant_read | 保存された調査結果(証拠と判断を含む)、実行(概要を含む)、会話をIDで1件読み取るか、調査結果のページを一覧表示します。 | input.type(finding、run、conversation、findings のいずれか)、input.id、input.cursor、input.severity、input.disposition |
grant_question | 承認済みのプロジェクトについてGrantに質問します。Grantは保存された調査結果と概要をもとに回答し、チームにリアルタイムで問い合わせることもできます。この操作には investigate 権限も必要です。回答を最大 waitSeconds 秒待ちます。Grant の作業が続いている場合は、同じ requestKey を指定して再度呼び出すと、待機を続けられます。 | input.content(最大12,000文字)、input.conversationId(新しい会話の場合は null)、input.waitSeconds(0~55)、requestKey(8~160文字) |
grant_stop | Grantまたはチームメンバーの実行中の作業を停止します。保存済みの結果は保持されます。 | input.runId |
grant_record_decision | 調査結果に対応状況、メモ、担当者、またはフォローアップ日を記録します。これは判断の記録であり、問題が修正されたことを証明するものではありません。 | input.id、input.expectedVersion、input.disposition(open、accepted、deferred、addressed、dismissed のいずれか)、input.note。input.ownerId、input.revisitAt は任意 |
World State
World State ツールは、各プランの上限内であればすべてのプランで利用できます。接続は、自身が作成した監視対象と、共有された監視対象またはセットの変更を読み取ります。
| ツール | 機能 | 主な入力 |
|---|---|---|
check_coverage | 対象を監視する前に、監視可能かどうかを確認します。カバレッジレベル(good、partial、none)、情報源、確認頻度、正規の対象キーを返します。 | subjectType、subject、aspect |
subscribe | ポーリングせずに変更を受け取るための監視対象を作成します。1件の監視には型指定フォームを使用するか、最大10件を指定した自然言語の文を使います。 | subjectType、aspect、および subject または canonicalKey のいずれか。または statement。threshold(0~1)は任意です |
what_changed_since | エージェントが再開するときに最初に呼び出します。確認済みカーソル以降の監視対象に関するすべての変更を、順序付けして重複を除外したうえで返します。各変更には、フィールドの変更、情報源の根拠、評価が含まれます。 | since(カーソル。確認済みの位置から再開する場合は省略)、limit(既定値は50、最大200)は任意です |
acknowledge_changes | 完全な what_changed_since の応答を処理した後、永続カーソルを進めます。安全に再試行でき、カーソルが後退することはありません。 | その応答の cursor |
verify_facts | エージェントが記憶している事実を、行動する前に現在の観測状態と照合します。各事実は valid、changed、unknown のいずれかを返します。unknown は観測がないことを意味し、何も変わっていないことを意味するわけではありません。プランの月間検証呼び出し回数に含まれます。 | facts:最大100件。それぞれに subjectKey、aspect、fieldPath、expectedValue を指定します |
subject_history | 対象の観測済み変更履歴と合計を返します。エージェントはこれを使って適切な再確認頻度を判断できます。 | subjectKey。limit は任意です |
list_watches | この接続から参照できる保存済み監視対象を、1ページあたり50件で一覧表示します。 | status(active、needs_attention、paused、closed、expired)と offset は任意です |
inspect_watch | 保存済みの監視対象1件について、カバレッジと情報源の健全性を読み取ります。情報源の確認や変更の確認は行いません。 | id |
list_sets | ワークスペースのサブスクリプションセット(監視対象をまとめた名前付きグループ)と、この接続が各セットに接続されているかどうかを一覧表示します。 | なし |
attach_to_set | サブスクリプションセットに接続し、以降の変更を受け取ります。過去の変更は再送されません。過去の変更には subject_history を使用してください。 | list_sets の setId |
リポジトリと修復
これらのツールは、ワークスペースの所有者または管理者がリポジトリの Settings → Agent access で接続に共有したリポジトリのみを読み取ります。書き込みアクセス権は付与されません。
| ツール | 機能 | 主な入力 |
|---|---|---|
list_maintained_repositories | この接続に共有されているリポジトリを一覧表示します。 | なし |
inspect_repository | 保存済みのリポジトリについて、依存関係と影響のステータスを読み取ります。 | id。impactOffset は任意です |
list_repairs | 共有リポジトリの影響と修復のステータスを読み取ります。 | repositoryId、review(open、attention、completed、all)、offset は任意です |
inspect_repair | 修復1件について、記録された根拠、影響を受けるコード、パッチのバージョン、CI チェック、判断を読み取ります。チェックに合格しても、本番環境で安全であることの証明にはなりません。 | id。現在の GitHub プルリクエストの差分を含める includeCurrentPr は任意です |
アカウント
| ツール | 機能 | 主な入力 |
|---|---|---|
get_usage | ワークスペースのプランと現在の使用状況を読み取ります。読み取り専用です。 | なし |
例:依存関係を監視して変更を確認する
React を使用するプロジェクトを保守するエージェントは、npm を定期的に確認せずに React の新しいバージョンを知りたいと考えています。各手順では、エージェントが tools/call リクエストで送信する name と arguments を示します。
-
依存関係を監視します。ソースが対象かどうかを先に確認するには、同じ 3 つのフィールドを指定して
check_coverageを呼び出します。{ "name": "subscribe", "arguments": { "subjectType": "package", "subject": "npm:react", "aspect": "versions" } }結果には、新しい監視の
id、status、coverage、cadenceMinutesが含まれます。最初の確認ではベースラインが記録され、以降の変更はこの接続に配信されます。 -
エージェントが作業を再開したら、ほかの操作より先に
what_changed_sinceを呼び出します。最後に確認済みの位置から続けるには、sinceを省略します。{ "name": "what_changed_since", "arguments": { "limit": 50 } }結果の例(抜粋):
{ "changes": [ { "change": { "seq": 84219, "idempotencyKey": "a3f1c9...", "subject": { "key": "package:npm:react", "type": "package", "name": "react" }, "aspect": "versions", "fieldChanges": [{ "path": "version", "label": "Latest version", "from": "19.1.0", "to": "19.2.0" }], ... }, "context": { ... } } ], "cursor": 84219, "hasMore": false, ... }各
changeブロックには、フィールドの変更、ソース、検出時刻が含まれます。そのcontextには、根拠と評価が含まれます。 -
レスポンス内のすべての変更を処理した後、そのカーソルを確認済みとして通知します。
{ "name": "acknowledge_changes", "arguments": { "cursor": 84219 } }hasMoreが true の場合は、再度what_changed_sinceを呼び出します。確認済みとして通知されなかったページは再び返されるため、配信は少なくとも 1 回行われます。idempotencyKeyで重複を排除してください。 -
エージェントが記憶しているバージョンに基づいて操作する前に、確認します。
{ "name": "verify_facts", "arguments": { "facts": [ { "subjectKey": "package:npm:react", "aspect": "versions", "fieldPath": "version", "expectedValue": "19.2.0" } ] } }各事実は
valid、changed、またはunknownを返します。unknownは「観測なし」として扱い、「変更なし」とは決して扱わないでください。
サポート
- ドキュメント:https://since.dev/docs。MCP リファレンスも含まれています
- この接続に関する質問:issue を作成
- メール:[email protected]
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。