@@ -5,6 +5,24 @@ import { FastMCP } from 'fastmcp';
55
66import { registerTools } from './tools' ;
77
8+ const HTTP_TRANSPORT = 'httpStream' ;
9+ const STDIO_TRANSPORT = 'stdio' ;
10+ const DEFAULT_HTTP_HOST = '127.0.0.1' ;
11+ const DEFAULT_HTTP_ENDPOINT = '/mcp' ;
12+
13+ export type AgentTeamsMcpStartOptions =
14+ | {
15+ transportType : typeof STDIO_TRANSPORT ;
16+ }
17+ | {
18+ transportType : typeof HTTP_TRANSPORT ;
19+ httpStream: {
20+ host: string ;
21+ port: number ;
22+ endpoint: `/${ string } ` ;
23+ } ;
24+ } ;
25+
826export function createServer ( ) {
927 const server = new FastMCP ( {
1028 name : 'agent-teams-mcp' ,
@@ -16,9 +34,64 @@ export function createServer() {
1634 return server ;
1735}
1836
37+ function getArgValue ( argv : string [ ] , name : string ) : string | null {
38+ const directPrefix = `${ name } =` ;
39+ for ( let index = 2 ; index < argv . length ; index += 1 ) {
40+ const value = argv [ index ] ;
41+ if ( value === name ) {
42+ return argv [ index + 1 ] ?? null ;
43+ }
44+ if ( value . startsWith ( directPrefix ) ) {
45+ return value . slice ( directPrefix . length ) ;
46+ }
47+ }
48+ return null ;
49+ }
50+
51+ function normalizeEndpoint ( value : string | null | undefined ) : `/ ${string } ` {
52+ const trimmed = value ?. trim ( ) ;
53+ if ( ! trimmed ) {
54+ return DEFAULT_HTTP_ENDPOINT ;
55+ }
56+ return ( trimmed . startsWith ( '/' ) ? trimmed : `/${ trimmed } ` ) as `/${ string } ` ;
57+ }
58+
59+ function parsePort ( value : string | null | undefined ) : number {
60+ const parsed = Number ( value ) ;
61+ if ( ! Number . isInteger ( parsed ) || parsed <= 0 || parsed > 65535 ) {
62+ throw new Error ( `Invalid agent-teams MCP HTTP port: ${ value ?? '<empty>' } ` ) ;
63+ }
64+ return parsed ;
65+ }
66+
67+ export function resolveStartOptions (
68+ argv : string [ ] = process . argv ,
69+ env : NodeJS . ProcessEnv = process . env
70+ ) : AgentTeamsMcpStartOptions {
71+ const transport =
72+ getArgValue ( argv , '--transport' ) ??
73+ getArgValue ( argv , '--transportType' ) ??
74+ env . AGENT_TEAMS_MCP_TRANSPORT ??
75+ STDIO_TRANSPORT ;
76+
77+ if ( transport !== HTTP_TRANSPORT ) {
78+ return { transportType : STDIO_TRANSPORT } ;
79+ }
80+
81+ return {
82+ transportType : HTTP_TRANSPORT ,
83+ httpStream : {
84+ host :
85+ getArgValue ( argv , '--host' ) ?. trim ( ) ||
86+ env . AGENT_TEAMS_MCP_HTTP_HOST ?. trim ( ) ||
87+ DEFAULT_HTTP_HOST ,
88+ port : parsePort ( getArgValue ( argv , '--port' ) ?? env . AGENT_TEAMS_MCP_HTTP_PORT ) ,
89+ endpoint : normalizeEndpoint ( getArgValue ( argv , '--endpoint' ) ?? env . AGENT_TEAMS_MCP_HTTP_ENDPOINT ) ,
90+ } ,
91+ } ;
92+ }
93+
1994if ( process . argv [ 1 ] && import . meta. url === pathToFileURL ( process . argv [ 1 ] ) . href ) {
2095 const server = createServer ( ) ;
21- void server . start ( {
22- transportType : 'stdio' ,
23- } ) ;
96+ void server . start ( resolveStartOptions ( ) ) ;
2497}
0 commit comments