1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Universal OData ↔ MCP Bridgeを使ってみる

Posted at

はじめに

3週間ほど前、SAP Communityのブログで"Universal OData ↔ MCP Bridge"というツールが紹介されていました。

何をしてくれるツールか?

ODataのメタデータをもとに、MCPクライアント(例:ClaudeなどのAIアシスタント)が理解可能なツール定義を自動生成するツールです。このツールを使用することで、任意のODataサービス(V2/V4)をMCPクライアントから呼ぶことができます。

MCP.drawio.png

たとえば、対話形式でNorthwindのODataサービスから最も値段の高い製品を取得することが可能です。

image.png

使い方

Windows 11でUniversal OData ↔ MCP Bridgeを使ってみます。MCPクライアントについてはChatGPTに聞いたところ最も手軽に始められそうだったのがClaudeだったため、ClaudeのPro版を使用することにしました。

image.png

ステップ

  1. Cluade Desktopをダウンロード
  2. Universal OData ↔ MCP Bridgeをダウンロード
  3. claude_desktop_config.jsonを設定
  4. Universal OData ↔ MCP Bridgeを利用

1. Cluade Desktopをダウンロード

ローカルのツール呼び出しはDesktopアプリからしか行えないため、Cluade Desktopをダウンロードします。

2. Universal OData ↔ MCP Bridgeをダウンロード

以下のリポジトリのReleasesから、最新のリリースをダウンロードします。

Windowsなので、odata-mcp-<version>-windows-amd64.zipをダウンロードしました。
image.png

zipフォルダを解凍後、odata-mcp.exeとリネームして任意のフォルダ(例:C:/bin)に格納します。

image.png

4. claude_desktop_config.jsonを設定

%APPDATA%\Claudeのディレクトリにclaude_desktop_config.jsonを作成し、以下の設定を追加します。argsに指定できるフラグについてはドキュメントで説明されています。

{
    "mcpServers": {
        "northwind-go": {
            "args": [
                "--service",
                "https://services.odata.org/V2/Northwind/Northwind.svc/",
                "--tool-shrink"
            ],
            "command": "C:/bin/odata-mcp.exe"
        }
    }
}

試しにコマンドラインから以下のコマンドを打つと、生成されるツールの定義を見ることができます。

C:\bin\odata-mcp.exe --trace https://services.odata.org/V2/Northwind/Northwind.svc/

image.png

この中にodata_service_info_for_<サービス名>というツールがあり、MCPクライアントはまずこのツールを呼んでODataのメタデータを取得した後、個別のツールを使ってリクエストを送信するという流れのようです。

    {
      "name": "odata_service_info_for_NorthSvc",
      "description": "Get information about the OData service including metadata, entity sets, and capabilities",
      "parameters": null,
      "operation": "info",
      "properties": {
        "properties": {
          "include_metadata": {
            "default": false,
            "description": "Include detailed metadata information",
            "type": "boolean"
          }
        },
        "type": "object"
      }
    }

NorthwindのODataサービスの場合、LLM側にすでにメタデータが知識としてあるため、メタデータの取得はスキップされていました。

image.png

5. Universal OData ↔ MCP Bridgeを利用

Cloud Desktopを再起動し(※)、ツールの中に"northwind-go"があることを確認します。
※アプリを閉じ、タスクマネージャから終了させる

image.png
"northwind-go"をクリックすると登録された個別のツールが表示されます。
image.png

NorthwindのODataサービスに関するクエリを入力してみます。
(例)

  • 値段の高いProductのトップ10を教えて
  • 直近で登録されたOrder 10件の納期と出荷状況を教えて

image.png

カスタムODataサービスでやってみる

CAPでTODOを管理する簡単なODataサービスを作成します。

サービス定義

スキーマ定義

namespace todo;
using { managed } from '@sap/cds/common';

entity Todos: managed {
    key ID: UUID;
    title: String(100);
    description: String(500);
    done: Boolean;
    deadline: DateTime;
}

サービス定義

using { todo } from '../db/schema';

service TodoService {
    entity Todos as projection on todo.Todos;
}

cds watchでローカルで実行しておきます。

[cds] - server listening on { url: 'http://localhost:4004' }
[cds] - server launched in: 231.194ms
[cds] - [ terminate with ^C ]

claude_desktop_config.jsonを設定

claude_desktop_config.jsonに以下の設定を追加します。

{
    "mcpServers": {
        "northwind-go": {
            "args": [
                "--service",
                "https://services.odata.org/V2/Northwind/Northwind.svc/",
                "--tool-shrink"
            ],
            "command": "C:/bin/odata-mcp.exe"
        },
        "manage-todo": {
            "args": [
                "--service",
                "http://localhost:4004/odata/v4/todo",
                "--tool-shrink"
            ],
            "command": "C:/bin/odata-mcp.exe"            
        }
    }
}

カスタムODataサービスと連携

Claudeを再起動後、"manage-todo"のツールが表示されます。
image.png

クエリを実行してみます。

image.png

image.png

問題:OData V4でパラメータつきのGETリクエストが失敗する

「未完了のtodoを取得して」と言ったとき、
image.png

以下のリクエストがバックエンドに送信ました。

[odata] - GET /odata/v4/todo/Todos { '$filter': 'done eq false' }
[error] - 400 - peg$SyntaxError: Parsing URL failed at position 33: Expected "(", "/", a whitespace, or an optional whitespace but "+" found.

正しくは/odata/v4/todo/Todos?$filter=done eq falseとなるべきところ、クエリパラメータが変換されずにそのまま渡されています。ツール側でパラメータつきのクエリの生成方法に問題があるようです。この件はGitにIssueとして登録しました。
https://github.com/oisee/odata_mcp_go/issues/9

OData V2にしたところGETリクエストも成功しました。
image.png

おわりに

Universal OData ↔ MCP Bridgeを使って、NorthwindサービスやCAPで作成したカスタムODataサービスをClaudeから自然言語で操作できることを確認しました。現時点ではOData V4でフィルタークエリに問題がありますが、V2であれば問題なく動作します。とても手軽に始めることができたので、興味のある方はぜひ使ってみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?