bug(api): MCP tool invoke drops OAuth Authorization when any custom header is set
まだ誰も着手していません。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 72/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- python
- 領域
- api, authentication, backend
調査の方向性
api/core/tools/mcp_tool/tool.py の MCPTool.invoke_remote_mcp_tool から始め、ヘッダー処理を api/services/tools/mcp_tools_manage_service.py の _prepare_auth_headers と比較します。カスタム X-Tenant ヘッダーと保存済みの OAuth トークンを使ってユニットケースを再現し、呼び出しによってカスタムヘッダーが保持され、Authorization が含まれ、一覧表示が退行しないことを確認します。
索引モデルが issue の本文から書いたものです。
説明
Self Checks
- I have read the Contributing Guide and Language Policy.
- I have searched for existing issues and pull requests, including closed ones.
- I confirm that I am using English to submit this report.
Dify version
main (current)
Cloud or Self Hosted
Both
Problem
MCP tool listing and MCP tool invoke prepare Authorization differently.
MCPToolManageService.list_provider_toolsuses_prepare_auth_headers(), which always merges OAuth tokens into the request headers (custom headers + OAuth coexist).MCPTool.invoke_remote_mcp_toolgated token injection behindif not headers:. Any non-empty custom header map (for exampleX-Tenant: abc) skippedretrieve_tokens()entirely.
Falsifiable consequence:
- Configure an MCP provider with at least one custom header and complete OAuth (tokens stored).
- Refresh / list tools → succeeds (Authorization present via
_prepare_auth_headers). - Invoke the same tool from Agent / Workflow → request goes out without
Authorization, typically 401 from the MCP server, while listing still works.
This is an auth/header state asymmetry between list and invoke, not a UI issue.
Relevant code (before fix):
api/services/tools/mcp_tools_manage_service.py→_prepare_auth_headersapi/core/tools/mcp_tool/tool.py→invoke_remote_mcp_tool(if not headers:gate)
Steps to reproduce
Minimal unit repro (fails on main):
# decrypt_headers returns {"X-Tenant": "abc"}
# retrieve_tokens returns OAuthTokens(access_token="oauth-access-token", token_type="bearer", ...)
# invoke_remote_mcp_tool(...)
# MCPClientWithAuthRetry receives headers WITHOUT Authorization
Or manually:
- Add MCP server with custom header
X-Tenant=abcand OAuth credentials. - Click to fetch tools (list succeeds).
- Call the tool from a workflow/agent → auth failure / 401.
Expected Behavior
Invoke must apply the same header merge as listing: custom headers kept, OAuth Authorization still attached when tokens exist.
Actual Behavior
Invoke drops OAuth whenever any custom header is present.
I am preparing a focused fix with regression tests and will open a PR linking this issue.
- 主要言語
- TypeScript
- スター
- 157k
- フォーク
- 24.7k
- 平均マージ
- 22時間 32分
- マージ済み PR(30日)
- 611
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
langgenius/dify のほかの issue
-
Annotation Reply: a stored score threshold of 0.0 is silently replaced with 1, disabling the feature オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
langgenius/dify#42639 · コメント 1 件 · リアクション 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
langgenius/dify#42468 · コメント 1 件 · リアクション 1 件 ·
-
🐞 bug
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
langgenius/dify#42446 · リアクション 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
langgenius/dify#42355 · コメント 1 件 · リアクション 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
langgenius/dify#42350 · コメント 1 件 · リアクション 1 件 ·
langgenius/dify の issue をすべて見る
似ている issue
-
calcite-components needs triage refactor
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
Esri/calcite-design-system#15203 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 91/100
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
難易度 1/5 1時間未満 初心者へのやさしさ 95/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
Automattic/studio#4908 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 90/100