MCP(Model Context Protocol)は、Anthropic社が2024年11月に発表し、オープンソース化したプロトコルです。大規模言語モデルと外部ツールやデータソースとの連携を実現することを目的としています。MCPを利用することで、ユーザーは大規模言語モデルの出力を手動でコピーして実行する必要がなく、モデルが直接ツールに指示を出して対応するアクションを実行させることができます。
OceanBase MCP Serverは、MCPプロトコルを通じて大規模言語モデルとOceanBaseデータベースの連携を提供し、SQL文を実行できるようにします。適切なクライアントを利用することでプロジェクトのプロトタイプを迅速に構築でき、GitHub上でオープンソースとして公開されています。
Claude Codeは、Anthropic社が開発したAIプログラミングツールです。ターミナル上で動作するインテリジェントなコーディングアシスタントであり、開発者がアイデアを高品質なコードに素早く変換するのを支援します。
本記事ではClaude Codeを使用し、OceanBase MCP Serverを通じてバックエンドアプリケーションを迅速に構築する方法を紹介します。
前提条件
ご利用の環境にトランザクション型(MySQL)クラスタインスタンスが利用可能であること。テナントの作成については、テナントの作成をご参照ください。その後、以下の手順を実行します。
ご利用の環境に、使用可能なMySQL互換モードのテナント、MySQLデータベース、およびデータベースアカウントが既に存在し、データベースアカウントに読み書き権限が付与されていること。作成が必要な場合は、詳細についてはアカウントの作成およびデータベースの作成(MySQLのみ)をご参照ください。
プロジェクト管理者またはインスタンス管理者ロールを持ち、プロジェクト内のインスタンスに対する読み書き操作を実行できること。権限がない場合は、組織管理者に連絡して権限の追加を依頼してください。
Python 3.11以降のバージョンと対応するpipをインストールしてください。マシンのPythonバージョンが低い場合は、Minicondaを使用して新しいPython 3.11以降の環境を作成できます。詳細については、Minicondaインストールガイドをご参照ください。
使用しているOSに応じて、Gitをインストールします。ご自身のOSに合わせて、ダウンロードしてインストールしてください:
Windows:https://git-scm.com/downloads/win。
macOS:https://git-scm.com/download/mac。
Linux:https://git-scm.com/downloads/linux。
Pythonパッケージマネージャーuvをインストールします。
macOS/Linuxでは、独立したスクリプトを使用してインストールできます:
curl -LsSf https://astral.sh/uv/install.sh | shWindowsプラットフォームでは、以下のスクリプトを使用します:
irm https://astral.sh/uv/install.ps1 | iexまたは、プラットフォームに依存しないpipインストール方法を使用することもできます:
pip install uv
インストール完了後、
uv --versionコマンドを使用してインストールが成功したかどうか確認できます:pip install uv uv --versionAugment Codeのインストール:
VS Codeを開きます(なければ、公式ドキュメントを参照してインストールしてください)。
サイドバーの拡張機能アイコンをクリックします。
“Claude Code”を検索してインストールをクリックします。
Claude Codeの環境変数を設定します。
cat >> ~/.zshrc << 'EOF' export ANTHROPIC_BASE_URL=***** export ANTHROPIC_API_KEY=******* export ANTHROPIC_MODEL=******* EOF source ~/.zshrcリンクをテストします。
Anthropicモデルを選択します。

