Skip to content

Commit 2824a8f

Browse files
committed
Add support for custom middleware in the correct order.
1 parent 543a1fa commit 2824a8f

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

pkg/github/server.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ type MCPServerConfig struct {
7373

7474
type MCPServerOption func(*mcp.ServerOptions)
7575

76-
func NewMCPServer(ctx context.Context, cfg *MCPServerConfig, deps ToolDependencies, inv *inventory.Inventory) (*mcp.Server, error) {
76+
func NewMCPServer(ctx context.Context, cfg *MCPServerConfig, deps ToolDependencies, inv *inventory.Inventory, middleware ...mcp.Middleware) (*mcp.Server, error) {
7777
// Create the MCP server
7878
serverOpts := &mcp.ServerOptions{
7979
Instructions: inv.Instructions(),
@@ -98,9 +98,13 @@ func NewMCPServer(ctx context.Context, cfg *MCPServerConfig, deps ToolDependenci
9898

9999
ghServer := NewServer(cfg.Version, serverOpts)
100100

101+
// We always want the GitHub API error middleware to run first so that any errors from the,
102+
// GitHub API are captured in the context for downstream middlewares and handlers, even if MCP parsing fails and prevents later middlewares from running.
103+
middlewareToInject := []mcp.Middleware{addGitHubAPIErrorToContext, InjectDepsMiddleware(deps)}
104+
middlewareToInject = append(middlewareToInject, middleware...)
105+
101106
// Add middlewares
102-
ghServer.AddReceivingMiddleware(addGitHubAPIErrorToContext)
103-
ghServer.AddReceivingMiddleware(InjectDepsMiddleware(deps))
107+
ghServer.AddReceivingMiddleware(middlewareToInject...)
104108

105109
if unrecognized := inv.UnrecognizedToolsets(); len(unrecognized) > 0 {
106110
cfg.Logger.Warn("Warning: unrecognized toolsets ignored", "toolsets", strings.Join(unrecognized, ", "))

pkg/http/handler.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ import (
1919
)
2020

2121
type InventoryFactoryFunc func(r *http.Request) (*inventory.Inventory, error)
22+
23+
// GitHubMCPServerFactoryFunc is a function type for creating a new MCP Server instance.
24+
// middleware are applied AFTER the default GitHub MCP Server middlewares (like error context injection)
2225
type GitHubMCPServerFactoryFunc func(r *http.Request, deps github.ToolDependencies, inventory *inventory.Inventory, cfg *github.MCPServerConfig) (*mcp.Server, error)
2326

2427
type Handler struct {

0 commit comments

Comments
 (0)