universal-mcp 0.1.11rc3__py3-none-any.whl → 0.1.13__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 (111) hide show
  1. universal_mcp/applications/__init__.py +76 -8
  2. universal_mcp/cli.py +136 -30
  3. universal_mcp/integrations/__init__.py +1 -1
  4. universal_mcp/integrations/integration.py +79 -0
  5. universal_mcp/servers/README.md +79 -0
  6. universal_mcp/servers/server.py +17 -31
  7. universal_mcp/stores/README.md +74 -0
  8. universal_mcp/templates/README.md.j2 +93 -0
  9. universal_mcp/templates/api_client.py.j2 +27 -0
  10. universal_mcp/tools/README.md +86 -0
  11. universal_mcp/tools/tools.py +1 -3
  12. universal_mcp/utils/agentr.py +95 -0
  13. universal_mcp/utils/api_generator.py +90 -219
  14. universal_mcp/utils/docgen.py +2 -2
  15. universal_mcp/utils/installation.py +8 -8
  16. universal_mcp/utils/openapi.py +353 -211
  17. universal_mcp/utils/readme.py +92 -0
  18. universal_mcp/utils/singleton.py +23 -0
  19. {universal_mcp-0.1.11rc3.dist-info → universal_mcp-0.1.13.dist-info}/METADATA +17 -54
  20. universal_mcp-0.1.13.dist-info/RECORD +39 -0
  21. universal_mcp/applications/ahrefs/README.md +0 -76
  22. universal_mcp/applications/ahrefs/__init__.py +0 -0
  23. universal_mcp/applications/ahrefs/app.py +0 -2291
  24. universal_mcp/applications/cal_com_v2/README.md +0 -175
  25. universal_mcp/applications/cal_com_v2/__init__.py +0 -0
  26. universal_mcp/applications/cal_com_v2/app.py +0 -5390
  27. universal_mcp/applications/calendly/README.md +0 -78
  28. universal_mcp/applications/calendly/__init__.py +0 -0
  29. universal_mcp/applications/calendly/app.py +0 -1195
  30. universal_mcp/applications/clickup/README.md +0 -160
  31. universal_mcp/applications/clickup/__init__.py +0 -0
  32. universal_mcp/applications/clickup/app.py +0 -5009
  33. universal_mcp/applications/coda/README.md +0 -133
  34. universal_mcp/applications/coda/__init__.py +0 -0
  35. universal_mcp/applications/coda/app.py +0 -3671
  36. universal_mcp/applications/e2b/README.md +0 -37
  37. universal_mcp/applications/e2b/app.py +0 -65
  38. universal_mcp/applications/elevenlabs/README.md +0 -84
  39. universal_mcp/applications/elevenlabs/__init__.py +0 -0
  40. universal_mcp/applications/elevenlabs/app.py +0 -1402
  41. universal_mcp/applications/falai/README.md +0 -42
  42. universal_mcp/applications/falai/__init__.py +0 -0
  43. universal_mcp/applications/falai/app.py +0 -332
  44. universal_mcp/applications/figma/README.md +0 -74
  45. universal_mcp/applications/figma/__init__.py +0 -0
  46. universal_mcp/applications/figma/app.py +0 -1261
  47. universal_mcp/applications/firecrawl/README.md +0 -45
  48. universal_mcp/applications/firecrawl/app.py +0 -268
  49. universal_mcp/applications/github/README.md +0 -47
  50. universal_mcp/applications/github/app.py +0 -429
  51. universal_mcp/applications/gong/README.md +0 -88
  52. universal_mcp/applications/gong/__init__.py +0 -0
  53. universal_mcp/applications/gong/app.py +0 -2297
  54. universal_mcp/applications/google_calendar/app.py +0 -442
  55. universal_mcp/applications/google_docs/README.md +0 -40
  56. universal_mcp/applications/google_docs/app.py +0 -88
  57. universal_mcp/applications/google_drive/README.md +0 -44
  58. universal_mcp/applications/google_drive/app.py +0 -286
  59. universal_mcp/applications/google_mail/README.md +0 -47
  60. universal_mcp/applications/google_mail/app.py +0 -664
  61. universal_mcp/applications/google_sheet/README.md +0 -42
  62. universal_mcp/applications/google_sheet/app.py +0 -150
  63. universal_mcp/applications/hashnode/app.py +0 -81
  64. universal_mcp/applications/hashnode/prompt.md +0 -23
  65. universal_mcp/applications/heygen/README.md +0 -69
  66. universal_mcp/applications/heygen/__init__.py +0 -0
  67. universal_mcp/applications/heygen/app.py +0 -956
  68. universal_mcp/applications/mailchimp/README.md +0 -306
  69. universal_mcp/applications/mailchimp/__init__.py +0 -0
  70. universal_mcp/applications/mailchimp/app.py +0 -10937
  71. universal_mcp/applications/markitdown/app.py +0 -44
  72. universal_mcp/applications/notion/README.md +0 -55
  73. universal_mcp/applications/notion/__init__.py +0 -0
  74. universal_mcp/applications/notion/app.py +0 -527
  75. universal_mcp/applications/perplexity/README.md +0 -37
  76. universal_mcp/applications/perplexity/app.py +0 -65
  77. universal_mcp/applications/reddit/README.md +0 -45
  78. universal_mcp/applications/reddit/app.py +0 -379
  79. universal_mcp/applications/replicate/README.md +0 -65
  80. universal_mcp/applications/replicate/__init__.py +0 -0
  81. universal_mcp/applications/replicate/app.py +0 -980
  82. universal_mcp/applications/resend/README.md +0 -38
  83. universal_mcp/applications/resend/app.py +0 -37
  84. universal_mcp/applications/retell_ai/README.md +0 -46
  85. universal_mcp/applications/retell_ai/__init__.py +0 -0
  86. universal_mcp/applications/retell_ai/app.py +0 -333
  87. universal_mcp/applications/rocketlane/README.md +0 -42
  88. universal_mcp/applications/rocketlane/__init__.py +0 -0
  89. universal_mcp/applications/rocketlane/app.py +0 -194
  90. universal_mcp/applications/serpapi/README.md +0 -37
  91. universal_mcp/applications/serpapi/app.py +0 -73
  92. universal_mcp/applications/spotify/README.md +0 -116
  93. universal_mcp/applications/spotify/__init__.py +0 -0
  94. universal_mcp/applications/spotify/app.py +0 -2526
  95. universal_mcp/applications/supabase/README.md +0 -112
  96. universal_mcp/applications/supabase/__init__.py +0 -0
  97. universal_mcp/applications/supabase/app.py +0 -2970
  98. universal_mcp/applications/tavily/README.md +0 -38
  99. universal_mcp/applications/tavily/app.py +0 -51
  100. universal_mcp/applications/wrike/README.md +0 -71
  101. universal_mcp/applications/wrike/__init__.py +0 -0
  102. universal_mcp/applications/wrike/app.py +0 -1372
  103. universal_mcp/applications/youtube/README.md +0 -82
  104. universal_mcp/applications/youtube/__init__.py +0 -0
  105. universal_mcp/applications/youtube/app.py +0 -1428
  106. universal_mcp/applications/zenquotes/README.md +0 -37
  107. universal_mcp/applications/zenquotes/app.py +0 -31
  108. universal_mcp/integrations/agentr.py +0 -112
  109. universal_mcp-0.1.11rc3.dist-info/RECORD +0 -119
  110. {universal_mcp-0.1.11rc3.dist-info → universal_mcp-0.1.13.dist-info}/WHEEL +0 -0
  111. {universal_mcp-0.1.11rc3.dist-info → universal_mcp-0.1.13.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,92 @@
1
+ import importlib
2
+ from pathlib import Path
3
+
4
+ from jinja2 import Environment, FileSystemLoader, TemplateError, select_autoescape
5
+ from loguru import logger
6
+
7
+
8
+ def _import_class(module_path: str, class_name: str):
9
+ """
10
+ Helper to import a class by name from a module.
11
+ Raises ModuleNotFoundError if module or class does not exist.
12
+ """
13
+ try:
14
+ spec = importlib.util.spec_from_file_location("temp_module", module_path)
15
+ module = importlib.util.module_from_spec(spec)
16
+ spec.loader.exec_module(module)
17
+ except ModuleNotFoundError as e:
18
+ logger.debug(f"Import failed for module '{module_path}': {e}")
19
+ raise
20
+ try:
21
+ return getattr(module, class_name)
22
+ except AttributeError as e:
23
+ logger.error(f"Class '{class_name}' not found in module '{module_path}'")
24
+ raise ModuleNotFoundError(
25
+ f"Class '{class_name}' not found in module '{module_path}'"
26
+ ) from e
27
+
28
+
29
+ def generate_readme(app: Path, class_name: str) -> Path:
30
+ """Generate README.md with API documentation.
31
+
32
+ Args:
33
+ app_dir: Directory where the README will be generated
34
+ folder_name: Name of the application folder
35
+ tools: List of Function objects from the OpenAPI schema
36
+
37
+ Returns:
38
+ Path to the generated README file
39
+
40
+ Raises:
41
+ FileNotFoundError: If the template directory doesn't exist
42
+ TemplateError: If there's an error rendering the template
43
+ IOError: If there's an error writing the README file
44
+ """
45
+
46
+ # Import the app
47
+ app_instance = _import_class(app, class_name)(integration=None)
48
+ # List tools by calling list_tools()
49
+ tools = app_instance.list_tools()
50
+ # Format tools into (name, description) tuples
51
+ formatted_tools = []
52
+ for tool in tools:
53
+ name = tool.__name__
54
+ description = tool.__doc__.strip().split("\n")[0]
55
+ formatted_tools.append((name, description))
56
+ # Render the template
57
+ # Set up Jinja2 environment
58
+ template_dir = Path(__file__).parent.parent / "templates"
59
+ if not template_dir.exists():
60
+ logger.error(f"Template directory not found: {template_dir}")
61
+ raise FileNotFoundError(f"Template directory not found: {template_dir}")
62
+
63
+ try:
64
+ env = Environment(
65
+ loader=FileSystemLoader(template_dir), autoescape=select_autoescape()
66
+ )
67
+ template = env.get_template("README.md.j2")
68
+ except Exception as e:
69
+ logger.error(f"Error loading template: {e}")
70
+ raise TemplateError(f"Error loading template: {e}") from e
71
+ # Write the README file
72
+ try:
73
+ readme_content = template.render(name=class_name, tools=formatted_tools)
74
+ except Exception as e:
75
+ logger.error(f"Error rendering template: {e}")
76
+ raise TemplateError(f"Error rendering template: {e}") from e
77
+
78
+ # Write the README file
79
+ app_dir = app.parent
80
+ readme_file = app_dir / "README.md"
81
+
82
+ # Write the README file
83
+ readme_file = app_dir / "README.md"
84
+ try:
85
+ with open(readme_file, "w") as f:
86
+ f.write(readme_content)
87
+ logger.info(f"Documentation generated at: {readme_file}")
88
+ except Exception as e:
89
+ logger.error(f"Error writing README file: {e}")
90
+ raise OSError(f"Error writing README file: {e}") from e
91
+
92
+ return readme_file
@@ -0,0 +1,23 @@
1
+ class Singleton(type):
2
+ """Metaclass that ensures only one instance of a class exists.
3
+
4
+ This metaclass implements the singleton pattern by maintaining a dictionary
5
+ of instances for each class that uses it. When a class with this metaclass
6
+ is instantiated, it checks if an instance already exists and returns that
7
+ instance instead of creating a new one.
8
+
9
+ Example:
10
+ class MyClass(metaclass=Singleton):
11
+ pass
12
+
13
+ a = MyClass()
14
+ b = MyClass()
15
+ assert a is b # True
16
+ """
17
+
18
+ _instances = {}
19
+
20
+ def __call__(cls, *args, **kwargs):
21
+ if cls not in cls._instances:
22
+ cls._instances[cls] = super().__call__(*args, **kwargs)
23
+ return cls._instances[cls]
@@ -1,13 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: universal-mcp
3
- Version: 0.1.11rc3
3
+ Version: 0.1.13
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
+ License: MIT
6
7
  Requires-Python: >=3.11
8
+ Requires-Dist: cookiecutter>=2.6.0
7
9
  Requires-Dist: gql[all]>=3.5.2
10
+ Requires-Dist: jinja2>=3.1.3
8
11
  Requires-Dist: keyring>=25.6.0
9
- Requires-Dist: langchain-cerebras>=0.5.0
10
- Requires-Dist: langchain-google-genai>=2.1.3
11
12
  Requires-Dist: litellm>=1.30.7
12
13
  Requires-Dist: loguru>=0.7.3
13
14
  Requires-Dist: mcp>=1.6.0
@@ -17,41 +18,14 @@ Requires-Dist: pydantic>=2.11.1
17
18
  Requires-Dist: pyyaml>=6.0.2
18
19
  Requires-Dist: rich>=14.0.0
19
20
  Requires-Dist: typer>=0.15.2
20
- Provides-Extra: all
21
- Requires-Dist: e2b-code-interpreter>=1.2.0; extra == 'all'
22
- Requires-Dist: fal-client>=0.5.9; extra == 'all'
23
- Requires-Dist: fastapi[standard]>=0.115.12; extra == 'all'
24
- Requires-Dist: firecrawl-py>=1.15.0; extra == 'all'
25
- Requires-Dist: google-search-results>=2.4.2; extra == 'all'
26
- Requires-Dist: langchain-mcp-adapters>=0.0.3; extra == 'all'
27
- Requires-Dist: langchain-openai>=0.3.12; extra == 'all'
28
- Requires-Dist: langgraph-checkpoint-sqlite>=2.0.6; extra == 'all'
29
- Requires-Dist: langgraph>=0.3.24; extra == 'all'
30
- Requires-Dist: litellm>=1.30.7; extra == 'all'
31
- Requires-Dist: markitdown[all]>=0.1.1; extra == 'all'
32
- Requires-Dist: pyright>=1.1.398; extra == 'all'
33
- Requires-Dist: pytest-asyncio>=0.26.0; extra == 'all'
34
- Requires-Dist: pytest>=8.3.5; extra == 'all'
35
- Requires-Dist: python-dotenv>=1.0.1; extra == 'all'
36
- Requires-Dist: ruff>=0.11.4; extra == 'all'
37
- Requires-Dist: streamlit>=1.44.1; extra == 'all'
38
- Requires-Dist: watchdog>=6.0.0; extra == 'all'
39
21
  Provides-Extra: dev
40
22
  Requires-Dist: litellm>=1.30.7; extra == 'dev'
23
+ Requires-Dist: pre-commit>=4.2.0; extra == 'dev'
41
24
  Requires-Dist: pyright>=1.1.398; extra == 'dev'
42
25
  Requires-Dist: pytest-asyncio>=0.26.0; extra == 'dev'
43
26
  Requires-Dist: pytest>=8.3.5; extra == 'dev'
44
27
  Requires-Dist: ruff>=0.11.4; extra == 'dev'
45
- Provides-Extra: e2b
46
- Requires-Dist: e2b-code-interpreter>=1.2.0; extra == 'e2b'
47
- Provides-Extra: fal-ai
48
- Requires-Dist: fal-client>=0.5.9; extra == 'fal-ai'
49
- Provides-Extra: firecrawl
50
- Requires-Dist: firecrawl-py>=1.15.0; extra == 'firecrawl'
51
- Provides-Extra: markitdown
52
- Requires-Dist: markitdown[all]>=0.1.1; extra == 'markitdown'
53
28
  Provides-Extra: playground
54
- Requires-Dist: fastapi[standard]>=0.115.12; extra == 'playground'
55
29
  Requires-Dist: langchain-mcp-adapters>=0.0.3; extra == 'playground'
56
30
  Requires-Dist: langchain-openai>=0.3.12; extra == 'playground'
57
31
  Requires-Dist: langgraph-checkpoint-sqlite>=2.0.6; extra == 'playground'
@@ -59,8 +33,6 @@ Requires-Dist: langgraph>=0.3.24; extra == 'playground'
59
33
  Requires-Dist: python-dotenv>=1.0.1; extra == 'playground'
60
34
  Requires-Dist: streamlit>=1.44.1; extra == 'playground'
61
35
  Requires-Dist: watchdog>=6.0.0; extra == 'playground'
62
- Provides-Extra: serpapi
63
- Requires-Dist: google-search-results>=2.4.2; extra == 'serpapi'
64
36
  Description-Content-Type: text/markdown
65
37
 
66
38
  # Universal MCP
@@ -73,6 +45,8 @@ Universal MCP acts as a middleware layer for your API applications, enabling sea
73
45
  - **Managed Authentication**: Built-in support for API keys and OAuth-based authentication flows
74
46
  - **Extensible Architecture**: Easily build and add new app integrations with minimal boilerplate
75
47
  - **Credential Management**: Flexible storage options for API credentials with memory and environment-based implementations
48
+ - **Tool Management**: Comprehensive tool registration, validation, and execution capabilities
49
+ - **Multiple Server Types**: Support for local, AgentR, and single-application server configurations
76
50
 
77
51
  ## 🔧 Installation
78
52
 
@@ -170,27 +144,7 @@ python src/playground
170
144
  Refer to `src/playground/README.md` for more detailed setup and usage instructions.
171
145
 
172
146
  ## 🧩 Available Applications
173
-
174
- Universal MCP comes with several pre-built applications:
175
-
176
- | Application Slug | Description | Authentication Type |
177
- | :--------------- | :--------------------------------------- | :---------------------------------------- |
178
- | `e2b` | Execute Python code in secure sandboxes | API Key (via Integration) |
179
- | `firecrawl` | Scrape/crawl web pages, search | API Key (via Integration) |
180
- | `github` | Interact with GitHub repos, issues, PRs | OAuth (AgentR) |
181
- | `google-calendar`| Manage Google Calendar events | OAuth (AgentR) |
182
- | `google-docs` | Create and manage Google Docs documents | OAuth (AgentR) |
183
- | `google-drive` | Manage Google Drive files and folders | OAuth (AgentR) |
184
- | `google-mail` | Read and send Gmail emails | OAuth (AgentR) |
185
- | `google-sheet` | Manage Google Sheets spreadsheets | OAuth (AgentR) |
186
- | `markitdown` | Convert web pages/files to Markdown | None |
187
- | `notion` | Interact with Notion pages/databases | OAuth (AgentR) |
188
- | `perplexity` | Interact with Perplexity AI models | API Key (via Integration) |
189
- | `reddit` | Interact with Reddit posts/comments | OAuth (AgentR) |
190
- | `resend` | Send emails via Resend API | API Key (via Integration) |
191
- | `serpapi` | Perform web searches via SerpApi | API Key (via Integration) |
192
- | `tavily` | Advanced web search & research API | API Key (via Integration) |
193
- | `zenquotes` | Get inspirational quotes | None |
147
+ Visit [https://agentr.dev](https://agentr.dev) to check all available applications
194
148
 
195
149
  *Authentication Type notes:*
196
150
  * *OAuth (AgentR)*: Typically requires configuring the integration with `type: "agentr"` in your `ServerConfig`. Requires the `AGENTR_API_KEY`.
@@ -275,6 +229,15 @@ universal_mcp --version
275
229
  - `litellm` (optional, for `docgen` command)
276
230
  - ... and others specific to certain applications.
277
231
 
232
+ ## 📚 Documentation
233
+
234
+ For more detailed information about specific components:
235
+
236
+ - [Tools Documentation](src/universal_mcp/tools/README.md) - Learn about tool management and conversion
237
+ - [Servers Documentation](src/universal_mcp/servers/README.md) - Understand different server implementations
238
+ - [Stores Documentation](src/universal_mcp/stores/README.md) - Explore credential storage options
239
+ - [Integrations Documentation](src/universal_mcp/integrations/README.md) - Learn about authentication methods
240
+
278
241
  ## 📝 License
279
242
 
280
243
  This project is licensed under the MIT License.
@@ -0,0 +1,39 @@
1
+ universal_mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ universal_mcp/analytics.py,sha256=aGCg0Okpcy06W70qCA9I8_ySOiCgAtzJAIWAdhBsOeA,2212
3
+ universal_mcp/cli.py,sha256=aQioMc0ZpE5uL9h_qrk_eS514H0woQOsTsjEzL6Khto,8552
4
+ universal_mcp/config.py,sha256=sJaPI4q51CDPPG0z32rMJiE7a64eaa9nxbjJgYnaFA4,838
5
+ universal_mcp/exceptions.py,sha256=WApedvzArNujD0gZfUofYBxjQo97ZDJLqDibtLWZoRk,373
6
+ universal_mcp/logger.py,sha256=D947u1roUf6WqlcEsPpvmWDqGc8L41qF3MO1suK5O1Q,308
7
+ universal_mcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ universal_mcp/applications/__init__.py,sha256=ZjV0P55Ej0vjIQ_bCSNatWTX-VphDJ6OGePWBu3bu3U,3196
9
+ universal_mcp/applications/application.py,sha256=0eC9D4HHRwIGpuFusaCxTZ0u64U68VbBpRSxjxGB5y8,8152
10
+ universal_mcp/integrations/README.md,sha256=lTAPXO2nivcBe1q7JT6PRa6v9Ns_ZersQMIdw-nmwEA,996
11
+ universal_mcp/integrations/__init__.py,sha256=tg6Yk59AEhwPsrTp0hZQ3NBfmJuYGu2sNCOXuph-h9k,922
12
+ universal_mcp/integrations/integration.py,sha256=genBiaWuzCs-XCf3UD1j8PQYyGU3GiVO4uupSdJRHnA,12601
13
+ universal_mcp/servers/README.md,sha256=ytFlgp8-LO0oogMrHkMOp8SvFTwgsKgv7XhBVZGNTbM,2284
14
+ universal_mcp/servers/__init__.py,sha256=dDtvvMzbWskABlobTZHztrWMb3hbzgidza3BmEmIAD8,474
15
+ universal_mcp/servers/server.py,sha256=0oJQQUiwPdG2q79tzsVv3WPMV5YIFbF14PRvBF-SxMQ,9395
16
+ universal_mcp/stores/README.md,sha256=jrPh_ow4ESH4BDGaSafilhOVaN8oQ9IFlFW-j5Z5hLA,2465
17
+ universal_mcp/stores/__init__.py,sha256=quvuwhZnpiSLuojf0NfmBx2xpaCulv3fbKtKaSCEmuM,603
18
+ universal_mcp/stores/store.py,sha256=lYaFd-9YKC404BPeqzNw_Xm3ziQjksZyvQtaW1yd9FM,6900
19
+ universal_mcp/templates/README.md.j2,sha256=gNry-IrGUdumhgWyHFVxOKgXf_MR4RFK6SI6jF3Tuns,2564
20
+ universal_mcp/templates/api_client.py.j2,sha256=972Im7LNUAq3yZTfwDcgivnb-b8u6_JLKWXwoIwXXXQ,908
21
+ universal_mcp/tools/README.md,sha256=RuxliOFqV1ZEyeBdj3m8UKfkxAsfrxXh-b6V4ZGAk8I,2468
22
+ universal_mcp/tools/__init__.py,sha256=hVL-elJLwD_K87Gpw_s2_o43sQRPyRNOnxlzt0_Pfn8,72
23
+ universal_mcp/tools/adapters.py,sha256=2HvpyFiI0zg9dp0XshnG7t6KrVqFHM7hgtmgY1bsHN0,927
24
+ universal_mcp/tools/func_metadata.py,sha256=f_5LdDNsOu1DpXvDUeZYiJswVmwGZz6IMPtpJJ5B2-Y,7975
25
+ universal_mcp/tools/tools.py,sha256=9YzFbX0YHdz7RrVyKKBx-eyFEnYD4HPoUVtSAftgdk4,12889
26
+ universal_mcp/utils/__init__.py,sha256=8wi4PGWu-SrFjNJ8U7fr2iFJ1ktqlDmSKj1xYd7KSDc,41
27
+ universal_mcp/utils/agentr.py,sha256=3sobve7Odk8pIAZm3RHTX4Rc21rkBClcXQgXXslbSUA,3490
28
+ universal_mcp/utils/api_generator.py,sha256=x3LkJm3tXgl2qVQq-ZQW86w7IqbErEdFTfwBP3aOwyI,4763
29
+ universal_mcp/utils/docgen.py,sha256=zPmZ-b-fK6xk-dwHEx2hwShN-iquPD_O15CGuPwlj2k,21870
30
+ universal_mcp/utils/docstring_parser.py,sha256=j7aE-LLnBOPTJI0qXayf0NlYappzxICv5E_hUPNmAlc,11459
31
+ universal_mcp/utils/dump_app_tools.py,sha256=9bQePJ4ZKzGtcIYrBgLxbKDOZmL7ajIAHhXljT_AlyA,2041
32
+ universal_mcp/utils/installation.py,sha256=H6woSY5AljEy_m5KgiAlHtNfe8eygOu4ZXNs5Q4H_y4,10307
33
+ universal_mcp/utils/openapi.py,sha256=GhUdSefVOrOFMw15ZAIaEma-XKu6ptHv65ds0g7ntBo,24924
34
+ universal_mcp/utils/readme.py,sha256=Q4E3RidWVg0ngYBGZCKcoA4eX6wlkCpvU-clU0E7Q20,3305
35
+ universal_mcp/utils/singleton.py,sha256=kolHnbS9yd5C7z-tzaUAD16GgI-thqJXysNi3sZM4No,733
36
+ universal_mcp-0.1.13.dist-info/METADATA,sha256=EU8Am27RHzp4o0mU_fwcGhAOHaHQduFMbLd5gfRYBak,9800
37
+ universal_mcp-0.1.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
38
+ universal_mcp-0.1.13.dist-info/entry_points.txt,sha256=QlBrVKmA2jIM0q-C-3TQMNJTTWOsOFQvgedBq2rZTS8,56
39
+ universal_mcp-0.1.13.dist-info/RECORD,,
@@ -1,76 +0,0 @@
1
-
2
- # Ahrefs MCP Server
3
-
4
- An MCP Server for the Ahrefs API.
5
-
6
- ## Supported Integrations
7
-
8
- - AgentR
9
- - API Key (Coming Soon)
10
- - OAuth (Coming Soon)
11
-
12
- ## Tools
13
-
14
- This is automatically generated from OpenAPI schema for the Ahrefs API.
15
-
16
- ## Supported Integrations
17
-
18
- This tool can be integrated with any service that supports HTTP requests.
19
-
20
- ## Tool List
21
-
22
- | Tool | Description |
23
- |------|-------------|
24
- | crawler_ips | Retrieve the list of public crawler IP addresses from the API. |
25
- | crawler_ip_ranges | Fetches the current public crawler IP ranges from the API, optionally specifying output format. |
26
- | limits_and_usage | Retrieves current API subscription limits and usage statistics from the service. |
27
- | batch_analysis | Submits a batch analysis request with specified parameters and returns the analysis results as a dictionary. |
28
- | serp_overview | Retrieves a SERP (Search Engine Results Page) overview report based on specified selection, country, and keyword criteria. |
29
- | overview | Retrieves rank tracking overview data for a specified project, date, and device. |
30
- | competitors_overview | Retrieves an overview of competitor rankings for a specified project and criteria. |
31
- | projects | Retrieves a list of site audit projects from the configured base URL, optionally specifying an output format. |
32
- | domain_rating | Fetches the domain rating and related metrics for a specified target and date. |
33
- | backlinks_stats | Retrieves backlink statistics for a specified target and date, with optional filters for protocol, mode, and output format. |
34
- | outlinks_stats | Retrieves outbound link statistics for the specified target from the site explorer API. |
35
- | metrics | Retrieves metrics data from the site explorer API endpoint. |
36
- | refdomains_history | Retrieves the historical data of reference domains from a specified site. |
37
- | domain_rating_history | Retrieves historical domain rating data for a specified target within a given date range. |
38
- | url_rating_history | Retrieves URL rating history data for a specified target within a date range. |
39
- | pages_history | Retrieves historical page data for a target using specified filters. |
40
- | metrics_history | Retrieves historical metrics based on specified parameters. |
41
- | keywords_history | Fetches the historical keyword rankings and performance data for a specified target within an optional date range and set of filters. |
42
- | metrics_by_country | Fetches site metrics grouped by country for a specified target and date. |
43
- | pages_by_traffic | Retrieves a list of top pages for a specified target domain or URL, ranked by estimated organic search traffic. |
44
- | all_backlinks | Retrieves all backlinks information for a specified target using various query parameters. |
45
- | broken_backlinks | Fetches broken backlink data for the specified target from the site explorer API endpoint. |
46
- | refdomains | Retrieves referring domains data for a specified target using the Site Explorer API endpoint. |
47
- | anchors | Fetches anchor text distribution data for a specified target using given query parameters. |
48
- | linkeddomains | Retrieves linked domains for a specified target using the site explorer API endpoint. |
49
- | linked_anchors_external | Fetch linked external anchor data for a specified target using provided selection and filtering criteria. |
50
- | linked_anchors_internal | Fetches internal linked anchor data for a specified target from the site explorer API, applying optional filtering and query parameters. |
51
- | organic_keywords | Retrieve organic keyword data for a specified target and date from the Site Explorer API endpoint. |
52
- | organic_competitors | Retrieves organic competitors data for a specified target using the Site Explorer API. |
53
- | top_pages | Retrieves top pages data for a specified target and date from the site explorer API with customizable query parameters. |
54
- | paid_pages | Fetches paid pages data from the Site Explorer API based on specified filters. |
55
- | best_by_external_links | Fetches data about the best-performing pages of a target site based on external links, with various filtering and output options. |
56
- | best_by_internal_links | Retrieves the best-performing internal links for a specified target using the site explorer API endpoint. |
57
- | total_search_volume_history | Fetches the total historical search volume data for a specified target within a given date range and optional filters. |
58
- | keyword_explorer_overview | Retrieves an overview of keyword metrics and data from the keywords explorer API endpoint based on the specified filters and parameters. |
59
- | volume_history | Fetches the historical search volume for a given keyword in a specified country. |
60
- | volume_by_country | Retrieves search volume by country for a given keyword. |
61
- | matching_terms | Retrieves matching keyword terms from the keywords explorer API based on specified filters and search parameters. |
62
- | related_terms | Retrieves related keyword terms for a given selection and country, with optional filtering and pagination. |
63
- | search_suggestions | Fetches keyword search suggestions from the keywords explorer API based on the provided filtering and query parameters. |
64
-
65
-
66
-
67
- ## Usage
68
-
69
- - Login to AgentR
70
- - Follow the quickstart guide to setup MCP Server for your client
71
- - Visit Apps Store and enable the Ahrefs app
72
- - Restart the MCP Server
73
-
74
- ### Local Development
75
-
76
- - Follow the README to test with the local MCP Server
File without changes