Fork intervals-mcp-server: native OAuth + streamable-HTTP, no monkeypatch
build-image / build (push) Failing after 18s
build-image / build (push) Failing after 18s
- Bump mcp[cli] 1.22 -> 1.28.1 (negotiates MCP protocol 2025-11-25, matching current Claude clients; the old 2025-06-18 server never got a tools/list on the connector surface). - Bake transport config into code: stateless_http + json_response for HTTP (single JSON body instead of a 34KB SSE stream, which the connector pipeline handles far more reliably). - Bake Authentik OAuth (AuthSettings + JWT TokenVerifier) into intervals_mcp_server.auth, configured from MCP_ISSUER/MCP_RESOURCE/MCP_JWKS_URI/MCP_CLIENT_ID — removes the runtime FastMCP.__init__ monkeypatch from the k8s deployment command. - Accept token audience with/without trailing slash (RFC 8707 clients use the slash-normalised resource metadata value). - Dockerfile CMD runs the module (transport via MCP_TRANSPORT); add .gitea CI to build+push the image to git.farh.net/farhoodlabs/intervalsicu-mcp. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
"""
|
||||
MCP tools registry for Intervals.icu MCP Server.
|
||||
|
||||
This module registers all available MCP tools with the FastMCP server instance.
|
||||
"""
|
||||
|
||||
from mcp.server.fastmcp import FastMCP # pylint: disable=import-error
|
||||
|
||||
# Import all tools for re-export
|
||||
# Note: Tools register themselves via @mcp.tool() decorators when imported
|
||||
from intervals_mcp_server.tools.activities import ( # noqa: F401
|
||||
get_activities,
|
||||
get_activity_details,
|
||||
get_activity_intervals,
|
||||
get_activity_streams,
|
||||
)
|
||||
from intervals_mcp_server.tools.events import ( # noqa: F401
|
||||
add_or_update_event,
|
||||
delete_event,
|
||||
delete_events_by_date_range,
|
||||
get_event_by_id,
|
||||
get_events,
|
||||
)
|
||||
from intervals_mcp_server.tools.custom_items import ( # noqa: F401
|
||||
create_custom_item,
|
||||
delete_custom_item,
|
||||
get_custom_item_by_id,
|
||||
get_custom_items,
|
||||
update_custom_item,
|
||||
)
|
||||
from intervals_mcp_server.tools.power_curves import ( # noqa: F401
|
||||
get_athlete_power_curves,
|
||||
)
|
||||
from intervals_mcp_server.tools.gear import get_gear_list # noqa: F401
|
||||
from intervals_mcp_server.tools.wellness import get_wellness_data # noqa: F401
|
||||
|
||||
|
||||
def register_tools(mcp_instance: FastMCP) -> None:
|
||||
"""
|
||||
Register all MCP tools with the FastMCP server instance.
|
||||
|
||||
This function imports all tool modules, which causes their @mcp.tool()
|
||||
decorators to register the tools. The tools need access to the mcp instance,
|
||||
so they will be imported after the mcp instance is created.
|
||||
|
||||
Args:
|
||||
mcp_instance (FastMCP): The FastMCP server instance to register tools with.
|
||||
"""
|
||||
# Tools are registered via decorators when modules are imported above
|
||||
# The mcp_instance parameter is kept for future use if needed
|
||||
_ = mcp_instance
|
||||
|
||||
|
||||
__all__ = [
|
||||
"register_tools",
|
||||
"get_activities",
|
||||
"get_activity_details",
|
||||
"get_activity_intervals",
|
||||
"get_activity_streams",
|
||||
"get_events",
|
||||
"get_event_by_id",
|
||||
"delete_event",
|
||||
"delete_events_by_date_range",
|
||||
"add_or_update_event",
|
||||
"get_custom_items",
|
||||
"get_custom_item_by_id",
|
||||
"create_custom_item",
|
||||
"update_custom_item",
|
||||
"delete_custom_item",
|
||||
"get_athlete_power_curves",
|
||||
"get_gear_list",
|
||||
"get_wellness_data",
|
||||
]
|
||||
Reference in New Issue
Block a user