Spaces:
Sleeping
Sleeping
Commit Β·
665e623
1
Parent(s): c08d13b
- src/Agentic_System/Gmail_Agent.py +13 -0
- src/Agentic_System/Google_Calendar_Agent.py +13 -0
- src/Agentic_System/Google_Docs_Agent.py +13 -0
- src/Agentic_System/Google_Drive_Agent.py +13 -0
- src/Agentic_System/Google_Sheet_Agent.py +13 -0
- src/Agentic_System/Google_Slides_Agent.py +13 -0
- src/Agentic_System/__pycache__/Gmail_Agent.cpython-314.pyc +0 -0
- src/Agentic_System/__pycache__/Google_Calendar_Agent.cpython-314.pyc +0 -0
- src/Agentic_System/__pycache__/Google_Docs_Agent.cpython-314.pyc +0 -0
- src/Agentic_System/__pycache__/Google_Drive_Agent.cpython-314.pyc +0 -0
- src/Agentic_System/__pycache__/Google_Sheet_Agent.cpython-314.pyc +0 -0
- src/Agentic_System/__pycache__/Google_Slides_Agent.cpython-314.pyc +0 -0
- src/Agentic_System/__pycache__/google_mcp_config.cpython-314.pyc +0 -0
- src/Agentic_System/google_mcp_config.py +14 -2
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 |
-
|
|
|
|
| 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",
|
| 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(
|