universal-mcp 0.1.23rc2__py3-none-any.whl → 0.1.24rc3__py3-none-any.whl

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 (69) hide show
  1. universal_mcp/agentr/__init__.py +6 -0
  2. universal_mcp/agentr/agentr.py +30 -0
  3. universal_mcp/{utils/agentr.py → agentr/client.py} +22 -7
  4. universal_mcp/agentr/integration.py +104 -0
  5. universal_mcp/agentr/registry.py +91 -0
  6. universal_mcp/agentr/server.py +51 -0
  7. universal_mcp/agents/__init__.py +6 -0
  8. universal_mcp/agents/auto.py +576 -0
  9. universal_mcp/agents/base.py +88 -0
  10. universal_mcp/agents/cli.py +27 -0
  11. universal_mcp/agents/codeact/__init__.py +243 -0
  12. universal_mcp/agents/codeact/sandbox.py +27 -0
  13. universal_mcp/agents/codeact/test.py +15 -0
  14. universal_mcp/agents/codeact/utils.py +61 -0
  15. universal_mcp/agents/hil.py +104 -0
  16. universal_mcp/agents/llm.py +10 -0
  17. universal_mcp/agents/react.py +58 -0
  18. universal_mcp/agents/simple.py +40 -0
  19. universal_mcp/agents/utils.py +111 -0
  20. universal_mcp/analytics.py +44 -14
  21. universal_mcp/applications/__init__.py +42 -75
  22. universal_mcp/applications/application.py +187 -133
  23. universal_mcp/applications/sample/app.py +245 -0
  24. universal_mcp/cli.py +14 -231
  25. universal_mcp/client/oauth.py +122 -18
  26. universal_mcp/client/token_store.py +62 -3
  27. universal_mcp/client/{client.py → transport.py} +127 -48
  28. universal_mcp/config.py +189 -49
  29. universal_mcp/exceptions.py +54 -6
  30. universal_mcp/integrations/__init__.py +0 -18
  31. universal_mcp/integrations/integration.py +185 -168
  32. universal_mcp/servers/__init__.py +2 -14
  33. universal_mcp/servers/server.py +84 -258
  34. universal_mcp/stores/store.py +126 -93
  35. universal_mcp/tools/__init__.py +3 -0
  36. universal_mcp/tools/adapters.py +20 -11
  37. universal_mcp/tools/func_metadata.py +1 -1
  38. universal_mcp/tools/manager.py +38 -53
  39. universal_mcp/tools/registry.py +41 -0
  40. universal_mcp/tools/tools.py +24 -3
  41. universal_mcp/types.py +10 -0
  42. universal_mcp/utils/common.py +245 -0
  43. universal_mcp/utils/installation.py +3 -4
  44. universal_mcp/utils/openapi/api_generator.py +71 -17
  45. universal_mcp/utils/openapi/api_splitter.py +0 -1
  46. universal_mcp/utils/openapi/cli.py +669 -0
  47. universal_mcp/utils/openapi/filters.py +114 -0
  48. universal_mcp/utils/openapi/openapi.py +315 -23
  49. universal_mcp/utils/openapi/postprocessor.py +275 -0
  50. universal_mcp/utils/openapi/preprocessor.py +63 -8
  51. universal_mcp/utils/openapi/test_generator.py +287 -0
  52. universal_mcp/utils/prompts.py +634 -0
  53. universal_mcp/utils/singleton.py +4 -1
  54. universal_mcp/utils/testing.py +196 -8
  55. universal_mcp-0.1.24rc3.dist-info/METADATA +68 -0
  56. universal_mcp-0.1.24rc3.dist-info/RECORD +70 -0
  57. universal_mcp/applications/README.md +0 -122
  58. universal_mcp/client/__main__.py +0 -30
  59. universal_mcp/client/agent.py +0 -96
  60. universal_mcp/integrations/README.md +0 -25
  61. universal_mcp/servers/README.md +0 -79
  62. universal_mcp/stores/README.md +0 -74
  63. universal_mcp/tools/README.md +0 -86
  64. universal_mcp-0.1.23rc2.dist-info/METADATA +0 -283
  65. universal_mcp-0.1.23rc2.dist-info/RECORD +0 -51
  66. /universal_mcp/{utils → tools}/docstring_parser.py +0 -0
  67. {universal_mcp-0.1.23rc2.dist-info → universal_mcp-0.1.24rc3.dist-info}/WHEEL +0 -0
  68. {universal_mcp-0.1.23rc2.dist-info → universal_mcp-0.1.24rc3.dist-info}/entry_points.txt +0 -0
  69. {universal_mcp-0.1.23rc2.dist-info → universal_mcp-0.1.24rc3.dist-info}/licenses/LICENSE +0 -0
