jawadsaghir12 commited on
Commit
665e623
Β·
1 Parent(s): c08d13b
src/Agentic_System/Gmail_Agent.py CHANGED
@@ -16,12 +16,14 @@ try:
16
  from .google_mcp_config import (
17
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
18
  GMAIL_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
 
19
  USER_GOOGLE_EMAIL,
20
  )
21
  except ImportError:
22
  from google_mcp_config import (
23
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
24
  GMAIL_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
 
25
  USER_GOOGLE_EMAIL,
26
  )
27
  try:
@@ -150,12 +152,23 @@ class GmailAgent:
150
  logger.info("[GMAIL-AGENT] STEP 2 DONE: Got %d Google tools (%.2fs)", len(tools), _time.time() - t2)
151
  for i, tool in enumerate(tools):
152
  logger.info("[GMAIL-AGENT] Tool[%d]: %s", i, getattr(tool, 'name', tool))
 
153
  if not tools:
154
  logger.error("[GMAIL-AGENT] Remote MCP exposed zero Gmail tools")
155
  return (
156
  "Gmail tools are unavailable because the remote MCP server exposed zero tools. "
157
  "This usually means MCP auth is incomplete or the server is not advertising Gmail tools."
158
  )
 
 
 
 
 
 
 
 
 
 
159
  except Exception as e:
160
  logger.error("[GMAIL-AGENT] STEP 2 FAILED: list_tools error: %s", e, exc_info=True)
161
 
 
16
  from .google_mcp_config import (
17
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
18
  GMAIL_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
19
+ AUTH_BOOTSTRAP_TOOL, SERVICE_DISPLAY_MAP,
20
  USER_GOOGLE_EMAIL,
21
  )
22
  except ImportError:
23
  from google_mcp_config import (
24
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
25
  GMAIL_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
26
+ AUTH_BOOTSTRAP_TOOL, SERVICE_DISPLAY_MAP,
27
  USER_GOOGLE_EMAIL,
28
  )
29
  try:
 
152
  logger.info("[GMAIL-AGENT] STEP 2 DONE: Got %d Google tools (%.2fs)", len(tools), _time.time() - t2)
153
  for i, tool in enumerate(tools):
154
  logger.info("[GMAIL-AGENT] Tool[%d]: %s", i, getattr(tool, 'name', tool))
155
+ tool_names = {getattr(tool, "name", str(tool)) for tool in tools}
156
  if not tools:
157
  logger.error("[GMAIL-AGENT] Remote MCP exposed zero Gmail tools")
158
  return (
159
  "Gmail tools are unavailable because the remote MCP server exposed zero tools. "
160
  "This usually means MCP auth is incomplete or the server is not advertising Gmail tools."
161
  )
162
+ if tool_names == {AUTH_BOOTSTRAP_TOOL}:
163
+ logger.info("[GMAIL-AGENT] Only auth bootstrap tool exposed; initiating auth flow")
164
+ auth_result = await google_mcp.call_tool(
165
+ AUTH_BOOTSTRAP_TOOL,
166
+ {
167
+ "service_name": SERVICE_DISPLAY_MAP["gmail"],
168
+ "user_google_email": USER_GOOGLE_EMAIL,
169
+ },
170
+ )
171
+ return str(auth_result)
172
  except Exception as e:
173
  logger.error("[GMAIL-AGENT] STEP 2 FAILED: list_tools error: %s", e, exc_info=True)
174
 
src/Agentic_System/Google_Calendar_Agent.py CHANGED
@@ -16,12 +16,14 @@ try:
16
  from .google_mcp_config import (
17
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
18
  CALENDAR_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
 
19
  USER_GOOGLE_EMAIL,
20
  )
21
  except ImportError:
22
  from google_mcp_config import (
23
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
24
  CALENDAR_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
 
25
  USER_GOOGLE_EMAIL,
26
  )
27
 
@@ -109,12 +111,23 @@ class GoogleCalendarAgent:
109
  if google_mcp is None:
110
  return "Google Calendar tools are currently unavailable because the MCP server is not connected."
111
  tools = await google_mcp.list_tools()
 
