universal-mcp 0.1.24rc11__tar.gz → 0.1.24rc12__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/PKG-INFO +2 -1
  2. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/pyproject.toml +2 -1
  3. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/base.py +14 -14
  4. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/llm.py +11 -5
  5. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/.gitignore +0 -0
  6. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/LICENSE +0 -0
  7. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/README.md +0 -0
  8. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/tests/__init__.py +0 -0
  9. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/tests/conftest.py +0 -0
  10. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/tests/test_api_generator.py +0 -0
  11. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/tests/test_api_integration.py +0 -0
  12. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/tests/test_applications.py +0 -0
  13. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/tests/test_localserver.py +0 -0
  14. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/tests/test_stores.py +0 -0
  15. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/tests/test_tool.py +0 -0
  16. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/tests/test_tool_manager.py +0 -0
  17. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/tests/test_zenquotes.py +0 -0
  18. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/__init__.py +0 -0
  19. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agentr/README.md +0 -0
  20. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agentr/__init__.py +0 -0
  21. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agentr/client.py +0 -0
  22. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agentr/integration.py +0 -0
  23. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agentr/registry.py +0 -0
  24. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agentr/server.py +0 -0
  25. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/__init__.py +0 -0
  26. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/auto.py +0 -0
  27. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/autoagent/__init__.py +0 -0
  28. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/autoagent/__main__.py +0 -0
  29. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/autoagent/context.py +0 -0
  30. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/autoagent/graph.py +0 -0
  31. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/autoagent/prompts.py +0 -0
  32. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/autoagent/state.py +0 -0
  33. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/autoagent/studio.py +0 -0
  34. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/autoagent/utils.py +0 -0
  35. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/cli.py +0 -0
  36. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/codeact/__init__.py +0 -0
  37. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/codeact/sandbox.py +0 -0
  38. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/codeact/test.py +0 -0
  39. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/codeact/utils.py +0 -0
  40. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/hil.py +0 -0
  41. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/react.py +0 -0
  42. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/simple.py +0 -0
  43. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/tools.py +0 -0
  44. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/agents/utils.py +0 -0
  45. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/analytics.py +0 -0
  46. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/applications/__init__.py +0 -0
  47. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/applications/application.py +0 -0
  48. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/applications/sample/app.py +0 -0
  49. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/cli.py +0 -0
  50. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/client/oauth.py +0 -0
  51. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/client/token_store.py +0 -0
  52. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/client/transport.py +0 -0
  53. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/config.py +0 -0
  54. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/exceptions.py +0 -0
  55. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/integrations/__init__.py +0 -0
  56. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/integrations/integration.py +0 -0
  57. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/logger.py +0 -0
  58. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/py.typed +0 -0
  59. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/servers/__init__.py +0 -0
  60. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/servers/server.py +0 -0
  61. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/stores/__init__.py +0 -0
  62. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/stores/store.py +0 -0
  63. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/tools/__init__.py +0 -0
  64. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/tools/adapters.py +0 -0
  65. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/tools/docstring_parser.py +0 -0
  66. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/tools/func_metadata.py +0 -0
  67. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/tools/manager.py +0 -0
  68. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/tools/registry.py +0 -0
  69. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/tools/tools.py +0 -0
  70. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/types.py +0 -0
  71. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/__init__.py +0 -0
  72. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/common.py +0 -0
  73. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/installation.py +0 -0
  74. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/openapi/__inti__.py +0 -0
  75. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/openapi/api_generator.py +0 -0
  76. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/openapi/api_splitter.py +0 -0
  77. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/openapi/cli.py +0 -0
  78. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/openapi/docgen.py +0 -0
  79. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/openapi/filters.py +0 -0
  80. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/openapi/openapi.py +0 -0
  81. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/openapi/postprocessor.py +0 -0
  82. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/openapi/preprocessor.py +0 -0
  83. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/openapi/readme.py +0 -0
  84. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/openapi/test_generator.py +0 -0
  85. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/prompts.py +0 -0
  86. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/singleton.py +0 -0
  87. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/templates/README.md.j2 +0 -0
  88. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/templates/api_client.py.j2 +0 -0
  89. {universal_mcp-0.1.24rc11 → universal_mcp-0.1.24rc12}/src/universal_mcp/utils/testing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: universal-mcp
3
- Version: 0.1.24rc11
3
+ Version: 0.1.24rc12
4
4
  Summary: Universal MCP acts as a middle ware for your API applications. It can store your credentials, authorize, enable disable apps on the fly and much more.
5
5
  Author-email: Manoj Bajaj <manojbajaj95@gmail.com>
6
6
  License: MIT
@@ -14,6 +14,7 @@ Requires-Dist: jinja2>=3.1.3
14
14
  Requires-Dist: jsonref>=1.1.0
15
15
  Requires-Dist: keyring>=25.6.0
16
16
  Requires-Dist: langchain-anthropic>=0.3.19
17
+ Requires-Dist: langchain-google-genai>=2.1.10
17
18
  Requires-Dist: langchain-google-vertexai>=2.0.28
18
19
  Requires-Dist: langchain-mcp-adapters>=0.1.9
