Skip to main content
Devin は、読み取り専用の接続文字列を持つエンジニアと同じように MongoDB のデータを扱えます。コレクションの実際の中身を確認し、クエリが遅い原因を突き止め、サンドボックスのデータベースでマイグレーションをリハーサルし、PR を作成するといった作業が可能です。このガイドでは Devin 専用に作成した ID を使って設定するため、Devin が特定のエンジニアの権限で実行されることはありません。
すべては Atlas アカウント内で完結します。必要なのは、データベースユーザー、サービスアカウント、環境ブループリントでインストールする MongoDB ツール、そして必要に応じて MCP サーバーです。まずは最小限の権限 (本番環境は読み取り専用) から始め、必要に応じてロールを広げてください。アクセス範囲を決めるのはロールであり、Devin 側に手を加えることなく Atlas で変更できます。

2 つのプレーンと 2 つの ID

データベースユーザーは Atlas Administration API を呼び出せず、サービスアカウントは API 経由でドキュメントを読み取れません。多くのチームはまずデータプレーンのみで運用を始め、Devin が Performance Advisor やスロークエリログ (M10 以上の専用クラスターで利用可能) を必要とするようになった段階でサービスアカウントを追加します。ただし、次の 2 点に注意してください。
  • データベースユーザーを作成できるサービスアカウント (GROUP_OWNER、GROUP_DATABASE_ACCESS_ADMIN) は、データプレーン用の ID を自身で発行できます。実際に MongoDB MCP サーバーは、クラスターへの接続を指示されるとこれを行います (オプション B) 。
  • スロークエリのデータには、クエリのリテラル値がそのまま含まれます。

Devin の接続方法を選択する

3 つの方法はいずれも同じネットワークアクセス (ステップ 1) と ID (ステップ 2) を利用します。違いは、Devin に何を保持させるかという点です。

Devin を MongoDB に接続する理由

  • スキーマはドキュメント自体に存在します。 MongoDB には information_schema がなく、Mongoose や Prisma のモデルは実際に保存されているデータとずれていきます。Devin は稼働中のコレクションからサンプルを取得し、実際のデータ構造に基づいて作業します。
  • 低速クエリの調査から修正までが 1 つのセッションで完結します。 Devin は Performance Advisor とスロークエリログを読み取り、実際のコレクションに対して explain() を実行します。さらに、そのクエリを発行しているコードを特定し、修正内容と推奨インデックスを含むプルリクエスト (PR) を作成します。
  • Devin が操作できる範囲は、データベースユーザーのロールによって決まります。 まずは本番環境への権限を読み取り専用にとどめ、書き込みには devin_dev サンドボックスを使用してください。すべてのアクションは Devin 専用の ID で Atlas のログに記録されます。

前提条件

Atlas
  • クラスターを含むプロジェクト。
  • サービスアカウントの作成には Organization Owner、データベースユーザーとアクセスリストの設定には Project Owner のロール。
Devin ネットワーク
  • プロジェクトの IP アクセスリストに Devin の IP が登録されていること (ステップ 1) 。
  • Devin のネットワークポリシーを利用している場合は、*.mongodb.net と cloud.mongodb.com に加え、ブループリントがインストール元として使用するホスト (オプション A では pgp.mongodb.com と repo.mongodb.org、オプション B では registry.npmjs.org と nodejs.org) を許可してください。ドライバーは 443 ではなくポート 27017 で接続しますが、ポリシーの項目はホスト名または CIDR で指定するため、ポートの設定は不要です。スナップショットの build にも同じポリシーが適用されます。

ステップ 1: ネットワークアクセスを許可する

Atlas は、プロジェクトの IP アクセスリストに登録されていない IP からの接続を拒否します。記憶に頼らず、IP 許可リストの設定に記載されている IP を追加してください。専用テナントでは独自の送信元 IP が使用されるため、担当のアカウントチームに確認してください。
このリストには、単一のアドレスと CIDR 範囲の両方が含まれています。単一のアドレスには --type ipAddress を、範囲には --type cidrBlock を利用してください。 組織でサービスアカウントに API アクセスリストの設定が求められている場合は、Atlas のサービスアカウントのページにも同じ IP を追加してください。リストに登録されていない IP からの呼び出しは 403 で失敗します。

ステップ 2: Devin の ID を作成する

データベースユーザー

本番データベースでは読み取り専用、サンドボックスでは読み書き可能とし、スコープは指定したクラスターに限定します:
--scope を指定しない場合、このユーザーはプロジェクト内のすべてのクラスターにアクセスできてしまいます。組み込みのロールでアクセス範囲を表現できない場合は、カスタムデータベースロールを利用してください。パスワードはパスワードマネージャーで生成し、シェル履歴に残らないようにしてください。Devin に渡すのはこのユーザーの接続文字列です。クラスターの管理者ユーザーは渡さないでください。