112
  if not tools:
113
  logger.error("Google Calendar MCP exposed zero tools")
114
  return (
115
  "Google Calendar tools are unavailable because the remote MCP server exposed zero tools. "
116
  "This usually means MCP auth is incomplete or the server is not advertising Calendar tools."
117
  )
 
 
 
 
 
 
 
 
 
 
118
  skillport_mcp = await enter_optional_mcp(stack, self._create_skillport_server, "SkillPort Calendar MCP")
119
  agent = self._create_agent(google_mcp, skillport_mcp)
120
  logger.info("Google Calendar agent ready with %d MCP server(s)", len(agent.mcp_servers))
 
16
  from .google_mcp_config import (
17
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
18
  CALENDAR_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
19
+ AUTH_BOOTSTRAP_TOOL, SERVICE_DISPLAY_MAP,
20
  USER_GOOGLE_EMAIL,
21
  )
22
  except ImportError:
23
  from google_mcp_config import (
24
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
25
  CALENDAR_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
26
+ AUTH_BOOTSTRAP_TOOL, SERVICE_DISPLAY_MAP,
27
  USER_GOOGLE_EMAIL,
28
  )
29
 
 
111
  if google_mcp is None:
112
  return "Google Calendar tools are currently unavailable because the MCP server is not connected."
113
  tools = await google_mcp.list_tools()
114
+ tool_names = {getattr(tool, "name", str(tool)) for tool in tools}
115
  if not tools:
116
  logger.error("Google Calendar MCP exposed zero tools")
117
  return (
118
  "Google Calendar tools are unavailable because the remote MCP server exposed zero tools. "
119
  "This usually means MCP auth is incomplete or the server is not advertising Calendar tools."
120
  )
121
+ if tool_names == {AUTH_BOOTSTRAP_TOOL}:
122
+ logger.info("Google Calendar MCP only exposed auth bootstrap tool; initiating auth flow")
123
+ auth_result = await google_mcp.call_tool(
124
+ AUTH_BOOTSTRAP_TOOL,
125
+ {
126
+ "service_name": SERVICE_DISPLAY_MAP["calendar"],
127
+ "user_google_email": USER_GOOGLE_EMAIL,
128
+ },
129
+ )
130
+ return str(auth_result)
131
  skillport_mcp = await enter_optional_mcp(stack, self._create_skillport_server, "SkillPort Calendar MCP")
132
  agent = self._create_agent(google_mcp, skillport_mcp)
133
  logger.info("Google Calendar agent ready with %d MCP server(s)", len(agent.mcp_servers))
src/Agentic_System/Google_Docs_Agent.py CHANGED
@@ -16,12 +16,14 @@ try:
16
  from .google_mcp_config import (
17
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
18
  DOCS_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
 
19
  USER_GOOGLE_EMAIL,
20
  )
21
  except ImportError:
22
  from google_mcp_config import (
23
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
24
  DOCS_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
 
25
  USER_GOOGLE_EMAIL,
26
  )
27
 
@@ -107,12 +109,23 @@ class GoogleDocsAgent:
107
  if google_mcp is None:
108
  return "Google Docs tools are currently unavailable because the MCP server is not connected."
109
  tools = await google_mcp.list_tools()
 
110
  if not tools:
111
  logger.error("Google Docs MCP exposed zero tools")
112
  return (
113
  "Google Docs tools are unavailable because the remote MCP server exposed zero tools. "
114
  "This usually means MCP auth is incomplete or the server is not advertising Docs tools."
115
  )
 
 
 
 
 
 
 
 
 
 
116
  skillport_mcp = await enter_optional_mcp(stack, self._create_skillport_server, "SkillPort Docs MCP")
117
  agent = self._create_agent(google_mcp, skillport_mcp)
118
  logger.info("Google Docs agent ready with %d MCP server(s)", len(agent.mcp_servers))
 
16
  from .google_mcp_config import (
17
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
18
  DOCS_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
19
+ AUTH_BOOTSTRAP_TOOL, SERVICE_DISPLAY_MAP,
20
  USER_GOOGLE_EMAIL,
21
  )
