rcmdnk's blog

20251016_mcp_200_200

codexにStreamable HTTPなMCP Serverに対するサポートが追加されたので それを使ってこれまで直接使えなかったGitHub公式のMCP Serverを使う設定を追加。

experimental_use_rmcp_client

Streamable HTTP

experimental_use_rmcp_clientというオプションが追加されていて、これをtrueにすると Streamable HTTPなMCP Serverを使えるようになります。

GitHub公式MCP Serverをcodexで直接使う

github/github-mcp-server: GitHub’s official MCP Server

これまではこれをcodexで直接使うことは出来ず、 mcp-proxy などを使った方法が紹介されていました。

これをexperimental_use_rmcp_clientを使うと

~/.codex/config.toml
1
2
3
4
5
experimental_use_rmcp_client = true

[mcp_servers.github-mcp-server]
url = "https://api.githubcopilot.com/mcp"
bearer_token_env_var = "GITHUB_MCP_API_TOKEN"

と設定を書くだけで使えるようになります。

ここで、GITHUB_MCP_API_TOKENはGitHubのPersonal Access Tokenを格納した環境変数の名前で、 その環境変数をcodexが中で解釈している形になります。

$GITHUB_MCP_API_TOKENと変数展開の形では書かずに直接変数名だけ書きます。 このことから分かるように、文字列であるTOKENを直接設定ファイルに書くことは出来ず、環境変数に入れておく必要があります。

これでcodexを起動して/mcpコマンドを実行すると

1
2
3
4
5
6
7
8
9
10
11
12
13
  • Server: github-mcp-server
    • Status: enabled
    • Auth: Bearer token
    • URL: https://api.githubcopilot.com/mcp
    • Tools: add_comment_to_pending_review, add_issue_comment, add_sub_issue, assign_copilot_to_issue,
create_and_submit_pull_request_review, create_branch, create_issue, create_or_update_file,
create_pending_pull_request_review, create_pull_request, create_repository, delete_file,
delete_pending_pull_request_review, fork_repository, get_commit, get_file_contents, get_issue, get_issue_comments,
get_label, get_latest_release, get_me, get_release_by_tag, get_tag, get_team_members, get_teams, list_branches,
list_commits, list_issue_types, list_issues, list_label, list_pull_requests, list_releases, list_sub_issues, list_tags,
merge_pull_request, pull_request_read, push_files, remove_sub_issue, reprioritize_sub_issue, request_copilot_review,
search_code, search_issues, search_pull_requests, search_repositories, search_users, submit_pending_pull_request_review,
update_issue, update_pull_request, update_pull_request_branch

のような感じで確認でき、適当なレポジトリでcodexを起動して、 現在openなIssueを一覧表示してなどと入力するとIssueの一覧が表示されます。

OAuthがうまく行かない

bearer_token_env_varを設定しておかないと、

1
2
3
■ MCP client for `github-mcp-server` failed to start: handshaking with MCP server failed: Send message error Transport
[rmcp::transport::worker::WorkerTransport<rmcp::transport::streamable_http_client::StreamableHttpClientWorker<reqwest::as
ync_impl::client::Client>>] error: Auth required, when send initialize request

見たい感じでgithub-mcp-serverの起動に失敗します。

github-mcp-serverはOAuthでの認証もサポートしていて、 codexでは

1
$ codex mcp login github-mcp-server

とすることでOAuth認証を行うことも出来るようですが、やってみると

1
2
3
4
5
$ codex mcp login github-mcp-server
Dynamic registration failed: Registration failed: HTTP 404 Not Found: 404 page not found

Authorize `github-mcp-server` by opening this URL in your browser:
https://api.githubcopilot.com/authorize?response_type=code&client_id=mcp-client&state=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&code_challenge_method=S256&redirect_uri=http%3A%2F%2F127.0.0.1%3A46863%2Fcallback

のようになってうまくいかない状態。

experimental_use_rmcp_clientの設定がなかったときの設定

以前は以下のような設定が紹介されていました。

~/.codex/config.toml
1
2
3
4
5
6
7
[mcp_servers.github-mcp-server]
command = "mcp-proxy"
args = [
  "--transport", "streamablehttp",
  "-H", "Authorization", "Bearer <TOKEN>",
  "https://api.githubcopilot.com/mcp/",
]

ここでは<TOKEN>の部分には直接TOKENを書く必要があります。

これで上と同じように使えはするのですが、これだとTOKENを直接設定ファイルに書く必要があります。 mcp-proxyでは認証部分を

~/.codex/config.toml
1
2
3
4
5
6
7
[mcp_servers.github-mcp-server]
command = "mcp-proxy"
args = [
  "--transport", "streamablehttp",
  "https://api.githubcopilot.com/mcp/",
]
env = { API_ACCESS_TOKEN = "<TOKEN>" }

のように、API_ACCESS_TOKENを別途環境変数として渡す事もできますが、 いずれにしろそれに渡すTOKENを直接書く必要があります。

このあたりはmcp-proxyの仕様で、 codexもこれらの値に関しては特別外から環境変数を持ってきて解釈するようなことはしないみたいなので 仕方ないところ1

このmcp-proxyを使ったGitHubのMCP Serverの利用は、使っているいくつかのLinux環境だと動いたのですが、 何故かmacOSの環境下だと動かず。 mcp-proxyのバグなのかcodexのバグなのか、なにか自分の環境の問題なのか結局よくわからずじまい。

~/.codex/config.tomlをdotfilesに入れたいのでTOKENを書けないの2 このmacOSの問題もあったのでこれまでcodexではGitHubのMCP Serverは使ってませんでした。

一応 gh コマンドを使える環境にしてあるのである程度のことはghで出来てたので無理に使わずとも良いか、という感じではありました。

まとめ

というわけで、今までも一応使えましたが、新しい方法だと TOKENをcodexの設定ファイルに直接書かずに済むようになり使いやすくなります。

OAuth認証は自分の環境でうまく言ってませんが、もし使えるならTOKENを取らずにすぐに使えて便利。 バグでそのうち治るかもしれません。

まだexperimental_がついているオプションなので、将来変わる可能性もありますが、 とりあえずこんな設定で行けます。

個人的にはこれまで使えてなかったのがやっと使えるようになったので良かったです。

Sponsored Links
  1. context7 とかだと、

    1
    2
    3
    
    [mcp_servers.context7]
    command = "context7-mcp"
    args = ["--api-key", "${CONTEXT7_API_KEY}"]

    と書いて、CONTEXT7_API_KEYを環境変数で設定しておけば解釈してくれますが、これはcontext7-mcpの仕様。

  2. 一部のファイルはprivateなdotfilesリポジトリで管理してるのでそっちに入れても良いのですが、 この点だけで入れるのはちょっと微妙だということで。

Sponsored Links

« miseでAI CLIツールやMCPもまとめて管理する

}