MCPサーバー
basedbはMCPサーバー(POST /mcp、インターフェースと同じアドレス)を公開しています。エージェント(Claude、コーディングアシスタント、独自のエージェントなど)は、ここでデータベースを見つけ、行を読み書きし、許可すれば削除もして、構造の変更を提案します。
エージェントをつなぐ
Section titled “エージェントをつなぐ”APIとMCPのトークン…(データベースのメニューのAPIとエージェント内)からトークンを作成し、MCPアクセスにチェックを入れます。同じトークンで、REST APIとMCPの両方を使え、データベース全体——本番と他の環境——を開きます(下記参照)。
トークンは環境変数BASEDB_TOKENに設定し、設定ファイルには決して書かないでください。HTTPでMCPを話すクライアント——Claude Codeなど——は、ヘッダーAuthorization: Bearer <jeton>を付けて…/mcpに直接アクセスします。Claude Codeの場合:
claude mcp add --transport http --scope project basedb "http://localhost:3000/mcp" \ --header 'Authorization: Bearer ${BASEDB_TOKEN}'このコマンドはプロジェクトの.mcp.jsonファイルを書き出します。そこでは${BASEDB_TOKEN}が変数への参照のまま残り、トークン自体は書かれません。
{ "mcpServers": { "basedb": { "type": "http", "url": "http://localhost:3000/mcp", "headers": { "Authorization": "Bearer ${BASEDB_TOKEN}" } } }}ローカルのプログラム(stdio)しか起動できないクライアントは、リポジトリの中継プログラムを経由します。トークンは--token-envで指定した変数から読み込まれます:
claude mcp add basedb -- node <dépôt basedb>/apps/mcp/dist/relay.js \ --url http://localhost:3000/mcp --token-env BASEDB_TOKEN次に、エージェントにwhoamiを呼び出してもらってください。トークンを作成した人、開いているデータベース、その環境、権限が返されます。
データベースには複数の環境——本番、ステージング、開発——を持たせることができ、それぞれが独自のテーブルと行を持ちます。データベース全体用のトークンはそのすべてを開き、環境は、範囲の広いものから狭いものの順に選びます:
-
データベース名だけを指定した場合:
crmは本番、crm_recetteはステージングです。 -
サーバーのアドレス:
…/mcp?environment=recetteは、その接続全体でステージングを対象にします。中継プログラムでは--environment recetteが同じ働きをします。こうして、環境ごとに1つのサーバーを、同じトークンですべて登録できます:{"mcpServers": {"basedb": {"type": "http","url": "http://localhost:3000/mcp","headers": { "Authorization": "Bearer ${BASEDB_TOKEN}" }},"basedb-recette": {"type": "http","url": "http://localhost:3000/mcp?environment=recette","headers": { "Authorization": "Bearer ${BASEDB_TOKEN}" }}}} -
データベースを指定する各ツールの
environment引数:1回の呼び出しだけが対象になります。list_recordsに{"base": "crm", "table": "clients", "environment": "recette"}を渡す、など。
環境は、そのバッジの名前で指定します。大文字・小文字とアクセント記号は区別されません(Recette、recette、「Développement」ならdeveloppement)。productionでも指定できます。whoamiはトークンが開く環境を一覧し、list_basesとdescribe_baseは各データベースがどの環境のものかを示します。
トークンは、作成時に1つの環境だけに限定することもできます。その場合、他の環境は一切見えません。
15のツール
Section titled “15のツール”| ツール | 役割 |
|---|---|
whoami | エージェントが誰で、どの権限を持ち、どの環境を使えるか |
list_bases、describe_base、describe_table | 構造、その説明、外観を把握する |
list_records、get_record、lookup_records | 読み取り、フィルター、表示値の解決 |
create_record、update_record | 行の書き込み |
delete_record、restore_record | 行を削除する——削除のために作成されたトークンで——、そして復元する |
propose_create_table、propose_add_field、get_proposal | 構造の変更を提案する |
propose_update_look | テーブルとその選択肢の色とアイコンを提案する |
色とアイコン
Section titled “色とアイコン”テーブルと、単一選択・複数選択フィールドの各選択肢には、インターフェースと同じように色とアイコンがあります。エージェントは、提案するときにこれらを選びます:
propose_create_tableは、テーブルのcolorとiconを受け付けます。propose_add_fieldは、selectまたはmulti_selectの各オプションのcolorとiconを受け付けます。propose_update_lookは、既存のテーブルとその選択肢の色とアイコンを変更します:キーを省略すると現在の設定が維持され、nullを指定すると消去されます。
colorは#rrggbb形式の色です。iconは、インターフェースが描画するLucideのアイコン名です——truck、circle-check、flame…:ツールのスキーマに一覧があり、未知の名前は拒否されます。describe_baseとdescribe_tableは現在の外観を返します。一方、フィールドにはアイコンを選ぶ項目がありません:インターフェースは、その型のアイコンを描画します。
行を削除する
Section titled “行を削除する”「読み取り、書き込みと削除」の権限で作成されたトークンは、エージェントに行の削除を許可します。_idを指定して、一度に1行です。delete_recordは削除前の行をそのまま返し、削除はそのトークンの名前で履歴に記録されます。restore_recordはその_idのまま行を元に戻します——エージェントは自分の誤りを自分で取り消せますし、人も履歴から同じことができます。
エージェントが削除しないのは:
- 読み取り専用、または読み取りと書き込みのトークンの場合:拒否の応答に、どのトークンを作成すべきかが示されます。
- 連鎖的なリレーションによって他の行も一緒に削除される行の場合(
TOKEN_CASCADE_FORBIDDEN):この削除は、何が一緒に削除されるかを見られる人が、インターフェースで行います。 - 複数行を一度に削除する場合:どのツールもそれを行いません。
エージェントがしないこと
Section titled “エージェントがしないこと”- 削除は、あなたの同意があるときだけ行います:そのために作成されたトークンで、一度に1行です。
- 構造も外観も変更しません:提案するだけです。提案はエージェントの提案…(データベースのメニュー)で待機し、構造を管理する人が承認または却下します。判断されないまま24時間が経つと失効します。
- トークンを作成した人を超える権限は持ちません:トークンの権限は、その人の権限と、環境ごとに重なる部分だけに限られます。
- エージェントに対して非表示に設定されたフィールドや、MCPに対して閉じられたデータベースは見えません。
各呼び出しは、パラメーターの値ではなく、その形だけが記録されます。
basedbは、AIネイティブなソフトウェアスタジオEodiaが開発するフリーソフトウェアです。