22
  except ImportError:
23
  from google_mcp_config import (
24
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
25
  DOCS_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
26
+ AUTH_BOOTSTRAP_TOOL, SERVICE_DISPLAY_MAP,
27
  USER_GOOGLE_EMAIL,
28
  )
29
 
 
109
  if google_mcp is None:
110
  return "Google Docs tools are currently unavailable because the MCP server is not connected."
111
  tools = await google_mcp.list_tools()
112
+ tool_names = {getattr(tool, "name", str(tool)) for tool in tools}
113
  if not tools:
114
  logger.error("Google Docs MCP exposed zero tools")
115
  return (
116
  "Google Docs tools are unavailable because the remote MCP server exposed zero tools. "
117
  "This usually means MCP auth is incomplete or the server is not advertising Docs tools."
118
  )
119
+ if tool_names == {AUTH_BOOTSTRAP_TOOL}:
120
+ logger.info("Google Docs MCP only exposed auth bootstrap tool; initiating auth flow")
121
+ auth_result = await google_mcp.call_tool(
122
+ AUTH_BOOTSTRAP_TOOL,
123
+ {
124
+ "service_name": SERVICE_DISPLAY_MAP["docs"],
125
+ "user_google_email": USER_GOOGLE_EMAIL,
126
+ },
127
+ )
128
+ return str(auth_result)
129
  skillport_mcp = await enter_optional_mcp(stack, self._create_skillport_server, "SkillPort Docs MCP")
130
  agent = self._create_agent(google_mcp, skillport_mcp)
131
  logger.info("Google Docs agent ready with %d MCP server(s)", len(agent.mcp_servers))
src/Agentic_System/Google_Drive_Agent.py CHANGED
@@ -16,12 +16,14 @@ try:
16
  from .google_mcp_config import (
17
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
18
  DRIVE_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
 
19
  USER_GOOGLE_EMAIL,
20
  )
21
  except ImportError:
22
  from google_mcp_config import (
23
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
24
  DRIVE_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
 
25
  USER_GOOGLE_EMAIL,
26
  )
27
 
@@ -110,12 +112,23 @@ class GoogleDriveAgent:
110
  if google_mcp is None:
111
  return "Google Drive tools are currently unavailable because the MCP server is not connected."
112
  tools = await google_mcp.list_tools()
 
113
  if not tools:
114
  logger.error("Google Drive MCP exposed zero tools")
115
  return (
116
  "Google Drive tools are unavailable because the remote MCP server exposed zero tools. "
117
  "This usually means MCP auth is incomplete or the server is not advertising Drive tools."
118
  )
 
 
 
 
 
 
 
 
 
 
119
  skillport_mcp = await enter_optional_mcp(stack, self._create_skillport_server, "SkillPort Drive MCP")
120
  agent = self._create_agent(google_mcp, skillport_mcp)
121
  logger.info("Google Drive agent ready with %d MCP server(s)", len(agent.mcp_servers))
 
16
  from .google_mcp_config import (
17
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
18
  DRIVE_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
19
+ AUTH_BOOTSTRAP_TOOL, SERVICE_DISPLAY_MAP,
20
  USER_GOOGLE_EMAIL,
21
  )
22
  except ImportError:
23
  from google_mcp_config import (
24
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
25
  DRIVE_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
26
+ AUTH_BOOTSTRAP_TOOL, SERVICE_DISPLAY_MAP,
27
  USER_GOOGLE_EMAIL,
28
  )
29
 
 
112
  if google_mcp is None:
113
  return "Google Drive tools are currently unavailable because the MCP server is not connected."
114
  tools = await google_mcp.list_tools()
115
+ tool_names = {getattr(tool, "name", str(tool)) for tool in tools}
116
  if not tools:
117
  logger.error("Google Drive MCP exposed zero tools")
118
  return (
119
  "Google Drive tools are unavailable because the remote MCP server exposed zero tools. "
120
  "This usually means MCP auth is incomplete or the server is not advertising Drive tools."
121
  )