サービスアカウント (Devin がコントロールプレーンを必要とする場合のみ)

Atlas の組織レベルで Identity & Access > Applications を開きます。最初は読み取り専用で始め、クライアントシークレットの有効期限は、ローテーション運用で許容できる範囲で最短のものを選択してください。
付与しない の行は、Option B の場合に特に重要です。サービスアカウントがデータベースユーザーを作成できると、MCP サーバーの atlas-connect-cluster ツールがクラスター全体を対象とする一時ユーザー (readAnyDatabase、または --readOnly を指定しない場合は readWriteAnyDatabase) を作成し、devin-sessions に設定したデータベース単位のロールが迂回されてしまいます。この一時ユーザーは、MCP の切断ツールで先に削除されない限り、4 時間有効なまま残ります。

ステップ 3: Devin を接続する

オプション A: ブループリントで CLI を使用する

  1. Devin シークレット を追加する

ブループリントの シークレット タブで、次のシークレットを追加します。 シークレットはセッションごとに注入されるため、値をローテーションしても再ビルドは不要です。Atlas CLI はクライアント ID とシークレットをこれらの環境変数から読み取るため、atlas auth login を実行する必要はありません。初回利用時には、アクセストークンが ~/.config/atlascli/config.toml にキャッシュされます。セッション内であれば問題ありませんが、initialize でこのファイルを作成しないでください。

  1. ブループリントを追加する

イメージが Ubuntu 22.04 でない場合は、jammy を適宜置き換えてください。 インストールよりも重要なのは knowledge ブロックです。これがないと、セッションは atlas auth login(誰も完了できないブラウザーフロー)を実行したり、すでに環境内にある接続文字列を要求したりしてしまいます。
initialize で認証情報をディスクに書き込まないでください。~/.mongoshrc.js、~/.config/atlascli/config.toml、あるいは ~/.bashrc でエクスポートした URI はスナップショットに含まれ、以降のすべてのセッションで共有されてしまいます。

  1. スナップショットを build する

ブループリントを保存し、ステータスが 成功 になるまで待ってから、新しいセッションを開始します。既に開いているセッションでは、古いスナップショットが引き続き使用されます。

オプション B: MongoDB MCP サーバー

公式の mongodb-mcp-server は、セッション内でローカルプロセスとして実行され、Step 2 で作成した ID を利用します。このサーバーの Guardrails を有効にするには、marketplace の mongodb プラグインではなく、カスタム MCP サーバーとして追加してください (Customize > MCPs > Add MCP > Add custom MCP、トランスポートは STDIO) 。marketplace のプラグインのマニフェストでは --readOnly や --indexCheck を指定できないためです。 npx はセッション開始のたびにパッケージを取得するため、<version> はテスト済みのリリースに固定してください。Step 2 で作成した読み取り専用のサービスアカウントでは、atlas-connect-cluster は 401 を返します。Devin は MDB_MCP_CONNECTION_STRING による preconfigured 接続を通じてデータにアクセスします。これが想定どおりの動作です。
  • --readOnly を指定すると、create、update、delete 系のツールは登録されず、$out または $merge を含む集計は拒否されます。指定しない場合、これらの集計は確認プロンプトの後に実行されます。MCP クライアントがプロンプトに対応していない場合は、確認なしで実行されます。本番環境に接続する場合は必ず指定してください。
  • --indexCheck は、実行計画がコレクションスキャンになるクエリを拒否します。これはパフォーマンスのための Guardrails です。なお、explain 自体が失敗した場合、クエリはそのまま実行されます。
このサーバーには Node ^20.19.0 || ^22.13.0 || >=24.0.0 が必要です。セッション内で node --version を実行して確認してください。バージョンが古い場合や、MCP プロセスから参照されるパスに npx が含まれていない場合は、ブループリントに Node を追加します:
--readOnly を指定する場合でも、読み取り専用のデータベースユーザーは引き続き使用してください。Devin は同じユーザーで mongosh "$MONGODB_URI" を run することもできるため、実際の防御線として機能するのはそのユーザーのロールです。

オプション C: MongoDB Atlas プラグイン