@@ -1,79 +0,0 @@
1
- # Servers
2
-
3
- This package provides server implementations for hosting and managing MCP (Model Control Protocol) applications.
4
-
5
- ## Overview
6
-
7
- The server implementations provide different ways to host and expose MCP applications and their tools. The base `BaseServer` class provides common functionality that all server implementations inherit.
8
-
9
- ## Supported Server Types
10
-
11
- ### Local Server
12
- The `LocalServer` class provides a local development server implementation that:
13
- - Loads applications from local configuration
14
- - Manages a local store for data persistence
15
- - Supports integration with external services
16
- - Exposes application tools through the MCP protocol
17
-
18
- ### AgentR Server
19
- The `AgentRServer` class provides a server implementation that:
20
- - Connects to the AgentR API
21
- - Dynamically fetches and loads available applications
22
- - Manages AgentR-specific integrations
23
- - Requires an API key for authentication
24
-
25
- ### Single MCP Server
26
- The `SingleMCPServer` class provides a minimal server implementation that:
27
- - Hosts a single application instance
28
- - Ideal for development and testing
29
- - Does not manage integrations or stores internally
30
- - Exposes only the tools from the provided application
31
-
32
- ## Core Features
33
-
34
- All server implementations provide:
35
-
36
- - Tool management and registration
37
- - Application loading and configuration
38
- - Error handling and logging
39
- - MCP protocol compliance
40
- - Integration support
41
-
42
- ## Usage
43
-
44
- Each server implementation can be initialized with a `ServerConfig` object that specifies:
45
- - Server name and description
46
- - Port configuration
47
- - Application configurations
48
- - Store configuration (where applicable)
49
-
50
- Example:
51
- ```python
52
- from universal_mcp.servers import LocalServer
53
- from universal_mcp.config import ServerConfig
54
-
55
- config = ServerConfig(
56
- name="My Local Server",
57
- description="Development server for testing applications",
58
- port=8000,
59
- # ... additional configuration
60
- )
61
-
62
- server = LocalServer(config)
63
- ```
64
-
65
- ## Tool Management
66
-
67
- Servers provide methods for:
68
- - Adding individual tools
69
- - Listing available tools
70
- - Calling tools with proper error handling
71
- - Formatting tool results
72
-
73
- ## Error Handling
74
-
75
- All servers implement comprehensive error handling for:
76
- - Tool execution failures
77
- - Application loading errors
78
- - Integration setup issues
79
- - API communication problems
@@ -1,74 +0,0 @@
1
- # Universal MCP Stores
2
-
3
- The stores module provides a flexible and secure way to manage credentials and sensitive data across different storage backends. It implements a common interface for storing, retrieving, and deleting sensitive information.
4
-
5
- ## Features
6
-
7
- - Abstract base class defining a consistent interface for credential stores
8
- - Multiple storage backend implementations:
9
- - In-memory store (temporary storage)
10
- - Environment variable store
11
- - System keyring store (secure credential storage)
12
- - Exception handling for common error cases
13
- - Type hints and comprehensive documentation
14
-
15
- ## Available Store Implementations
16
-
17
- ### MemoryStore
18
- A simple in-memory store that persists data only for the duration of program execution. Useful for testing or temporary storage.
19
-
20
- ```python
21
- from universal_mcp.stores import MemoryStore
22
-
23
- store = MemoryStore()
24
- store.set("api_key", "secret123")
25
- value = store.get("api_key") # Returns "secret123"
26
- ```
27
-
28
- ### EnvironmentStore
29
- Uses environment variables to store and retrieve credentials. Useful for containerized environments or CI/CD pipelines.
30
-
31
- ```python
32
- from universal_mcp.stores import EnvironmentStore
33
-
34
- store = EnvironmentStore()
35
- store.set("API_KEY", "secret123")
36
- value = store.get("API_KEY") # Returns "secret123"
37
- ```
38
-
39
- ### KeyringStore
40
- Leverages the system's secure credential storage facility. Provides the most secure option for storing sensitive data.
41
-
42
- ```python
43
- from universal_mcp.stores import KeyringStore
44
-
45
- store = KeyringStore(app_name="my_app")
46
- store.set("api_key", "secret123")
47
- value = store.get("api_key") # Returns "secret123"
48
- ```
49
-
50
- ## Error Handling
51
-
52
- The module provides specific exception types for handling errors:
53
-
54
- - `StoreError`: Base exception for all store-related errors
55
- - `KeyNotFoundError`: Raised when a requested key is not found in the store
56
-
57
- ## Best Practices
58
-
59
- 1. Use `KeyringStore` for production environments where security is a priority
60
- 2. Use `EnvironmentStore` for containerized or cloud environments
61
- 3. Use `MemoryStore` for testing or temporary storage only
62
- 4. Always handle `StoreError` and `KeyNotFoundError` exceptions appropriately
63
-
64
- ## Dependencies
65
-
66
- - `keyring`: Required for the KeyringStore implementation
67
- - `loguru`: Used for logging operations in the KeyringStore
68
-
69
- ## Contributing
70
-
71
- New store implementations should inherit from `BaseStore` and implement all required abstract methods:
72
- - `get(key: str) -> Any`
73
- - `set(key: str, value: str) -> None`
74
- - `delete(key: str) -> None`
@@ -1,86 +0,0 @@
1
- # Universal MCP Tools
2
-
3
- This directory contains the core tooling infrastructure for Universal MCP, providing a flexible and extensible framework for defining, managing, and converting tools across different formats.
4
-
5
- ## Components
6
-
7
- ### `tools.py`
8
- The main module containing the core tool management functionality:
9
-
10
- - `Tool` class: Represents a tool with metadata, validation, and execution capabilities
11
- - `ToolManager` class: Manages tool registration, lookup, and execution
12
- - Conversion utilities for different tool formats (OpenAI, LangChain, MCP)
13
-
14
- ### `adapters.py`
15
- Contains adapters for converting tools between different formats:
16
- - `convert_tool_to_mcp_tool`: Converts a tool to MCP format
17
- - `convert_tool_to_langchain_tool`: Converts a tool to LangChain format
18
-
19
- ### `func_metadata.py`
20
- Provides function metadata and argument validation:
21
- - `FuncMetadata` class: Handles function signature analysis and argument validation
22
- - `ArgModelBase` class: Base model for function arguments
23
- - Utilities for parsing and validating function signatures
24
-
25
- ## Usage
26
-
27
- ### Creating a Tool
28
-
29
- ```python
30
- from universal_mcp.tools import Tool
31
-
32
- def my_tool(param1: str, param2: int) -> str:
33
- """A simple tool that does something.
34
-
35
- Args:
36
- param1: Description of param1
37
- param2: Description of param2
38
-
39
- Returns:
40
- Description of return value
41
- """
42
- return f"Result: {param1} {param2}"
43
-
44
- tool = Tool.from_function(my_tool)
45
- ```
46
-
47
- ### Managing Tools
48
-
49
- ```python
50
- from universal_mcp.tools import ToolManager
51
-
52
- manager = ToolManager()
53
- manager.add_tool(my_tool)
54
-
55
- # Get a tool by name
56
- tool = manager.get_tool("my_tool")
57
-
58
- # List all tools in a specific format
59
- tools = manager.list_tools(format="openai") # or "langchain" or "mcp"
60
- ```
61
-
62
- ### Converting Tools
63
-
64
- ```python
65
- from universal_mcp.tools import convert_tool_to_langchain_tool
66
-
67
- langchain_tool = convert_tool_to_langchain_tool(tool)
68
- ```
69
-
70
- ## Features
71
-
72
- - Automatic docstring parsing for tool metadata
73
- - Type validation using Pydantic
74
- - Support for both sync and async tools
75
- - JSON schema generation for tool parameters
76
- - Error handling and analytics tracking
77
- - Tag-based tool organization
78
- - Multiple format support (OpenAI, LangChain, MCP)
79
-
80
- ## Best Practices
81
-
82
- 1. Always provide clear docstrings for your tools
83
- 2. Use type hints for better validation
84
- 3. Handle errors appropriately in your tool implementations
85
- 4. Use tags to organize related tools
86
- 5. Consider async implementations for I/O-bound operations
@@ -1,283 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: universal-mcp
3
- Version: 0.1.23rc2
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
- Author-email: Manoj Bajaj <manojbajaj95@gmail.com>
6
- License: MIT
7
- License-File: LICENSE
8
- Requires-Python: >=3.11
9
- Requires-Dist: black>=25.1.0
10
- Requires-Dist: cookiecutter>=2.6.0
11
- Requires-Dist: gql[all]>=3.5.2
12
- Requires-Dist: jinja2>=3.1.3
13
- Requires-Dist: jsonref>=1.1.0
14
- Requires-Dist: keyring>=25.6.0
15
- Requires-Dist: langchain-mcp-adapters>=0.0.3
16
- Requires-Dist: litellm>=1.30.7
17
- Requires-Dist: loguru>=0.7.3
18
- Requires-Dist: mcp>=1.9.3
19
- Requires-Dist: posthog>=3.24.0
20
- Requires-Dist: pydantic-settings>=2.8.1
21
- Requires-Dist: pydantic>=2.11.1
22
- Requires-Dist: pyyaml>=6.0.2
23
- Requires-Dist: rich>=14.0.0
24
- Requires-Dist: typer>=0.15.2
25
- Provides-Extra: dev
26
- Requires-Dist: litellm>=1.30.7; extra == 'dev'
27
- Requires-Dist: pre-commit>=4.2.0; extra == 'dev'
28
- Requires-Dist: pyright>=1.1.398; extra == 'dev'
29
- Requires-Dist: pytest-asyncio>=0.26.0; extra == 'dev'
30
- Requires-Dist: pytest>=8.3.5; extra == 'dev'
31
- Requires-Dist: ruff>=0.11.4; extra == 'dev'
32
- Provides-Extra: playground
33
- Requires-Dist: langchain-openai>=0.3.12; extra == 'playground'
34
- Requires-Dist: langgraph-checkpoint-sqlite>=2.0.6; extra == 'playground'
35
- Requires-Dist: langgraph>=0.3.24; extra == 'playground'
36
- Requires-Dist: litellm>=1.30.7; extra == 'playground'
37
- Requires-Dist: python-dotenv>=1.0.1; extra == 'playground'
38
- Requires-Dist: streamlit>=1.44.1; extra == 'playground'
39
- Requires-Dist: watchdog>=6.0.0; extra == 'playground'
40
- Description-Content-Type: text/markdown
41
-
42
- # Universal MCP
43
-
44
- Universal MCP acts as a middleware layer for your API applications, enabling seamless integration with various services through the Model Control Protocol (MCP). It simplifies credential management, authorization, dynamic app enablement, and provides a robust framework for building and managing AI-powered tools.
45
-
46
- ## 🌟 Features
47
-
48
- - **MCP (Model Control Protocol) Integration**: Seamlessly works with MCP server architecture for standardized agent-tool communication.
49
- - **Simplified API Integration**: Connect to services like GitHub, Google Calendar, Gmail, Reddit, Tavily, and more with minimal code. See [AgentR](https://agentr.dev) for a list of available applications.
50
- - **Managed Authentication**: Built-in support for API keys and OAuth-based authentication flows, often managed via the AgentR platform.
51
- - **Extensible Architecture**: Easily build and add new app integrations with minimal boilerplate using provided base classes and generation tools.
52
- - **Credential Management**: Flexible and secure storage options for API credentials (memory, environment variables, system keyring).
53
- - **Comprehensive Tool Management**: Robust tool registration, Pydantic-based validation, automatic docstring parsing, and execution capabilities. Supports conversion between MCP, LangChain, and OpenAI tool formats.
54
- - **Multiple Server Types**: Configurations for local development, AgentR-connected dynamic app loading, and single-application servers.
55
- - **Playground Environment**: Includes an interactive Streamlit-based playground for testing agents and tools.
56
-
57
- ## 🔧 Installation
58
-
59
- Install Universal MCP using pip:
60
-
61
- ```bash
62
- pip install universal-mcp
63
- ```
64
-
65
- ## 🚀 Quick Start
66
-
67
- **Important Prerequisite: AgentR API Key (If Using AgentR Integration)**
68
-
69
- If you plan to use integrations with `type: "agentr"` (for services like GitHub, Gmail, Notion via the AgentR platform), or if you run the MCP server itself with `type: "agentr"`, you first need an AgentR API key:
70
-
71
- 1. Visit [https://agentr.dev](https://agentr.dev) to create an account and generate an API key from your dashboard.
72
- 2. Set it as an environment variable _before_ running the MCP server:
73
- ```bash
74
- export AGENTR_API_KEY="your_api_key_here"
75
- ```
76
-
77
- **1. Create a Configuration File (e.g., `config.json`)**
78
-
79
- This file defines the server settings, credential stores, and the applications to load with their respective integrations.
80
-
81
- ```json
82
- {
83
- "name": "My Local MCP Server",
84
- "description": "A server for testing applications locally",
85
- "type": "local", // "local" or "agentr"
86
- "transport": "sse", // "sse", "stdio", or "http"
87
- "port": 8005, // Relevant for "sse" or "http"
88
- "store": {
89
- // Default store for integrations
90
- "name": "my_mcp_store",
91
- "type": "keyring" // "keyring", "environment", or "memory"
92
- },
93
- "apps": [
94
- {
95
- "name": "zenquotes", // App slug (e.g., from agentr.dev)
96
- "integration": null // No authentication needed for this app
97
- },
98
- {
99
- "name": "tavily",
100
- "integration": {
101
- "name": "TAVILY_API_KEY", // Unique name for this credential if type is "api_key"
102
- "type": "api_key",
103
- "store": {
104
- // Override default store for this specific app
105
- "type": "environment" // Looks for TAVILY_API_KEY env var
106
- }
107
- }
108
- },
109
- {
110
- "name": "github",
111
- "integration": {
112
- "name": "github", // Matches the service name in AgentR
113
- "type": "agentr" // Uses AgentR platform for auth/creds
114
- }
115
- }
116
- ]
117
- }
118
- ```
119
-
120
- _Notes on `config.json`:_
121
-
122
- - `type: "local"`: Runs applications defined directly in the config's `apps` list.
123
- - `type: "agentr"`: Connects to the AgentR platform to dynamically load user-enabled apps (ignores the `apps` list in the config) and handle credentials. Requires `AGENTR_API_KEY` environment variable.
124
- - `store`: Defines credential storage.
125
- - `environment`: Looks for an environment variable named `<INTEGRATION_NAME_UPPERCASE>` (e.g., `TAVILY_API_KEY` for the example above).
126
- - `keyring`: Uses the system's secure credential storage.
127
- - `memory`: Transient storage, lost when the server stops.
128
- - `integration`: Configures authentication for each app.
129
- - `type: "agentr"`: Uses the AgentR platform for OAuth/credential management.
130
- - `type: "api_key"`: Uses the specified `store` to retrieve the key.
131
-
132
- **2. Run the Server via CLI**
133
-
134
- Ensure any required environment variables (like `TAVILY_API_KEY` for the Tavily example, or `AGENTR_API_KEY` if using `"agentr"` type server/integrations) are set.
135
-
136
- ```bash
137
- universal_mcp run -c config.json
138
- ```
139
-
140
- The server will start, load the configured applications (or connect to AgentR if `type: "agentr"`), and listen for connections based on the `transport` type.
141
-
142
- ## 🛠️ Using the Playground
143
-
144
- The `playground` directory provides a runnable Streamlit application for interacting with agents that can use tools from an MCP server.
145
-
146
- **Prerequisites:**
147
-
148
- - **`local_config.json`**: This file must exist in the **project root directory** (the same directory as this `README.md`). It configures the _local_ MCP server that the playground's agent can connect to if you choose to run one. For an example, see the `local_config.json` structure in the [Playground README](playground/README.md).
149
- - **Dependencies**: Install playground-specific dependencies. If you have the project cloned, you might install them via:
150
- ```bash
151
- pip install -e .[playground]
152
- # or manually install fastapi, streamlit, uvicorn, langchain-openai, etc.
153
- ```
154
-
155
- **Running the Playground:**
156
-
157
- The easiest way is to use the automated startup script from the **project root directory**:
158
-
159
- ```bash
160
- python playground
161
- ```
162
-
163
- This script will:
164
-
165
- 1. Optionally start a local MCP server (based on your `local_config.json`) if you confirm.
166
- 2. Launch the Streamlit application.
167
-
168
- For more detailed setup, manual startup instructions, and an explanation of the `local_config.json` for the playground, please refer to the [Playground README](playground/README.md).
169
-
170
- ## 🧩 Available Applications
171
-
172
- Universal MCP can integrate with a wide variety of applications. For a list of publicly available applications and their slugs (e.g., "github", "google-calendar"), please visit [AgentR Applications](https://agentr.dev).
173
- Applications are typically installed dynamically by Universal MCP from their respective repositories when first referenced by slug.
174
-
175
- _Authentication Type Notes:_
176
-
177
- - _OAuth (via AgentR)_: Usually requires configuring the app's integration with `type: "agentr"` in your `ServerConfig`. This leverages the AgentR platform for the OAuth flow and requires the `AGENTR_API_KEY` to be set.
178
- - _API Key (via Integration)_: Requires configuring `type: "api_key"` for the app's integration in your `ServerConfig`, along with a `store` (like `environment` or `keyring`) to specify where the API key is located.
179
-
180
- ## 🔐 Integration Types
181
-
182
- Universal MCP supports different ways to handle authentication for applications:
183
-
184
- ### 1. API Key Integration (`type: "api_key"`)
185
-
186
- For services that authenticate via simple API keys.
187
-
188
- ```json
189
- // In your ServerConfig apps array:
190
- {
191
- "name": "tavily",
192
- "integration": {
193
- "name": "TAVILY_API_KEY", // Used by the store (e.g., as env var name)
194
- "type": "api_key",
195
- "store": {
196
- "type": "environment" // Or "keyring", "memory"
197
- }
198
- }
199
- }
200
- ```
201
-
202
- ### 2. AgentR Integration (`type: "agentr"`)
203
-
204
- Recommended for services integrated with the AgentR platform, which typically handles OAuth flows or centrally managed credentials. Requires the `AGENTR_API_KEY` environment variable to be set for the MCP server process.
205
-
206
- ```json
207
- // In your ServerConfig apps array:
208
- {
209
- "name": "github",
210
- "integration": {
211
- "name": "github", // Matches the service name configured in AgentR
212
- "type": "agentr"
213
- }
214
- }
215
- ```
216
-
217
- When an action requiring authorization is called, the `AgentRIntegration` will prompt the user (via the MCP client) to visit a URL to complete the OAuth flow managed by AgentR. This is also the default integration type for apps if the main server config is `type: "agentr"`.
218
-
219
- ### 3. Direct OAuth Integration (`type: "oauth"`)
220
-
221
- While `AgentRIntegration` is generally preferred for OAuth, a direct `OAuthIntegration` class exists. However, it requires manual configuration of client IDs, secrets, and callback handling, which is more complex to set up outside the AgentR platform.
222
-
223
- ## 🤖 CLI Usage
224
-
225
- Universal MCP includes a powerful command-line interface:
226
-
227
- ```bash
228
- # Run the MCP server using a configuration file
229
- universal_mcp run -c config.json
230
-
231
- # Initialize a new MCP application project structure
232
- universal_mcp init --app-name my-cool-app --o ./my-apps --integration-type api_key
233
-
234
- # Generate API client code and application structure from an OpenAPI schema
235
- universal_mcp generate -s <path_to_schema.json_or_yaml> -o <path/to/app_output_directory> --c CustomAppClassName
236
- # Example: universal_mcp generate -s notion_api.yaml -o ./custom_apps/notion --c MyNotionApp
237
-
238
- # Preprocess an OpenAPI schema using an LLM to fill/enhance descriptions
239
- universal_mcp preprocess -s <path_to_input_schema.json_or_yaml> -o <path_to_processed_schema.json_or_yaml>
240
-
241
- # Generate Google-style docstrings for functions in a Python file using an LLM
242
- universal_mcp docgen <path/to/app_file.py>
243
-
244
- # Generate a README.md for a generated application file
245
- universal_mcp readme <path/to/app_file.py>
246
-
247
- # Install MCP configuration for supported desktop apps (e.g., Claude, Cursor)
248
- # Requires an AgentR API key for configuration.
249
- universal_mcp install claude
250
- universal_mcp install cursor
251
-
252
- # Check installed version (standard typer command)
253
- universal_mcp --version
254
- ```
255
-
256
- ## 📋 Requirements
257
-
258
- - Python 3.10+
259
- - Key Dependencies (installed automatically via pip, see `pyproject.toml` for full list):
260
- - `mcp-server`
261
- - `loguru`
262
- - `typer`
263
- - `httpx`
264
- - `pydantic`
265
- - `pyyaml`
266
- - `keyring` (for `KeyringStore`)
267
- - `litellm` (for `docgen` and `preprocess` commands)
268
- - `uv` (used internally for dynamic package installation)
269
-
270
- ## 📚 Documentation
271
-
272
- For more detailed information about specific components:
273
-
274
- - [Applications Framework](src/universal_mcp/applications/README.md)
275
- - [Tool Management](src/universal_mcp/tools/README.md)
276
- - [Server Implementations](src/universal_mcp/servers/README.md)
277
- - [Credential Stores](src/universal_mcp/stores/README.md)
278
- - [Integration & Authentication](src/universal_mcp/integrations/README.md)
279
- - [Playground Usage](playground/README.md)
280
-
281
- ## 📝 License
282
-
283
- This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
@@ -1,51 +0,0 @@
1
- universal_mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- universal_mcp/analytics.py,sha256=Dkv8mkc_2T2t5NxLSZzcr3BlmOispj1RKtbB86V1i4M,2306
3
- universal_mcp/cli.py,sha256=Ndc1I4BtmvDCM6xNtXaO6roUvNabRlclI3tLDeSHKAw,10453
4
- universal_mcp/config.py,sha256=9yofM9MCyBiriojFVcMqRwc9njce6lgwX5r_EfvG0NE,5185
5
- universal_mcp/exceptions.py,sha256=-pbeZhpNieJfnSd2-WM80pU8W8mK8VHXcSjky0BHwdk,665
6
- universal_mcp/logger.py,sha256=VmH_83efpErLEDTJqz55Dp0dioTXfGvMBLZUx5smOLc,2116
7
- universal_mcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- universal_mcp/applications/README.md,sha256=eqbizxaTxKH2O1tyIJR2yI0Db5TQxtgPd_vbpWyCa2Y,3527
9
- universal_mcp/applications/__init__.py,sha256=l19_sMs5766VFWU_7O2niamvvvfQOteysqylbqvjjGQ,3500
10
- universal_mcp/applications/application.py,sha256=_fcnfAeT5Lm2PJpHjK5ax8pCsxlDGJIKyRqnlCdEg_w,18758
11
- universal_mcp/client/__main__.py,sha256=72e4WyJRiLoCtHlpIuvMZcDV98LvZclVaUGJmuCvpIE,886
12
- universal_mcp/client/agent.py,sha256=20N0aZ55ge9PBg-R9gHxit2NSY1ppSz2ez8ZXTiO5kc,3803
13
- universal_mcp/client/client.py,sha256=rx-meuWZuurjaTbjumpf5NO9zIh4wH9nMYUAp2uAejU,8393
14
- universal_mcp/client/oauth.py,sha256=H7goK8FcVuITiwdXR30Am-qAWcgNylsrvt9EJHZMayA,4144
15
- universal_mcp/client/token_store.py,sha256=eoZJbVcmkR-mAGhwk1tmDXXZnDKvjoqOVZG3nXfI8f8,1234
16
- universal_mcp/integrations/README.md,sha256=lTAPXO2nivcBe1q7JT6PRa6v9Ns_ZersQMIdw-nmwEA,996
17
- universal_mcp/integrations/__init__.py,sha256=X8iEzs02IlXfeafp6GMm-cOkg70QdjnlTRuFo24KEfo,916
18
- universal_mcp/integrations/integration.py,sha256=WtW92Awr111Vb_i_vKBvyyYvsNton3N2cX7wQ3ZXy2Y,13105
19
- universal_mcp/servers/README.md,sha256=ytFlgp8-LO0oogMrHkMOp8SvFTwgsKgv7XhBVZGNTbM,2284
20
- universal_mcp/servers/__init__.py,sha256=eBZCsaZjiEv6ZlRRslPKgurQxmpHLQyiXv2fTBygHnM,532
21
- universal_mcp/servers/server.py,sha256=FqAdAAXh23_ZL7ghZvXR5quAidXxQ6m-vDQrim40tag,12429
22
- universal_mcp/stores/README.md,sha256=jrPh_ow4ESH4BDGaSafilhOVaN8oQ9IFlFW-j5Z5hLA,2465
23
- universal_mcp/stores/__init__.py,sha256=quvuwhZnpiSLuojf0NfmBx2xpaCulv3fbKtKaSCEmuM,603
24
- universal_mcp/stores/store.py,sha256=mxnmOVlDNrr8OKhENWDtCIfK7YeCBQcGdS6I2ogRCsU,6756
25
- universal_mcp/tools/README.md,sha256=RuxliOFqV1ZEyeBdj3m8UKfkxAsfrxXh-b6V4ZGAk8I,2468
26
- universal_mcp/tools/__init__.py,sha256=Fatza_R0qYWmNF1WQSfUZZKQFu5qf-16JhZzdmyx3KY,333
27
- universal_mcp/tools/adapters.py,sha256=rnicV_WBgNe0WqVG60ms0o92BoRTRqd_C9jMMndx47c,3461
28
- universal_mcp/tools/func_metadata.py,sha256=7kUWArtUDa2Orr7VGzpwPVfyf2LM3UFA_9arMpl7Zn8,10838
29
- universal_mcp/tools/manager.py,sha256=ao_ovTyca8HR4uwHdL_lTWNdquxcqRx6FaLA4U1lZvQ,11242
30
- universal_mcp/tools/tools.py,sha256=8S_KzARYbG9xbyqhZcI4Wk46tXiZcWlcAMgjChXNEI4,3698
31
- universal_mcp/utils/__init__.py,sha256=8wi4PGWu-SrFjNJ8U7fr2iFJ1ktqlDmSKj1xYd7KSDc,41
32
- universal_mcp/utils/agentr.py,sha256=-brwvgCZgPjvF7wPXw0QfpEsl1ekXQxmcF07-1AQMR4,3663
33
- universal_mcp/utils/common.py,sha256=HEZC2Mhilb8DrGXQG2tboAIw1r4veGilGWjfnPF1lyA,888
34
- universal_mcp/utils/docstring_parser.py,sha256=efEOE-ME7G5Jbbzpn7pN2xNuyu2M5zfZ1Tqu1lRB0Gk,8392
35
- universal_mcp/utils/installation.py,sha256=ItOfBFhKOh4DLz237jgAz_Fn0uOMdrKXw0n5BaUZZNs,7286
36
- universal_mcp/utils/singleton.py,sha256=kolHnbS9yd5C7z-tzaUAD16GgI-thqJXysNi3sZM4No,733
37
- universal_mcp/utils/testing.py,sha256=0znYkuFi8-WjOdbwrTbNC-UpMqG3EXcGOE0wxlERh_A,1464
38
- universal_mcp/utils/openapi/__inti__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- universal_mcp/utils/openapi/api_generator.py,sha256=FjtvbnWuI1P8W8wXuKLCirUtsqQ4HI_TuQrhpA4SqTs,4749
40
- universal_mcp/utils/openapi/api_splitter.py,sha256=0hoq6KMcDVA5NynDBrFjjqjDugZvaWGBdfLzvyLkFAM,20968
41
- universal_mcp/utils/openapi/docgen.py,sha256=DNmwlhg_-TRrHa74epyErMTRjV2nutfCQ7seb_Rq5hE,21366
42
- universal_mcp/utils/openapi/openapi.py,sha256=8TV7L1Wm9_mi_1iy0ccf_4H39XLuZjIinBnJ56H-ggw,51197
43
- universal_mcp/utils/openapi/preprocessor.py,sha256=PPIM3Uu8DYi3dRKdqi9thr9ufeUgkr2K08ri1BwKpoQ,60835
44
- universal_mcp/utils/openapi/readme.py,sha256=R2Jp7DUXYNsXPDV6eFTkLiy7MXbSULUj1vHh4O_nB4c,2974
45
- universal_mcp/utils/templates/README.md.j2,sha256=Mrm181YX-o_-WEfKs01Bi2RJy43rBiq2j6fTtbWgbTA,401
46
- universal_mcp/utils/templates/api_client.py.j2,sha256=972Im7LNUAq3yZTfwDcgivnb-b8u6_JLKWXwoIwXXXQ,908
47
- universal_mcp-0.1.23rc2.dist-info/METADATA,sha256=oRusZjRll0c923kS-RTc64lZw_XTVk8NSuv1gKis1Lk,12154
48
- universal_mcp-0.1.23rc2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
49
- universal_mcp-0.1.23rc2.dist-info/entry_points.txt,sha256=QlBrVKmA2jIM0q-C-3TQMNJTTWOsOFQvgedBq2rZTS8,56
50
- universal_mcp-0.1.23rc2.dist-info/licenses/LICENSE,sha256=NweDZVPslBAZFzlgByF158b85GR0f5_tLQgq1NS48To,1063
51
- universal_mcp-0.1.23rc2.dist-info/RECORD,,
File without changes