122
+ if tool_names == {AUTH_BOOTSTRAP_TOOL}:
123
+ logger.info("Google Drive MCP only exposed auth bootstrap tool; initiating auth flow")
124
+ auth_result = await google_mcp.call_tool(
125
+ AUTH_BOOTSTRAP_TOOL,
126
+ {
127
+ "service_name": SERVICE_DISPLAY_MAP["drive"],
128
+ "user_google_email": USER_GOOGLE_EMAIL,
129
+ },
130
+ )
131
+ return str(auth_result)
132
  skillport_mcp = await enter_optional_mcp(stack, self._create_skillport_server, "SkillPort Drive MCP")
133
  agent = self._create_agent(google_mcp, skillport_mcp)
134
  logger.info("Google Drive agent ready with %d MCP server(s)", len(agent.mcp_servers))
src/Agentic_System/Google_Sheet_Agent.py CHANGED
@@ -16,12 +16,14 @@ try:
16
  from .google_mcp_config import (
17
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
18
  SHEETS_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
 
19
  USER_GOOGLE_EMAIL,
20
  )
21
  except ImportError:
22
  from google_mcp_config import (
23
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
24
  SHEETS_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
 
25
  USER_GOOGLE_EMAIL,
26
  )
27
 
@@ -104,12 +106,23 @@ class GoogleSheetsAgent:
104
  if google_mcp is None:
105
  return "Google Sheets tools are currently unavailable because the MCP server is not connected."
106
  tools = await google_mcp.list_tools()
 
107
  if not tools:
108
  logger.error("Google Sheets MCP exposed zero tools")
109
  return (
110
  "Google Sheets tools are unavailable because the remote MCP server exposed zero tools. "
111
  "This usually means MCP auth is incomplete or the server is not advertising Sheets tools."
112
  )
 
 
 
 
 
 
 
 
 
 
113
  skillport_mcp = await enter_optional_mcp(stack, self._create_skillport_server, "SkillPort Sheets MCP")
114
  agent = self._create_agent(google_mcp, skillport_mcp)
115
  logger.info("Google Sheets agent ready with %d MCP server(s)", len(agent.mcp_servers))
 
16
  from .google_mcp_config import (
17
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
18
  SHEETS_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
19
+ AUTH_BOOTSTRAP_TOOL, SERVICE_DISPLAY_MAP,
20
  USER_GOOGLE_EMAIL,
21
  )
22
  except ImportError:
23
  from google_mcp_config import (
24
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
25
  SHEETS_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
26
+ AUTH_BOOTSTRAP_TOOL, SERVICE_DISPLAY_MAP,
27
  USER_GOOGLE_EMAIL,
28
  )
29
 
 
106
  if google_mcp is None:
107
  return "Google Sheets tools are currently unavailable because the MCP server is not connected."
108
  tools = await google_mcp.list_tools()
109
+ tool_names = {getattr(tool, "name", str(tool)) for tool in tools}
110
  if not tools:
111
  logger.error("Google Sheets MCP exposed zero tools")
112
  return (
113
  "Google Sheets tools are unavailable because the remote MCP server exposed zero tools. "
114
  "This usually means MCP auth is incomplete or the server is not advertising Sheets tools."
115
  )
116
+ if tool_names == {AUTH_BOOTSTRAP_TOOL}:
117
+ logger.info("Google Sheets MCP only exposed auth bootstrap tool; initiating auth flow")
118
+ auth_result = await google_mcp.call_tool(
119
+ AUTH_BOOTSTRAP_TOOL,
120
+ {
121
+ "service_name": SERVICE_DISPLAY_MAP["sheets"],
122
+ "user_google_email": USER_GOOGLE_EMAIL,
123
+ },
124
+ )
125
+ return str(auth_result)
126
  skillport_mcp = await enter_optional_mcp(stack, self._create_skillport_server, "SkillPort Sheets MCP")
127
  agent = self._create_agent(google_mcp, skillport_mcp)
128
  logger.info("Google Sheets agent ready with %d MCP server(s)", len(agent.mcp_servers))