19
20
  Requires-Dist: langchain-openai>=0.3.27
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "universal-mcp"
7
- version = "0.1.24-rc11"
7
+ version = "0.1.24-rc12"
8
8
  description = "Universal MCP acts as a middle ware for your API applications. It can store your credentials, authorize, enable disable apps on the fly and much more."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -21,6 +21,7 @@ dependencies = [
21
21
  "jsonref>=1.1.0",
22
22
  "keyring>=25.6.0",
23
23
  "langchain-anthropic>=0.3.19",
24
+ "langchain-google-genai>=2.1.10",
24
25
  "langchain-google-vertexai>=2.0.28",
25
26
  "langchain-mcp-adapters>=0.1.9",
26
27
  "langchain-openai>=0.3.27",
@@ -6,10 +6,10 @@ from langchain_core.messages import AIMessageChunk
6
6
  from langgraph.checkpoint.base import BaseCheckpointSaver
7
7
  from langgraph.checkpoint.memory import MemorySaver
8
8
  from langgraph.types import Command
9
-
10
9
  from .utils import RichCLI
11
10
 
12
11
 
12
+
13
13
  class BaseAgent:
14
14
  def __init__(self, name: str, instructions: str, model: str, memory: BaseCheckpointSaver | None = None, **kwargs):
15
15
  self.name = name
@@ -30,6 +30,7 @@ class BaseAgent:
30
30
 
31
31
  async def stream(self, thread_id: str, user_input: str):
32
32
  await self.ainit()
33
+ aggregate = None
33
34
  async for event, metadata in self._graph.astream(
34
35
  {"messages": [{"role": "user", "content": user_input}]},
35
36
  config={"configurable": {"thread_id": thread_id}},
@@ -38,25 +39,24 @@ class BaseAgent:
38
39
  stream_usage=True,
39
40
  ):
40
41
  # Only forward assistant token chunks that are not tool-related.
41
- event = cast(AIMessageChunk, event)
42
- if "finish_reason" in event.response_metadata:
43
- # Got LLM finish reason ignore it
44
- # logger.debug(f"Finish event: {event}")
42
+ type_ = type(event)
43
+ if type_ != AIMessageChunk:
44
+ # TODO: Handle other types of events
45
45
  continue
46
-
47
- # Skip chunks that correspond to tool calls or tool execution phases
48
- # - tool_call_chunks present => model is emitting tool call(s)
49
- # - metadata tags or node names may indicate tool/quiet phases
46
+ event = cast(AIMessageChunk, event)
47
+ aggregate = event if aggregate is None else aggregate + event
50
48
  tags = metadata.get("tags", []) if isinstance(metadata, dict) else []
51
-
52
49
  is_quiet = isinstance(tags, list) and ("quiet" in tags)
53
50
 
54
51
  if is_quiet:
55
52
  continue
56
-
57
- # Emit only the token chunks for the final assistant message.
58
- # logger.debug(f"Event: {event}, Metadata: {metadata}")
59
- yield event
53
+ if "finish_reason" in event.response_metadata:
54
+ # Got LLM finish reason ignore it
55
+ # logger.debug(f"Finish event: {event}, Metadata: {metadata}")
56
+ pass
57
+ else:
58
+ # logger.debug(f"Event: {event}, Metadata: {metadata}")
59
+ yield event
60
60
  # Send a final finished message
61
61
  # The last event would be finish
62
62
  event = cast(AIMessageChunk, event)
@@ -1,5 +1,7 @@
1
+ import os
1
2
  from langchain_anthropic import ChatAnthropic
2
3
  from langchain_core.language_models import BaseChatModel
4
+ from langchain_google_genai import ChatGoogleGenerativeAI
3
5
  from langchain_google_vertexai import ChatVertexAI
4
6
  from langchain_google_vertexai.model_garden import ChatAnthropicVertex
5
7
  from langchain_openai import AzureChatOpenAI
@@ -12,15 +14,19 @@ def load_chat_model(fully_specified_name: str, tags: list[str] | None = None) ->
12
14
  """
13
15
  provider, model = fully_specified_name.split("/", maxsplit=1)
14
16
  if provider == "google_anthropic_vertex":
15
- return ChatAnthropicVertex(model=model, temperature=0.2, location="asia-east1", tags=tags)
17
+ return ChatAnthropicVertex(model=model, temperature=0.2, location="asia-east1", tags=tags, stream_usage=True,)
16
18
  elif provider == "anthropic":
17
19
  return ChatAnthropic(
18
- model=model, temperature=1, thinking={"type": "enabled", "budget_tokens": 2048}, max_tokens=4096, tags=tags
20
+ model=model, temperature=1, thinking={"type": "enabled", "budget_tokens": 2048}, max_tokens=4096, tags=tags, stream_usage=True,
19
21
  ) # pyright: ignore[reportCallIssue]
20
22
  elif provider == "azure":
21
- return AzureChatOpenAI(model=model, api_version="2024-12-01-preview", azure_deployment=model, tags=tags)
22
- elif provider == "vertex":
23
- return ChatVertexAI(model=model, temperature=0.1, tags=tags)
23
+ return AzureChatOpenAI(model=model, api_version="2024-12-01-preview", azure_deployment=model, tags=tags, stream_usage=True,)
24
+ elif provider == "gemini":
25
+ return ChatGoogleGenerativeAI(
26
+ model= model,
27
+ temperature=1.0,
28
+ max_retries=2
29
+ )
24
30
  else:
25
31
  raise ValueError(f"Unsupported provider: {provider}")
26
32