MongoDB Atlas プラグインは、Devin を MongoDB がホストする MCP サーバー (mcp.mongodb.com) に接続し、MongoDB のエージェント スキルをインストールします。Devin はサインインしたユーザーの Atlas ロールで動作しますが、その権限の上限は組織の AI クライアント アクセス モードによって決まります。
  1. 組織のオーナーが AI クライアント アクセスを有効にし (Organization Settings > App Connections) 、アクセス モードを Read に設定します。これにより、書き込み系のツールは登録されなくなります。この設定は Devin に限らず、組織内のすべての AI クライアントに適用されます。
  2. Devin 専用の Atlas ユーザーを作成し、読み取りを許可するプロジェクトに限定して GROUP_READ_ONLY と GROUP_DATA_ACCESS_READ_ONLY を付与します。GROUP_DATA_ACCESS_READ_ONLY ではプロジェクト内のすべてのデータベースのドキュメントを読み取れるため、devin-sessions ユーザーよりも権限の範囲が広くなります。
  3. プラグインをインストールし、Customize > MCPs で OAuth ログインを一度だけ行います。その際は、自分のアカウントではなく、作成した専用ユーザーでサインインしてください。
  4. 動作を確認できたら、プラグインをコミットに固定します。
通信はセッションではなく MongoDB と Devin がホストするインフラストラクチャから送信されるため、ステップ 1 の IP リストやネットワークポリシーは適用されません。アクセス権は、7 日間操作がなかった時点、またはサインインから 30 日が経過した時点のいずれか早い方で失効します。失効した場合は再度サインインしてください。なお、アクセスを取り消しても、クライアントが作成したデータベース ユーザーやその他の成果物は削除されないため、必ず確認してください。

再ビルドとバージョンの固定

ブループリントは build 時に apt が解決したバージョンをそのままインストールします。また、Option B の npx はセッションを開始するたびに mongodb-mcp-server を取得します。動作を確認できたら、両方のバージョンを固定し (mongodb-atlas-cli=<version>、mongodb-mongosh=<version>、mongodb-mcp-server@<version>) 、更新する際は意図的に行ってください。シークレットのローテーションに再ビルドは不要ですが、インストール済みのツールを変更する場合は再ビルドが必要です。

ステップ 4: 権限を設定する

認証は Devin が誰であるかを示し、データベースロールと Atlas ロールは Devin が何にアクセスできるかを決めます。MCP のフラグや Knowledge の指示はその上に重ねる補助的な仕組みであり、アクセス制御の境界ではありません。 Explore の場合、インデックスの提案に必要なのは GROUP_READ_ONLY のみです(クエリの値はマスクされた状態で返されます)。遅いクエリの一覧、クエリ値のサンプル、ログのダウンロードには GROUP_DATA_ACCESS_READ_ONLY も必要です。Atlas CLI のヘルプでは GROUP_DATA_ACCESS_READ_WRITE が求められますが、これは不要です。GROUP_READ_ONLY のみの場合、MCP の atlas-get-performance-advisor ツールは 401 ではなく “No slow query logs found” を返します。そのため、結果が空の場合はロール設定に問題がある可能性があります。
コードはこれまでどおりプルリクエスト経由でリリースされます。Devin は本番環境を読み取って問題を把握し、devin_dev で修正を検証します。マイグレーションやインデックスは通常のレビューを経て反映されます。

ステップ 5: 検証

新しいセッションを開始し、Devin に以下を run するよう依頼します。 接続性。 接続しているユーザー、付与されているロール、および (設定している場合) Atlas CLI で認証できるかどうかを確認します。
境界の確認。 1 回目の insert は失敗し (専用クラスターでは not authorized on <prod-db> to execute command、M0/Flex では user is not allowed to do action [insert] on [<prod-db>.devin_probe] というエラーになります) 、2 回目は成功するはずです。
connectionStatus のロールが、付与したプロファイルと一致していることを確認してください。接続が確立できただけでは、十分な確認にはなりません。MCP サーバーについては、MCP ツールを使ってデータベースを一覧表示するよう Devin に依頼し (preconfigured 接続が利用されます) 、次にドキュメントの挿入を依頼してください。--readOnly を指定している場合は insert-many ツールが存在せず、$out を含む集計も拒否されます。

トラブルシューティング

制限事項

保存済みの認証情報が必要です。 Devin の有効期間が短い OIDC トークンは、現時点では MongoDB で利用できません。Administration API が受け付けるのは、サービスアカウントのシークレットまたは APIキーのみです。Atlas の Workload Identity Federation は専用クラスターのデータプレーンに対応していますが、ドライバーレベルでのトークンコールバックが必要で、Devin の発行者 (issuer) との組み合わせはまだ検証されていません。試してみたい場合は、担当のアカウントチームにご連絡ください。 セルフホスト型の MongoDB。 データプレーンの手順 (データベースユーザー、MONGODB_URI、mongosh、MCP サーバー) はそのまま適用できます。Atlas のサービスアカウントや IP アクセスリストはないため、ネットワークアクセスには VPN または独自の許可リストを使用します。

サポート

Atlas 側については、Atlas セキュリティドキュメントおよび MongoDB MCP サーバードキュメントを参照してください。Devin 側については、support@cognition.ai またはアカウント担当チームまでお問い合わせください。