src/Agentic_System/Google_Slides_Agent.py CHANGED
@@ -16,12 +16,14 @@ try:
16
  from .google_mcp_config import (
17
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
18
  SLIDES_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
 
19
  USER_GOOGLE_EMAIL,
20
  )
21
  except ImportError:
22
  from google_mcp_config import (
23
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
24
  SLIDES_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
 
25
  USER_GOOGLE_EMAIL,
26
  )
27
 
@@ -107,12 +109,23 @@ class GoogleSlidesAgent:
107
  if google_mcp is None:
108
  return "Google Slides tools are currently unavailable because the MCP server is not connected."
109
  tools = await google_mcp.list_tools()
 
110
  if not tools:
111
  logger.error("Google Slides MCP exposed zero tools")
112
  return (
113
  "Google Slides tools are unavailable because the remote MCP server exposed zero tools. "
114
  "This usually means MCP auth is incomplete or the server is not advertising Slides tools."
115
  )
 
 
 
 
 
 
 
 
 
 
116
  skillport_mcp = await enter_optional_mcp(stack, self._create_skillport_server, "SkillPort Slides MCP")
117
  agent = self._create_agent(google_mcp, skillport_mcp)
118
  logger.info("Google Slides agent ready with %d MCP server(s)", len(agent.mcp_servers))
 
16
  from .google_mcp_config import (
17
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
18
  SLIDES_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
19
+ AUTH_BOOTSTRAP_TOOL, SERVICE_DISPLAY_MAP,
20
  USER_GOOGLE_EMAIL,
21
  )
22
  except ImportError:
23
  from google_mcp_config import (
24
  LONGCAT_API_KEY, LONGCAT_BASE_URL, MODEL_NAME,
25
  SLIDES_TOOLS, create_google_mcp_server, create_skillport_mcp_server,
26
+ AUTH_BOOTSTRAP_TOOL, SERVICE_DISPLAY_MAP,
27
  USER_GOOGLE_EMAIL,
28
  )
29
 
 
109
  if google_mcp is None:
110
  return "Google Slides tools are currently unavailable because the MCP server is not connected."
111
  tools = await google_mcp.list_tools()
112
+ tool_names = {getattr(tool, "name", str(tool)) for tool in tools}
113
  if not tools:
114
  logger.error("Google Slides MCP exposed zero tools")
115
  return (
116
  "Google Slides tools are unavailable because the remote MCP server exposed zero tools. "
117
  "This usually means MCP auth is incomplete or the server is not advertising Slides tools."
118
  )
119
+ if tool_names == {AUTH_BOOTSTRAP_TOOL}:
120
+ logger.info("Google Slides MCP only exposed auth bootstrap tool; initiating auth flow")
121
+ auth_result = await google_mcp.call_tool(
122
+ AUTH_BOOTSTRAP_TOOL,
123
+ {
124
+ "service_name": SERVICE_DISPLAY_MAP["slides"],
125
+ "user_google_email": USER_GOOGLE_EMAIL,
126
+ },
127
+ )
128
+ return str(auth_result)
129
  skillport_mcp = await enter_optional_mcp(stack, self._create_skillport_server, "SkillPort Slides MCP")
130
  agent = self._create_agent(google_mcp, skillport_mcp)
131
  logger.info("Google Slides agent ready with %d MCP server(s)", len(agent.mcp_servers))
src/Agentic_System/__pycache__/Gmail_Agent.cpython-314.pyc CHANGED
Binary files a/src/Agentic_System/__pycache__/Gmail_Agent.cpython-314.pyc and b/src/Agentic_System/__pycache__/Gmail_Agent.cpython-314.pyc differ
 
src/Agentic_System/__pycache__/Google_Calendar_Agent.cpython-314.pyc CHANGED
Binary files a/src/Agentic_System/__pycache__/Google_Calendar_Agent.cpython-314.pyc and b/src/Agentic_System/__pycache__/Google_Calendar_Agent.cpython-314.pyc differ
 
src/Agentic_System/__pycache__/Google_Docs_Agent.cpython-314.pyc CHANGED
Binary files a/src/Agentic_System/__pycache__/Google_Docs_Agent.cpython-314.pyc and b/src/Agentic_System/__pycache__/Google_Docs_Agent.cpython-314.pyc differ
 
