Bridge MCP bearer token into fast-agent request context
Browse files
scripts/__pycache__/hub_search_prefab_server.cpython-313.pyc
CHANGED
|
Binary files a/scripts/__pycache__/hub_search_prefab_server.cpython-313.pyc and b/scripts/__pycache__/hub_search_prefab_server.cpython-313.pyc differ
|
|
|
scripts/hub_search_prefab_server.py
CHANGED
|
@@ -57,10 +57,12 @@ if str(SCRIPTS_DIR) not in sys.path:
|
|
| 57 |
sys.path.insert(0, str(SCRIPTS_DIR))
|
| 58 |
|
| 59 |
from fast_agent import FastAgent
|
|
|
|
| 60 |
from fast_agent.mcp.auth.middleware import HFAuthHeaderMiddleware
|
| 61 |
from fast_agent.mcp.auth.presence import PresenceTokenVerifier
|
| 62 |
from fastmcp import FastMCP
|
| 63 |
from fastmcp.server.auth.auth import RemoteAuthProvider
|
|
|
|
| 64 |
from fastmcp.tools import ToolResult
|
| 65 |
from mcp.types import TextContent
|
| 66 |
from pydantic import AnyHttpUrl
|
|
@@ -137,18 +139,31 @@ async def root_info(request) -> PlainTextResponse:
|
|
| 137 |
|
| 138 |
|
| 139 |
async def _run_raw(query: str) -> str:
|
| 140 |
-
|
| 141 |
-
return await getattr(agents, RAW_AGENT).send(query)
|
| 142 |
|
| 143 |
|
| 144 |
async def _run_prefab_native(query: str) -> str:
|
| 145 |
-
|
| 146 |
-
return await getattr(agents, PREFAB_NATIVE_AGENT).send(query)
|
| 147 |
|
| 148 |
|
| 149 |
async def _run_prefab_llm_chain(query: str) -> str:
|
| 150 |
-
|
| 151 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 152 |
|
| 153 |
|
| 154 |
def _wire_tool_result(wire: dict[str, object]) -> ToolResult:
|
|
|
|
| 57 |
sys.path.insert(0, str(SCRIPTS_DIR))
|
| 58 |
|
| 59 |
from fast_agent import FastAgent
|
| 60 |
+
from fast_agent.mcp.auth.context import request_bearer_token
|
| 61 |
from fast_agent.mcp.auth.middleware import HFAuthHeaderMiddleware
|
| 62 |
from fast_agent.mcp.auth.presence import PresenceTokenVerifier
|
| 63 |
from fastmcp import FastMCP
|
| 64 |
from fastmcp.server.auth.auth import RemoteAuthProvider
|
| 65 |
+
from fastmcp.server.dependencies import get_access_token
|
| 66 |
from fastmcp.tools import ToolResult
|
| 67 |
from mcp.types import TextContent
|
| 68 |
from pydantic import AnyHttpUrl
|
|
|
|
| 139 |
|
| 140 |
|
| 141 |
async def _run_raw(query: str) -> str:
|
| 142 |
+
return await _run_agent(RAW_AGENT, query)
|
|
|
|
| 143 |
|
| 144 |
|
| 145 |
async def _run_prefab_native(query: str) -> str:
|
| 146 |
+
return await _run_agent(PREFAB_NATIVE_AGENT, query)
|
|
|
|
| 147 |
|
| 148 |
|
| 149 |
async def _run_prefab_llm_chain(query: str) -> str:
|
| 150 |
+
return await _run_agent(PREFAB_LLM_CHAIN_AGENT, query)
|
| 151 |
+
|
| 152 |
+
|
| 153 |
+
def _get_request_bearer_token() -> str | None:
|
| 154 |
+
access_token = get_access_token()
|
| 155 |
+
if access_token is None:
|
| 156 |
+
return None
|
| 157 |
+
return access_token.token
|
| 158 |
+
|
| 159 |
+
|
| 160 |
+
async def _run_agent(agent_name: str, query: str) -> str:
|
| 161 |
+
saved_token = request_bearer_token.set(_get_request_bearer_token())
|
| 162 |
+
try:
|
| 163 |
+
async with fast.run() as agents:
|
| 164 |
+
return await getattr(agents, agent_name).send(query)
|
| 165 |
+
finally:
|
| 166 |
+
request_bearer_token.reset(saved_token)
|
| 167 |
|
| 168 |
|
| 169 |
def _wire_tool_result(wire: dict[str, object]) -> ToolResult:
|