@@ -12,10 +12,10 @@ import (
1212)
1313
1414type mcpFlags struct {
15- agentName string
16- http bool
17- port int
18- runConfig config.RuntimeConfig
15+ agentName string
16+ http bool
17+ listenAddr string
18+ runConfig config.RuntimeConfig
1919}
2020
2121func newMCPCmd () * cobra.Command {
@@ -28,15 +28,15 @@ func newMCPCmd() *cobra.Command {
2828 Example : ` cagent mcp ./agent.yaml
2929 cagent mcp ./team.yaml
3030 cagent mcp agentcatalog/pirate
31- cagent mcp ./agent.yaml --http --port 8080 ` ,
31+ cagent mcp ./agent.yaml --http --listen 127.0.0.1:9090 ` ,
3232 Args : cobra .ExactArgs (1 ),
3333 GroupID : "server" ,
3434 RunE : flags .runMCPCommand ,
3535 }
3636
3737 cmd .PersistentFlags ().StringVarP (& flags .agentName , "agent" , "a" , "" , "Name of the agent to run (all agents if not specified)" )
3838 cmd .PersistentFlags ().BoolVar (& flags .http , "http" , false , "Use streaming HTTP transport instead of stdio" )
39- cmd .PersistentFlags ().IntVar (& flags .port , "port " , 0 , "Port to listen on when using HTTP transport (default: random available port) " )
39+ cmd .PersistentFlags ().StringVarP (& flags .listenAddr , "listen " , "l" , "127.0.0.1:8080" , "Address to listen on" )
4040 addRuntimeConfigFlags (cmd , & flags .runConfig )
4141
4242 return cmd
@@ -48,18 +48,19 @@ func (f *mcpFlags) runMCPCommand(cmd *cobra.Command, args []string) error {
4848 ctx := cmd .Context ()
4949 agentFilename := args [0 ]
5050
51- if f .http || f .port != 0 {
52- ln , err := server .Listen (ctx , fmt .Sprintf (":%d" , f .port ))
53- if err != nil {
54- return fmt .Errorf ("failed to bind to port %d: %w" , f .port , err )
55- }
56- go func () {
57- <- ctx .Done ()
58- _ = ln .Close ()
59- }()
51+ if ! f .http {
52+ return mcp .StartMCPServer (ctx , agentFilename , f .agentName , & f .runConfig )
53+ }
6054
61- return mcp .StartHTTPServer (ctx , agentFilename , f .agentName , & f .runConfig , ln )
55+ // Listen as early as possible
56+ ln , err := server .Listen (ctx , f .listenAddr )
57+ if err != nil {
58+ return fmt .Errorf ("failed to listen on %s: %w" , f .listenAddr , err )
6259 }
60+ go func () {
61+ <- ctx .Done ()
62+ _ = ln .Close ()
63+ }()
6364
64- return mcp .StartMCPServer (ctx , agentFilename , f .agentName , & f .runConfig )
65+ return mcp .StartHTTPServer (ctx , agentFilename , f .agentName , & f .runConfig , ln )
6566}
0 commit comments