src/Agentic_System/__pycache__/Google_Drive_Agent.cpython-314.pyc CHANGED
Binary files a/src/Agentic_System/__pycache__/Google_Drive_Agent.cpython-314.pyc and b/src/Agentic_System/__pycache__/Google_Drive_Agent.cpython-314.pyc differ
 
src/Agentic_System/__pycache__/Google_Sheet_Agent.cpython-314.pyc CHANGED
Binary files a/src/Agentic_System/__pycache__/Google_Sheet_Agent.cpython-314.pyc and b/src/Agentic_System/__pycache__/Google_Sheet_Agent.cpython-314.pyc differ
 
src/Agentic_System/__pycache__/Google_Slides_Agent.cpython-314.pyc CHANGED
Binary files a/src/Agentic_System/__pycache__/Google_Slides_Agent.cpython-314.pyc and b/src/Agentic_System/__pycache__/Google_Slides_Agent.cpython-314.pyc differ
 
src/Agentic_System/__pycache__/google_mcp_config.cpython-314.pyc CHANGED
Binary files a/src/Agentic_System/__pycache__/google_mcp_config.cpython-314.pyc and b/src/Agentic_System/__pycache__/google_mcp_config.cpython-314.pyc differ
 
src/Agentic_System/google_mcp_config.py CHANGED
@@ -90,6 +90,17 @@ SERVICE_MAP = {
90
  "slides": "slides",
91
  }
92
 
 
 
 
 
 
 
 
 
 
 
 
93
 
94
  # ─── Tool Name Constants Per Service ─────────────────────────────────────────
95
  # These must match the exact function names registered via @server.tool()
@@ -214,13 +225,14 @@ def create_google_mcp_server(service: str, tool_names: list[str]):
214
  from agents.mcp import MCPServerStreamableHttp
215
  from agents.mcp import create_static_tool_filter
216
 
217
- tool_filter = create_static_tool_filter(allowed_tool_names=tool_names)
 
218
 
219
  logger.info("=" * 60)
220
  logger.info("[MCP-FACTORY] Creating MCPServerStreamableHttp for service: %s", service)
221
  logger.info("[MCP-FACTORY] URL : %s", MCP_SERVER_URL)
222
  logger.info("[MCP-FACTORY] Headers set : %s", bool(get_mcp_headers()))
223
- logger.info("[MCP-FACTORY] Tool filter : %s", tool_names)
224
  logger.info("=" * 60)
225
 
226
  return MCPServerStreamableHttp(
 
90
  "slides": "slides",
91
  }
92
 
93
+ SERVICE_DISPLAY_MAP = {
94
+ "sheets": "Google Sheets",
95
+ "docs": "Google Docs",
96
+ "drive": "Google Drive",
97
+ "calendar": "Google Calendar",
98
+ "gmail": "Google Gmail",
99
+ "slides": "Google Slides",
100
+ }
101
+
102
+ AUTH_BOOTSTRAP_TOOL = "start_google_auth"
103
+
104
 
105
  # ─── Tool Name Constants Per Service ─────────────────────────────────────────
106
  # These must match the exact function names registered via @server.tool()
 
225
  from agents.mcp import MCPServerStreamableHttp
226
  from agents.mcp import create_static_tool_filter
227
 
228
+ allowed_tool_names = list(dict.fromkeys([*tool_names, AUTH_BOOTSTRAP_TOOL]))
229
+ tool_filter = create_static_tool_filter(allowed_tool_names=allowed_tool_names)
230
 
231
  logger.info("=" * 60)
232
  logger.info("[MCP-FACTORY] Creating MCPServerStreamableHttp for service: %s", service)
233
  logger.info("[MCP-FACTORY] URL : %s", MCP_SERVER_URL)
234
  logger.info("[MCP-FACTORY] Headers set : %s", bool(get_mcp_headers()))
235
+ logger.info("[MCP-FACTORY] Tool filter : %s", allowed_tool_names)
236
  logger.info("=" * 60)
237
 
238
  return MCPServerStreamableHttp(