ステップ1:データベース接続情報を取得する
- ドロップダウンリストから、ID クラスタインスタンスを選択してください。
- 概要 ページに移動します。
- 接続をクリックし、接続文字列を取得 を選択します。
- ポップアップウィンドウで、パブリックネットワークを使用 を選択します。
- アクセスアドレスを取得し、現在のブラウザIPアドレスを追加 を選択します。
- データベース関連情報を入力し、**接続文字列をコピー**します。
ステップ2:OceanBase MCP Serverを設定する
OceanBase MCP Serverリポジトリのクローン
以下のコマンドを実行して、ソースコードをローカルにダウンロードします:
git clone https://github.com/oceanbase/awesome-oceanbase-mcp.git
ソースコードディレクトリに移動します:
cd awesome-oceanbase-mcp
依存関係のインストール
oceanbase_mcp_server ディレクトリで以下のコマンドを実行して仮想環境を作成し、依存関係をインストールします:
uv venv
source .venv/bin/activate
uv pip install .
OceanBase MCP Serverの設定
VS Codeのツールターミナルを開き、claude mcp add-json コマンドを実行します。
claude mcp add-json oceanbase '{ "command": "uv", "args": [ "--directory", "/path/to/your/oceanbase_mcp_server/src/oceanbase_mcp_server", "run", "oceanbase_mcp_server" ], "env": { "OB_HOST": "***", "OB_PORT": "***", "OB_USER": "***", "OB_PASSWORD": "***", "OB_DATABASE": "***" } }'/path/to/your/oceanbase_mcp_serverはoceanbase_mcp_serverフォルダの絶対パスに、OB_HOST、OB_PORT、OB_USER、OB_PASSWORD、OB_DATABASEはご自身のデータベースの対応する情報に置き換えてください:データベースへの接続が可能か確認します。
「testデータベースにはいくつのテーブルがありますか」というプロンプトを入力すると、Claude Codeは実行されるSQL文を表示し、クエリ結果を出力します:
Claude Codeは現在のtestデータベース内のテーブル数を表示します。これにより、OceanBaseデータベースに正常に接続できていることが確認できます。
ステップ3:FastAPIを使用してRESTful APIスタイルのプロジェクトを迅速に作成する
FastAPIは、PythonでRESTful APIを迅速に構築できるWebフレームワークです。
テーブルを作成します。
「customerテーブルを作成してください。主キーはIDで、name、age、telephone、locationの各フィールドを含めてください」というプロンプトを入力します:
テストデータを挿入します。
「10件のテストデータを挿入してください」というプロンプトを入力します:
FastAPIプロジェクトを作成します。
「FastAPIプロジェクトを作成し、customerテーブルに基づいたRESTful APIを生成してください」というプロンプトを入力すると、複数のファイルが自動生成されます。問題があれば、後から修正します。
以下のコマンドを実行して依存関係をインストールします。
cd customer_api pip install -r requirements.txtFastAPIプロジェクトを起動します。
python3 main.pyテーブル内のデータを確認します。
コマンドラインで
curl http://127.0.0.1:8000/customers,或者使用其他请求工具,查看表中的数据:`を実行します。curl http://127.0.0.1:8000/customers [{"name":"Zhang San","age":28,"telephone":"13800138001","location":"Chaoyang District, Beijing","ID":1},{"name":"Li Si","age":32,"telephone":"13900139002","location":"Pudong New Area, Shanghai","ID":2},{"name":"Wang Wu","age":25,"telephone":"13700137003","location":"Tianhe District, Guangzhou","ID":3},{"name":"Zhao Liu","age":45,"telephone":"13600136004","location":"Nanshan District, Shenzhen","ID":4},{"name":"Chen Qi","age":38,"telephone":"13500135005","location":"Xihu District, Hangzhou","ID":5},{"name":"Liu Ba","age":29,"telephone":"13400134006","location":"Wuhou District, Chengdu","ID":6},{"name":"Zhou Jiu","age":35,"telephone":"13300133007","location":"Jiangning District, Nanjing","ID":7},{"name":"Wu Shi","age":41,"telephone":"13200132008","location":"Hongshan District, Wuhan","ID":8},{"name":"Zheng Shi Yi","age":27,"telephone":"13100131009","location":"Yubei District, Chongqing","ID":9},{"name":"Ma Shi Er","age":33,"telephone":"13000130010","location":"Yanta District, Xi'an","ID":10}]追加、削除、更新、検索のコードはすべて生成されています。
from sqlalchemy.orm import Session from . import models, schemas from typing import List, Optional def get_customer(db: Session, customer_id: int): return db.query(models.Customer).filter(models.Customer.ID == customer_id).first() def get_customers(db: Session, skip: int = 0, limit: int = 100): return db.query(models.Customer).offset(skip).limit(limit).all() def create_customer(db: Session, customer: schemas.CustomerCreate): db_customer = models.Customer(**customer.dict()) db.add(db_customer) db.commit() db.refresh(db_customer) return db_customer def update_customer(db: Session, customer_id: int, customer: schemas.CustomerUpdate): db_customer = db.query(models.Customer).filter(models.Customer.ID == customer_id).first() if db_customer: update_data = customer.dict(exclude_unset=True) for key, value in update_data.items(): setattr(db_customer, key, value) db.commit() db.refresh(db_customer) return db_customer def delete_customer(db: Session, customer_id: int): db_customer = db.query(models.Customer).filter(models.Customer.ID == customer_id).first() if db_customer: db.delete(db_customer) db.commit() return True return False def search_customers(db: Session, name: Optional[str] = None, location: Optional[str] = None): query = db.query(models.Customer) if name: query = query.filter(models.Customer.name.contains(name)) if location: query = query.filter(models.Customer.location.contains(location)) return query.all()