universal-mcp-applications 0.1.1__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.
- universal_mcp/applications/ahrefs/README.md +51 -0
- universal_mcp/applications/ahrefs/__init__.py +1 -0
- universal_mcp/applications/ahrefs/app.py +2291 -0
- universal_mcp/applications/airtable/README.md +22 -0
- universal_mcp/applications/airtable/__init__.py +1 -0
- universal_mcp/applications/airtable/app.py +479 -0
- universal_mcp/applications/apollo/README.md +44 -0
- universal_mcp/applications/apollo/__init__.py +1 -0
- universal_mcp/applications/apollo/app.py +1847 -0
- universal_mcp/applications/asana/README.md +199 -0
- universal_mcp/applications/asana/__init__.py +1 -0
- universal_mcp/applications/asana/app.py +9509 -0
- universal_mcp/applications/aws-s3/README.md +0 -0
- universal_mcp/applications/aws-s3/__init__.py +1 -0
- universal_mcp/applications/aws-s3/app.py +552 -0
- universal_mcp/applications/bill/README.md +0 -0
- universal_mcp/applications/bill/__init__.py +1 -0
- universal_mcp/applications/bill/app.py +8705 -0
- universal_mcp/applications/box/README.md +307 -0
- universal_mcp/applications/box/__init__.py +1 -0
- universal_mcp/applications/box/app.py +15987 -0
- universal_mcp/applications/braze/README.md +106 -0
- universal_mcp/applications/braze/__init__.py +1 -0
- universal_mcp/applications/braze/app.py +4754 -0
- universal_mcp/applications/cal-com-v2/README.md +150 -0
- universal_mcp/applications/cal-com-v2/__init__.py +1 -0
- universal_mcp/applications/cal-com-v2/app.py +5541 -0
- universal_mcp/applications/calendly/README.md +53 -0
- universal_mcp/applications/calendly/__init__.py +1 -0
- universal_mcp/applications/calendly/app.py +1436 -0
- universal_mcp/applications/canva/README.md +43 -0
- universal_mcp/applications/canva/__init__.py +1 -0
- universal_mcp/applications/canva/app.py +941 -0
- universal_mcp/applications/clickup/README.md +135 -0
- universal_mcp/applications/clickup/__init__.py +1 -0
- universal_mcp/applications/clickup/app.py +5009 -0
- universal_mcp/applications/coda/README.md +108 -0
- universal_mcp/applications/coda/__init__.py +1 -0
- universal_mcp/applications/coda/app.py +3671 -0
- universal_mcp/applications/confluence/README.md +198 -0
- universal_mcp/applications/confluence/__init__.py +1 -0
- universal_mcp/applications/confluence/app.py +6273 -0
- universal_mcp/applications/contentful/README.md +17 -0
- universal_mcp/applications/contentful/__init__.py +1 -0
- universal_mcp/applications/contentful/app.py +364 -0
- universal_mcp/applications/crustdata/README.md +25 -0
- universal_mcp/applications/crustdata/__init__.py +1 -0
- universal_mcp/applications/crustdata/app.py +586 -0
- universal_mcp/applications/dialpad/README.md +202 -0
- universal_mcp/applications/dialpad/__init__.py +1 -0
- universal_mcp/applications/dialpad/app.py +5949 -0
- universal_mcp/applications/digitalocean/README.md +463 -0
- universal_mcp/applications/digitalocean/__init__.py +1 -0
- universal_mcp/applications/digitalocean/app.py +20835 -0
- universal_mcp/applications/domain-checker/README.md +13 -0
- universal_mcp/applications/domain-checker/__init__.py +1 -0
- universal_mcp/applications/domain-checker/app.py +265 -0
- universal_mcp/applications/e2b/README.md +12 -0
- universal_mcp/applications/e2b/__init__.py +1 -0
- universal_mcp/applications/e2b/app.py +187 -0
- universal_mcp/applications/elevenlabs/README.md +88 -0
- universal_mcp/applications/elevenlabs/__init__.py +1 -0
- universal_mcp/applications/elevenlabs/app.py +3235 -0
- universal_mcp/applications/exa/README.md +15 -0
- universal_mcp/applications/exa/__init__.py +1 -0
- universal_mcp/applications/exa/app.py +221 -0
- universal_mcp/applications/falai/README.md +17 -0
- universal_mcp/applications/falai/__init__.py +1 -0
- universal_mcp/applications/falai/app.py +331 -0
- universal_mcp/applications/figma/README.md +49 -0
- universal_mcp/applications/figma/__init__.py +1 -0
- universal_mcp/applications/figma/app.py +1090 -0
- universal_mcp/applications/firecrawl/README.md +20 -0
- universal_mcp/applications/firecrawl/__init__.py +1 -0
- universal_mcp/applications/firecrawl/app.py +514 -0
- universal_mcp/applications/fireflies/README.md +25 -0
- universal_mcp/applications/fireflies/__init__.py +1 -0
- universal_mcp/applications/fireflies/app.py +506 -0
- universal_mcp/applications/fpl/README.md +23 -0
- universal_mcp/applications/fpl/__init__.py +1 -0
- universal_mcp/applications/fpl/app.py +1327 -0
- universal_mcp/applications/fpl/utils/api.py +142 -0
- universal_mcp/applications/fpl/utils/fixtures.py +629 -0
- universal_mcp/applications/fpl/utils/helper.py +982 -0
- universal_mcp/applications/fpl/utils/league_utils.py +546 -0
- universal_mcp/applications/fpl/utils/position_utils.py +68 -0
- universal_mcp/applications/ghost-content/README.md +25 -0
- universal_mcp/applications/ghost-content/__init__.py +1 -0
- universal_mcp/applications/ghost-content/app.py +654 -0
- universal_mcp/applications/github/README.md +1049 -0
- universal_mcp/applications/github/__init__.py +1 -0
- universal_mcp/applications/github/app.py +50600 -0
- universal_mcp/applications/gong/README.md +63 -0
- universal_mcp/applications/gong/__init__.py +1 -0
- universal_mcp/applications/gong/app.py +2297 -0
- universal_mcp/applications/google-ads/README.md +0 -0
- universal_mcp/applications/google-ads/__init__.py +1 -0
- universal_mcp/applications/google-ads/app.py +23 -0
- universal_mcp/applications/google-calendar/README.md +21 -0
- universal_mcp/applications/google-calendar/__init__.py +1 -0
- universal_mcp/applications/google-calendar/app.py +574 -0
- universal_mcp/applications/google-docs/README.md +25 -0
- universal_mcp/applications/google-docs/__init__.py +1 -0
- universal_mcp/applications/google-docs/app.py +760 -0
- universal_mcp/applications/google-drive/README.md +68 -0
- universal_mcp/applications/google-drive/__init__.py +1 -0
- universal_mcp/applications/google-drive/app.py +4936 -0
- universal_mcp/applications/google-gemini/README.md +25 -0
- universal_mcp/applications/google-gemini/__init__.py +1 -0
- universal_mcp/applications/google-gemini/app.py +663 -0
- universal_mcp/applications/google-mail/README.md +31 -0
- universal_mcp/applications/google-mail/__init__.py +1 -0
- universal_mcp/applications/google-mail/app.py +1354 -0
- universal_mcp/applications/google-searchconsole/README.md +21 -0
- universal_mcp/applications/google-searchconsole/__init__.py +1 -0
- universal_mcp/applications/google-searchconsole/app.py +320 -0
- universal_mcp/applications/google-sheet/README.md +36 -0
- universal_mcp/applications/google-sheet/__init__.py +1 -0
- universal_mcp/applications/google-sheet/app.py +1941 -0
- universal_mcp/applications/hashnode/README.md +20 -0
- universal_mcp/applications/hashnode/__init__.py +1 -0
- universal_mcp/applications/hashnode/app.py +455 -0
- universal_mcp/applications/heygen/README.md +44 -0
- universal_mcp/applications/heygen/__init__.py +1 -0
- universal_mcp/applications/heygen/app.py +961 -0
- universal_mcp/applications/http-tools/README.md +16 -0
- universal_mcp/applications/http-tools/__init__.py +1 -0
- universal_mcp/applications/http-tools/app.py +153 -0
- universal_mcp/applications/hubspot/README.md +239 -0
- universal_mcp/applications/hubspot/__init__.py +1 -0
- universal_mcp/applications/hubspot/app.py +416 -0
- universal_mcp/applications/jira/README.md +600 -0
- universal_mcp/applications/jira/__init__.py +1 -0
- universal_mcp/applications/jira/app.py +28804 -0
- universal_mcp/applications/klaviyo/README.md +313 -0
- universal_mcp/applications/klaviyo/__init__.py +1 -0
- universal_mcp/applications/klaviyo/app.py +11236 -0
- universal_mcp/applications/linkedin/README.md +15 -0
- universal_mcp/applications/linkedin/__init__.py +1 -0
- universal_mcp/applications/linkedin/app.py +243 -0
- universal_mcp/applications/mailchimp/README.md +281 -0
- universal_mcp/applications/mailchimp/__init__.py +1 -0
- universal_mcp/applications/mailchimp/app.py +10937 -0
- universal_mcp/applications/markitdown/README.md +12 -0
- universal_mcp/applications/markitdown/__init__.py +1 -0
- universal_mcp/applications/markitdown/app.py +63 -0
- universal_mcp/applications/miro/README.md +151 -0
- universal_mcp/applications/miro/__init__.py +1 -0
- universal_mcp/applications/miro/app.py +5429 -0
- universal_mcp/applications/ms-teams/README.md +42 -0
- universal_mcp/applications/ms-teams/__init__.py +1 -0
- universal_mcp/applications/ms-teams/app.py +1823 -0
- universal_mcp/applications/neon/README.md +74 -0
- universal_mcp/applications/neon/__init__.py +1 -0
- universal_mcp/applications/neon/app.py +2018 -0
- universal_mcp/applications/notion/README.md +30 -0
- universal_mcp/applications/notion/__init__.py +1 -0
- universal_mcp/applications/notion/app.py +527 -0
- universal_mcp/applications/openai/README.md +22 -0
- universal_mcp/applications/openai/__init__.py +1 -0
- universal_mcp/applications/openai/app.py +759 -0
- universal_mcp/applications/outlook/README.md +20 -0
- universal_mcp/applications/outlook/__init__.py +1 -0
- universal_mcp/applications/outlook/app.py +444 -0
- universal_mcp/applications/perplexity/README.md +12 -0
- universal_mcp/applications/perplexity/__init__.py +1 -0
- universal_mcp/applications/perplexity/app.py +65 -0
- universal_mcp/applications/pipedrive/README.md +284 -0
- universal_mcp/applications/pipedrive/__init__.py +1 -0
- universal_mcp/applications/pipedrive/app.py +12924 -0
- universal_mcp/applications/posthog/README.md +132 -0
- universal_mcp/applications/posthog/__init__.py +1 -0
- universal_mcp/applications/posthog/app.py +7125 -0
- universal_mcp/applications/reddit/README.md +135 -0
- universal_mcp/applications/reddit/__init__.py +1 -0
- universal_mcp/applications/reddit/app.py +4652 -0
- universal_mcp/applications/replicate/README.md +18 -0
- universal_mcp/applications/replicate/__init__.py +1 -0
- universal_mcp/applications/replicate/app.py +495 -0
- universal_mcp/applications/resend/README.md +40 -0
- universal_mcp/applications/resend/__init__.py +1 -0
- universal_mcp/applications/resend/app.py +881 -0
- universal_mcp/applications/retell/README.md +21 -0
- universal_mcp/applications/retell/__init__.py +1 -0
- universal_mcp/applications/retell/app.py +333 -0
- universal_mcp/applications/rocketlane/README.md +70 -0
- universal_mcp/applications/rocketlane/__init__.py +1 -0
- universal_mcp/applications/rocketlane/app.py +4346 -0
- universal_mcp/applications/semanticscholar/README.md +25 -0
- universal_mcp/applications/semanticscholar/__init__.py +1 -0
- universal_mcp/applications/semanticscholar/app.py +482 -0
- universal_mcp/applications/semrush/README.md +44 -0
- universal_mcp/applications/semrush/__init__.py +1 -0
- universal_mcp/applications/semrush/app.py +2081 -0
- universal_mcp/applications/sendgrid/README.md +362 -0
- universal_mcp/applications/sendgrid/__init__.py +1 -0
- universal_mcp/applications/sendgrid/app.py +9752 -0
- universal_mcp/applications/sentry/README.md +186 -0
- universal_mcp/applications/sentry/__init__.py +1 -0
- universal_mcp/applications/sentry/app.py +7471 -0
- universal_mcp/applications/serpapi/README.md +14 -0
- universal_mcp/applications/serpapi/__init__.py +1 -0
- universal_mcp/applications/serpapi/app.py +293 -0
- universal_mcp/applications/sharepoint/README.md +0 -0
- universal_mcp/applications/sharepoint/__init__.py +1 -0
- universal_mcp/applications/sharepoint/app.py +215 -0
- universal_mcp/applications/shopify/README.md +321 -0
- universal_mcp/applications/shopify/__init__.py +1 -0
- universal_mcp/applications/shopify/app.py +15392 -0
- universal_mcp/applications/shortcut/README.md +128 -0
- universal_mcp/applications/shortcut/__init__.py +1 -0
- universal_mcp/applications/shortcut/app.py +4478 -0
- universal_mcp/applications/slack/README.md +0 -0
- universal_mcp/applications/slack/__init__.py +1 -0
- universal_mcp/applications/slack/app.py +570 -0
- universal_mcp/applications/spotify/README.md +91 -0
- universal_mcp/applications/spotify/__init__.py +1 -0
- universal_mcp/applications/spotify/app.py +2526 -0
- universal_mcp/applications/supabase/README.md +87 -0
- universal_mcp/applications/supabase/__init__.py +1 -0
- universal_mcp/applications/supabase/app.py +2970 -0
- universal_mcp/applications/tavily/README.md +12 -0
- universal_mcp/applications/tavily/__init__.py +1 -0
- universal_mcp/applications/tavily/app.py +51 -0
- universal_mcp/applications/trello/README.md +266 -0
- universal_mcp/applications/trello/__init__.py +1 -0
- universal_mcp/applications/trello/app.py +10875 -0
- universal_mcp/applications/twillo/README.md +0 -0
- universal_mcp/applications/twillo/__init__.py +1 -0
- universal_mcp/applications/twillo/app.py +269 -0
- universal_mcp/applications/twitter/README.md +100 -0
- universal_mcp/applications/twitter/__init__.py +1 -0
- universal_mcp/applications/twitter/api_segments/__init__.py +0 -0
- universal_mcp/applications/twitter/api_segments/api_segment_base.py +51 -0
- universal_mcp/applications/twitter/api_segments/compliance_api.py +122 -0
- universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +255 -0
- universal_mcp/applications/twitter/api_segments/dm_events_api.py +140 -0
- universal_mcp/applications/twitter/api_segments/likes_api.py +159 -0
- universal_mcp/applications/twitter/api_segments/lists_api.py +395 -0
- universal_mcp/applications/twitter/api_segments/openapi_json_api.py +34 -0
- universal_mcp/applications/twitter/api_segments/spaces_api.py +309 -0
- universal_mcp/applications/twitter/api_segments/trends_api.py +40 -0
- universal_mcp/applications/twitter/api_segments/tweets_api.py +1403 -0
- universal_mcp/applications/twitter/api_segments/usage_api.py +40 -0
- universal_mcp/applications/twitter/api_segments/users_api.py +1498 -0
- universal_mcp/applications/twitter/app.py +46 -0
- universal_mcp/applications/unipile/README.md +28 -0
- universal_mcp/applications/unipile/__init__.py +1 -0
- universal_mcp/applications/unipile/app.py +829 -0
- universal_mcp/applications/whatsapp/README.md +23 -0
- universal_mcp/applications/whatsapp/__init__.py +1 -0
- universal_mcp/applications/whatsapp/app.py +595 -0
- universal_mcp/applications/whatsapp-business/README.md +34 -0
- universal_mcp/applications/whatsapp-business/__init__.py +1 -0
- universal_mcp/applications/whatsapp-business/app.py +1065 -0
- universal_mcp/applications/wrike/README.md +46 -0
- universal_mcp/applications/wrike/__init__.py +1 -0
- universal_mcp/applications/wrike/app.py +1583 -0
- universal_mcp/applications/youtube/README.md +57 -0
- universal_mcp/applications/youtube/__init__.py +1 -0
- universal_mcp/applications/youtube/app.py +1696 -0
- universal_mcp/applications/zenquotes/README.md +12 -0
- universal_mcp/applications/zenquotes/__init__.py +1 -0
- universal_mcp/applications/zenquotes/app.py +31 -0
- universal_mcp_applications-0.1.1.dist-info/METADATA +172 -0
- universal_mcp_applications-0.1.1.dist-info/RECORD +268 -0
- universal_mcp_applications-0.1.1.dist-info/WHEEL +4 -0
- universal_mcp_applications-0.1.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# DomainCheckerApp MCP Server
|
|
2
|
+
|
|
3
|
+
An MCP Server for the DomainCheckerApp API.
|
|
4
|
+
|
|
5
|
+
## 🛠️ Tool List
|
|
6
|
+
|
|
7
|
+
This is automatically generated from OpenAPI schema for the DomainCheckerApp API.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
| Tool | Description |
|
|
11
|
+
|------|-------------|
|
|
12
|
+
| `check_domain_tool` | Checks if a domain is available for registration by querying DNS records and RDAP data. |
|
|
13
|
+
| `check_tlds_tool` | Checks a keyword across multiple top-level domains (TLDs) to find available domain names. |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .app import DomainCheckerApp
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import sys
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
import dns.resolver
|
|
6
|
+
import requests
|
|
7
|
+
from universal_mcp.applications.application import APIApplication
|
|
8
|
+
from universal_mcp.integrations import Integration
|
|
9
|
+
|
|
10
|
+
# Configure logging
|
|
11
|
+
logging.basicConfig(
|
|
12
|
+
level=logging.INFO,
|
|
13
|
+
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
14
|
+
handlers=[logging.StreamHandler(sys.stderr)],
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger("domain_checker")
|
|
18
|
+
|
|
19
|
+
# Constants
|
|
20
|
+
RDAP_BOOTSTRAP_URL = "https://data.iana.org/rdap/dns.json"
|
|
21
|
+
USER_AGENT = "DomainCheckerBot/1.0"
|
|
22
|
+
|
|
23
|
+
# Top TLDs to check
|
|
24
|
+
TOP_TLDS = [
|
|
25
|
+
"com",
|
|
26
|
+
"net",
|
|
27
|
+
"org",
|
|
28
|
+
"io",
|
|
29
|
+
"co",
|
|
30
|
+
"app",
|
|
31
|
+
"dev",
|
|
32
|
+
"ai",
|
|
33
|
+
"me",
|
|
34
|
+
"info",
|
|
35
|
+
"xyz",
|
|
36
|
+
"online",
|
|
37
|
+
"site",
|
|
38
|
+
"tech",
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class DomainCheckerApp(APIApplication):
|
|
43
|
+
"""
|
|
44
|
+
Base class for Universal MCP Applications.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
def __init__(self, integration: Integration = None, **kwargs) -> None:
|
|
48
|
+
super().__init__(name="domain-checker", integration=integration, **kwargs)
|
|
49
|
+
|
|
50
|
+
async def get_rdap_data(self, domain: str) -> dict[str, Any] | None:
|
|
51
|
+
"""Get RDAP data for a domain"""
|
|
52
|
+
try:
|
|
53
|
+
# Special case for .ch and .li domains
|
|
54
|
+
tld = domain.split(".")[-1].lower()
|
|
55
|
+
if tld in ["ch", "li"]:
|
|
56
|
+
rdap_url = f"https://rdap.nic.{tld}/domain/{domain}"
|
|
57
|
+
# Use common RDAP servers for known TLDs
|
|
58
|
+
elif tld in ["com", "net"]:
|
|
59
|
+
rdap_url = f"https://rdap.verisign.com/{tld}/v1/domain/{domain}"
|
|
60
|
+
elif tld == "org":
|
|
61
|
+
rdap_url = (
|
|
62
|
+
f"https://rdap.publicinterestregistry.org/rdap/domain/{domain}"
|
|
63
|
+
)
|
|
64
|
+
else:
|
|
65
|
+
rdap_url = f"https://rdap.org/domain/{domain}"
|
|
66
|
+
|
|
67
|
+
headers = {"Accept": "application/rdap+json", "User-Agent": USER_AGENT}
|
|
68
|
+
|
|
69
|
+
response = requests.get(rdap_url, headers=headers, timeout=5)
|
|
70
|
+
if response.status_code == 200:
|
|
71
|
+
return response.json()
|
|
72
|
+
return None
|
|
73
|
+
except Exception as e:
|
|
74
|
+
logger.error(f"RDAP error for {domain}: {e}")
|
|
75
|
+
return None
|
|
76
|
+
|
|
77
|
+
async def check_dns(self, domain: str) -> bool:
|
|
78
|
+
"""Check if a domain has DNS records"""
|
|
79
|
+
try:
|
|
80
|
+
dns.resolver.resolve(domain, "A")
|
|
81
|
+
return True
|
|
82
|
+
except:
|
|
83
|
+
try:
|
|
84
|
+
dns.resolver.resolve(domain, "NS")
|
|
85
|
+
return True
|
|
86
|
+
except:
|
|
87
|
+
return False
|
|
88
|
+
|
|
89
|
+
async def check_domain_tool(self, domain: str) -> dict[str, Any]:
|
|
90
|
+
"""
|
|
91
|
+
Checks if a domain is available for registration by querying DNS records and RDAP data.
|
|
92
|
+
|
|
93
|
+
This method performs a comprehensive domain availability check by first checking DNS records
|
|
94
|
+
and then querying RDAP (Registration Data Access Protocol) servers for detailed registration
|
|
95
|
+
information. It provides detailed information about registered domains including registrar,
|
|
96
|
+
registration date, and expiration date.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
domain: String representing the domain name to check (e.g., "example.com")
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
Dictionary containing domain availability information with the following keys:
|
|
103
|
+
- domain: The domain name that was checked
|
|
104
|
+
- status: "Registered" or "Available"
|
|
105
|
+
- registrar: Name of the registrar (or None/Unknown if not registered)
|
|
106
|
+
- registration_date: Domain registration date (or None/Unknown)
|
|
107
|
+
- expiration_date: Domain expiration date (or None/Unknown)
|
|
108
|
+
- has_dns: Boolean indicating if DNS records exist
|
|
109
|
+
- rdap_data_available: Boolean indicating if RDAP data was retrieved
|
|
110
|
+
- note: Additional information when needed
|
|
111
|
+
|
|
112
|
+
Raises:
|
|
113
|
+
DNSException: When DNS resolution fails due to network issues or invalid domain format
|
|
114
|
+
RequestException: When RDAP queries fail due to network issues or server errors
|
|
115
|
+
ValueError: When the domain parameter is empty or contains invalid characters
|
|
116
|
+
|
|
117
|
+
Tags:
|
|
118
|
+
domain, availability, registration, dns, rdap, important
|
|
119
|
+
"""
|
|
120
|
+
logger.info(f"Checking domain: {domain}")
|
|
121
|
+
|
|
122
|
+
# First check DNS
|
|
123
|
+
has_dns = await self.check_dns(domain)
|
|
124
|
+
|
|
125
|
+
if has_dns:
|
|
126
|
+
# Domain exists, get RDAP data if possible
|
|
127
|
+
rdap_data = await self.get_rdap_data(domain)
|
|
128
|
+
|
|
129
|
+
if rdap_data:
|
|
130
|
+
# Extract data from RDAP
|
|
131
|
+
registrar = "Unknown"
|
|
132
|
+
reg_date = "Unknown"
|
|
133
|
+
exp_date = "Unknown"
|
|
134
|
+
|
|
135
|
+
# Extract registrar
|
|
136
|
+
entities = rdap_data.get("entities", [])
|
|
137
|
+
for entity in entities:
|
|
138
|
+
if "registrar" in entity.get("roles", []):
|
|
139
|
+
vcard = entity.get("vcardArray", [])
|
|
140
|
+
if len(vcard) > 1 and isinstance(vcard[1], list):
|
|
141
|
+
for entry in vcard[1]:
|
|
142
|
+
if entry[0] in ["fn", "org"] and len(entry) > 3:
|
|
143
|
+
registrar = entry[3]
|
|
144
|
+
break
|
|
145
|
+
|
|
146
|
+
# Extract dates
|
|
147
|
+
events = rdap_data.get("events", [])
|
|
148
|
+
for event in events:
|
|
149
|
+
if event.get("eventAction") == "registration":
|
|
150
|
+
reg_date = event.get("eventDate", "Unknown")
|
|
151
|
+
elif event.get("eventAction") == "expiration":
|
|
152
|
+
exp_date = event.get("eventDate", "Unknown")
|
|
153
|
+
|
|
154
|
+
return {
|
|
155
|
+
"domain": domain,
|
|
156
|
+
"status": "Registered",
|
|
157
|
+
"registrar": registrar,
|
|
158
|
+
"registration_date": reg_date,
|
|
159
|
+
"expiration_date": exp_date,
|
|
160
|
+
"has_dns": True,
|
|
161
|
+
"rdap_data_available": True,
|
|
162
|
+
}
|
|
163
|
+
else:
|
|
164
|
+
return {
|
|
165
|
+
"domain": domain,
|
|
166
|
+
"status": "Registered",
|
|
167
|
+
"registrar": "Unknown",
|
|
168
|
+
"registration_date": "Unknown",
|
|
169
|
+
"expiration_date": "Unknown",
|
|
170
|
+
"has_dns": True,
|
|
171
|
+
"rdap_data_available": False,
|
|
172
|
+
"note": "Domain has DNS records but RDAP data couldn't be retrieved",
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
# Try RDAP one more time even if DNS not found
|
|
176
|
+
rdap_data = await self.get_rdap_data(domain)
|
|
177
|
+
if rdap_data:
|
|
178
|
+
return {
|
|
179
|
+
"domain": domain,
|
|
180
|
+
"status": "Registered",
|
|
181
|
+
"registrar": "Unknown",
|
|
182
|
+
"registration_date": "Unknown",
|
|
183
|
+
"expiration_date": "Unknown",
|
|
184
|
+
"has_dns": False,
|
|
185
|
+
"rdap_data_available": True,
|
|
186
|
+
"note": "Domain found in RDAP registry",
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
# If we get here, the domain is likely available
|
|
190
|
+
return {
|
|
191
|
+
"domain": domain,
|
|
192
|
+
"status": "Available",
|
|
193
|
+
"registrar": None,
|
|
194
|
+
"registration_date": None,
|
|
195
|
+
"expiration_date": None,
|
|
196
|
+
"has_dns": False,
|
|
197
|
+
"rdap_data_available": False,
|
|
198
|
+
"note": "No DNS records or RDAP data found",
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
async def check_tlds_tool(self, keyword: str) -> dict[str, Any]:
|
|
202
|
+
"""
|
|
203
|
+
Checks a keyword across multiple top-level domains (TLDs) to find available domain names.
|
|
204
|
+
|
|
205
|
+
This method systematically checks a given keyword across 14 popular TLDs including .com, .net,
|
|
206
|
+
.org, .io, .co, .app, .dev, .ai, .me, .info, .xyz, .online, .site, and .tech. It performs
|
|
207
|
+
DNS lookups and RDAP queries to determine domain availability and provides a comprehensive
|
|
208
|
+
report of available and taken domains.
|
|
209
|
+
|
|
210
|
+
Args:
|
|
211
|
+
keyword: String representing the keyword to check across TLDs (e.g., "myapp")
|
|
212
|
+
|
|
213
|
+
Returns:
|
|
214
|
+
Dictionary containing TLD availability information with the following keys:
|
|
215
|
+
- keyword: The keyword that was checked
|
|
216
|
+
- tlds_checked: Number of TLDs checked (14)
|
|
217
|
+
- available_count: Number of available domains found
|
|
218
|
+
- taken_count: Number of taken domains found
|
|
219
|
+
- available_domains: List of available domain names
|
|
220
|
+
- taken_domains: List of taken domain names
|
|
221
|
+
- tlds_checked_list: Complete list of TLDs that were checked
|
|
222
|
+
|
|
223
|
+
Raises:
|
|
224
|
+
DNSException: When DNS resolution fails due to network issues or invalid domain format
|
|
225
|
+
RequestException: When RDAP queries fail due to network issues or server errors
|
|
226
|
+
ValueError: When the keyword parameter is empty or contains invalid characters
|
|
227
|
+
|
|
228
|
+
Tags:
|
|
229
|
+
tld, keyword, domain-search, availability, bulk-check, important
|
|
230
|
+
"""
|
|
231
|
+
logger.info(f"Checking keyword: {keyword} across TLDs")
|
|
232
|
+
|
|
233
|
+
available = []
|
|
234
|
+
taken = []
|
|
235
|
+
|
|
236
|
+
# Check each TLD in sequence
|
|
237
|
+
for tld in TOP_TLDS:
|
|
238
|
+
domain = f"{keyword}.{tld}"
|
|
239
|
+
has_dns = await self.check_dns(domain)
|
|
240
|
+
|
|
241
|
+
if not has_dns:
|
|
242
|
+
# Double-check with RDAP if no DNS
|
|
243
|
+
rdap_data = await self.get_rdap_data(domain)
|
|
244
|
+
if not rdap_data:
|
|
245
|
+
available.append(domain)
|
|
246
|
+
else:
|
|
247
|
+
taken.append(domain)
|
|
248
|
+
else:
|
|
249
|
+
taken.append(domain)
|
|
250
|
+
|
|
251
|
+
return {
|
|
252
|
+
"keyword": keyword,
|
|
253
|
+
"tlds_checked": len(TOP_TLDS),
|
|
254
|
+
"available_count": len(available),
|
|
255
|
+
"taken_count": len(taken),
|
|
256
|
+
"available_domains": available,
|
|
257
|
+
"taken_domains": taken,
|
|
258
|
+
"tlds_checked_list": TOP_TLDS,
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
def list_tools(self):
|
|
262
|
+
"""
|
|
263
|
+
Lists the available tools (methods) for this application.
|
|
264
|
+
"""
|
|
265
|
+
return [self.check_domain_tool, self.check_tlds_tool]
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# E2b MCP Server
|
|
2
|
+
|
|
3
|
+
An MCP Server for the E2b API.
|
|
4
|
+
|
|
5
|
+
## 🛠️ Tool List
|
|
6
|
+
|
|
7
|
+
This is automatically generated from OpenAPI schema for the E2b API.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
| Tool | Description |
|
|
11
|
+
|------|-------------|
|
|
12
|
+
| `execute_python_code` | Executes Python code in a sandbox environment and returns the formatted output |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .app import E2bApp
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
from typing import Annotated, Any
|
|
2
|
+
|
|
3
|
+
from loguru import logger
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
from e2b_code_interpreter import Sandbox
|
|
7
|
+
|
|
8
|
+
except ImportError:
|
|
9
|
+
Sandbox = None
|
|
10
|
+
logger.error(
|
|
11
|
+
"Failed to import E2B Sandbox. Please ensure 'e2b_code_interpreter' is installed."
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
from universal_mcp.applications.application import APIApplication
|
|
15
|
+
from universal_mcp.exceptions import NotAuthorizedError, ToolError
|
|
16
|
+
from universal_mcp.integrations import Integration
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class E2bApp(APIApplication):
|
|
20
|
+
"""
|
|
21
|
+
Application for interacting with the E2B (Code Interpreter Sandbox) platform.
|
|
22
|
+
Provides tools to execute Python code in a sandboxed environment.
|
|
23
|
+
Authentication is handled by the configured Integration, fetching the API key.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(self, integration: Integration | None = None, **kwargs: Any) -> None:
|
|
27
|
+
super().__init__(name="e2b", integration=integration, **kwargs)
|
|
28
|
+
self._e2b_api_key: str | None = None # Cache for the API key
|
|
29
|
+
if Sandbox is None:
|
|
30
|
+
logger.warning(
|
|
31
|
+
"E2B Sandbox SDK is not available. E2B tools will not function."
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
@property
|
|
35
|
+
def e2b_api_key(self) -> str:
|
|
36
|
+
"""
|
|
37
|
+
Retrieves and caches the E2B API key from the integration.
|
|
38
|
+
Raises NotAuthorizedError if the key cannot be obtained.
|
|
39
|
+
"""
|
|
40
|
+
if self._e2b_api_key is None:
|
|
41
|
+
if not self.integration:
|
|
42
|
+
logger.error("E2B App: Integration not configured.")
|
|
43
|
+
raise NotAuthorizedError(
|
|
44
|
+
"Integration not configured for E2B App. Cannot retrieve API key."
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
credentials = self.integration.get_credentials()
|
|
49
|
+
except NotAuthorizedError as e:
|
|
50
|
+
logger.error(
|
|
51
|
+
f"E2B App: Authorization error when fetching credentials: {e.message}"
|
|
52
|
+
)
|
|
53
|
+
raise # Re-raise the original NotAuthorizedError
|
|
54
|
+
except Exception as e:
|
|
55
|
+
logger.error(
|
|
56
|
+
f"E2B App: Unexpected error when fetching credentials: {e}",
|
|
57
|
+
exc_info=True,
|
|
58
|
+
)
|
|
59
|
+
raise NotAuthorizedError(f"Failed to get E2B credentials: {e}")
|
|
60
|
+
|
|
61
|
+
api_key = (
|
|
62
|
+
credentials.get("api_key")
|
|
63
|
+
or credentials.get("API_KEY") # Check common variations
|
|
64
|
+
or credentials.get("apiKey")
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
if not api_key:
|
|
68
|
+
logger.error("E2B App: API key not found in credentials.")
|
|
69
|
+
action_message = "API key for E2B is missing. Please ensure it's set in the store via MCP frontend or configuration."
|
|
70
|
+
if hasattr(self.integration, "authorize") and callable(
|
|
71
|
+
self.integration.authorize
|
|
72
|
+
):
|
|
73
|
+
try:
|
|
74
|
+
auth_details = self.integration.authorize()
|
|
75
|
+
if isinstance(auth_details, str):
|
|
76
|
+
action_message = auth_details
|
|
77
|
+
elif isinstance(auth_details, dict) and "url" in auth_details:
|
|
78
|
+
action_message = (
|
|
79
|
+
f"Please authorize via: {auth_details['url']}"
|
|
80
|
+
)
|
|
81
|
+
elif (
|
|
82
|
+
isinstance(auth_details, dict) and "message" in auth_details
|
|
83
|
+
):
|
|
84
|
+
action_message = auth_details["message"]
|
|
85
|
+
except Exception as auth_e:
|
|
86
|
+
logger.warning(
|
|
87
|
+
f"Could not retrieve specific authorization action for E2B: {auth_e}"
|
|
88
|
+
)
|
|
89
|
+
raise NotAuthorizedError(action_message)
|
|
90
|
+
|
|
91
|
+
self._e2b_api_key = api_key
|
|
92
|
+
logger.info("E2B API Key successfully retrieved and cached.")
|
|
93
|
+
return self._e2b_api_key
|
|
94
|
+
|
|
95
|
+
def _format_execution_output(self, logs: Any) -> str:
|
|
96
|
+
"""Helper function to format the E2B execution logs nicely."""
|
|
97
|
+
output_parts = []
|
|
98
|
+
|
|
99
|
+
# Safely access stdout and stderr
|
|
100
|
+
stdout_log = getattr(logs, "stdout", [])
|
|
101
|
+
stderr_log = getattr(logs, "stderr", [])
|
|
102
|
+
|
|
103
|
+
if stdout_log:
|
|
104
|
+
stdout_content = "".join(stdout_log).strip()
|
|
105
|
+
if stdout_content:
|
|
106
|
+
output_parts.append(f"{stdout_content}")
|
|
107
|
+
|
|
108
|
+
if stderr_log:
|
|
109
|
+
stderr_content = "".join(stderr_log).strip()
|
|
110
|
+
if stderr_content:
|
|
111
|
+
output_parts.append(f"--- ERROR ---\n{stderr_content}")
|
|
112
|
+
|
|
113
|
+
if not output_parts:
|
|
114
|
+
return "Execution finished with no output (stdout/stderr)."
|
|
115
|
+
return "\n\n".join(output_parts)
|
|
116
|
+
|
|
117
|
+
def execute_python_code(
|
|
118
|
+
self, code: Annotated[str, "The Python code to execute."]
|
|
119
|
+
) -> str:
|
|
120
|
+
"""
|
|
121
|
+
Executes Python code in a sandbox environment and returns the formatted output.
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
code: String containing the Python code to be executed in the sandbox.
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
A string containing the formatted execution output/logs from running the code.
|
|
128
|
+
|
|
129
|
+
Raises:
|
|
130
|
+
ToolError: When there are issues with sandbox initialization or code execution,
|
|
131
|
+
or if the E2B SDK is not installed.
|
|
132
|
+
NotAuthorizedError: When API key authentication fails during sandbox setup.
|
|
133
|
+
ValueError: When provided code string is empty or invalid.
|
|
134
|
+
|
|
135
|
+
Tags:
|
|
136
|
+
execute, sandbox, code-execution, security, important
|
|
137
|
+
"""
|
|
138
|
+
if Sandbox is None:
|
|
139
|
+
logger.error(
|
|
140
|
+
"E2B Sandbox SDK is not available. Cannot execute_python_code."
|
|
141
|
+
)
|
|
142
|
+
raise ToolError(
|
|
143
|
+
"E2B Sandbox SDK (e2b_code_interpreter) is not installed or failed to import."
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
if not code or not isinstance(code, str):
|
|
147
|
+
raise ValueError("Provided code must be a non-empty string.")
|
|
148
|
+
|
|
149
|
+
logger.info("Attempting to execute Python code in E2B Sandbox.")
|
|
150
|
+
try:
|
|
151
|
+
current_api_key = self.e2b_api_key
|
|
152
|
+
|
|
153
|
+
with Sandbox(api_key=current_api_key) as sandbox:
|
|
154
|
+
logger.info(
|
|
155
|
+
f"E2B Sandbox (ID: {sandbox.sandbox_id}) initialized. Running code."
|
|
156
|
+
)
|
|
157
|
+
execution = sandbox.run_code(
|
|
158
|
+
code=code
|
|
159
|
+
) # run_python is the method in e2b-code-interpreter
|
|
160
|
+
result = self._format_execution_output(
|
|
161
|
+
execution.logs
|
|
162
|
+
) # execution_result directly has logs
|
|
163
|
+
logger.info("E2B code execution successful.")
|
|
164
|
+
return result
|
|
165
|
+
except NotAuthorizedError: # Re-raise if caught from self.e2b_api_key
|
|
166
|
+
raise
|
|
167
|
+
except Exception as e:
|
|
168
|
+
if (
|
|
169
|
+
"authentication" in str(e).lower()
|
|
170
|
+
or "api key" in str(e).lower()
|
|
171
|
+
or "401" in str(e)
|
|
172
|
+
or "unauthorized" in str(e).lower()
|
|
173
|
+
):
|
|
174
|
+
logger.error(
|
|
175
|
+
f"E2B authentication/authorization error: {e}", exc_info=True
|
|
176
|
+
)
|
|
177
|
+
raise NotAuthorizedError(
|
|
178
|
+
f"E2B authentication failed or access denied: {e}"
|
|
179
|
+
)
|
|
180
|
+
logger.error(f"Error during E2B code execution: {e}", exc_info=True)
|
|
181
|
+
raise ToolError(f"E2B code execution failed: {e}")
|
|
182
|
+
|
|
183
|
+
def list_tools(self) -> list[callable]:
|
|
184
|
+
"""Lists the tools available from the E2bApp."""
|
|
185
|
+
return [
|
|
186
|
+
self.execute_python_code,
|
|
187
|
+
]
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# ElevenlabsApp MCP Server
|
|
2
|
+
|
|
3
|
+
An MCP Server for the ElevenlabsApp API.
|
|
4
|
+
|
|
5
|
+
## 🛠️ Tool List
|
|
6
|
+
|
|
7
|
+
This is automatically generated from OpenAPI schema for the ElevenlabsApp API.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
| Tool | Description |
|
|
11
|
+
|------|-------------|
|
|
12
|
+
| `get_generated_items` | Retrieves historical data based on specified parameters, including page size and voice ID, using the "GET" method at the "/v1/history" endpoint. |
|
|
13
|
+
| `get_history_item_by_id` | Retrieves a specific history item by its identifier using the API defined at "/v1/history/{history_item_id}" with the GET method. |
|
|
14
|
+
| `delete_history_item` | Deletes a specific history item identified by its ID using the DELETE method. |
|
|
15
|
+
| `get_audio_from_history_item` | Retrieves audio data for a specific history item identified by `{history_item_id}` using the `GET` method at the `/v1/history/{history_item_id}/audio` endpoint. |
|
|
16
|
+
| `download_history_items` | Initiates a historical data download process and returns a success status upon completion. |
|
|
17
|
+
| `delete_sample` | Deletes a specific voice sample identified by the `sample_id` from a voice with the given `voice_id` using the DELETE method. |
|
|
18
|
+
| `get_audio_from_sample` | Retrieves the audio file for a specific sample associated with a given voice using the specified voice_id and sample_id. |
|
|
19
|
+
| `convert` | Converts text into speech using a specified voice, allowing for optimization of streaming latency and selection of output format. |
|
|
20
|
+
| `text_to_speech_with_timestamps` | Generates speech from text with precise character or word-level timing information using the specified voice, supporting audio-text synchronization through timestamps. |
|
|
21
|
+
| `convert_as_stream` | Converts text to speech stream using the specified voice ID with configurable latency and output format. |
|
|
22
|
+
| `stream_text_with_timestamps` | Converts text to speech using the specified voice ID, streaming the audio output with timestamps. |
|
|
23
|
+
| `voice_generation_parameters` | Retrieves the parameters required for generating voice using the specified API endpoint. |
|
|
24
|
+
| `generate_arandom_voice` | Generates an audio file by converting text into speech using a specified voice, allowing for customizable voice selection and text input. |
|
|
25
|
+
| `create_voice_model` | Generates a custom voice using the provided parameters via the "/v1/voice-generation/create-voice" endpoint by sending a POST request, allowing users to create unique voice models. |
|
|
26
|
+
| `create_previews` | Generates a voice preview from a given text prompt using the ElevenLabs API. |
|
|
27
|
+
| `create_voice_from_preview` | Creates a new voice entry in the voice library using a generated preview ID and returns voice details. |
|
|
28
|
+
| `get_user_subscription_info` | Retrieves the user's subscription details from the API. |
|
|
29
|
+
| `get_user_info` | Retrieves user information from the API. |
|
|
30
|
+
| `get_voices` | Retrieves a list of voices using the "GET" method at the "/v1/voices" API endpoint. |
|
|
31
|
+
| `get_default_voice_settings` | Retrieves the default voice settings using the "GET" method at the "/v1/voices/settings/default" endpoint. |
|
|
32
|
+
| `get_voice_settings` | Retrieves voice settings for a specific voice identified by `{voice_id}` using the "GET" method, returning the current configuration for that voice. |
|
|
33
|
+
| `get_voice` | Retrieves the details of a specific voice by its ID using the "GET" method at the "/v1/voices/{voice_id}" endpoint. |
|
|
34
|
+
| `delete_voice` | Deletes a voice with the specified ID using the DELETE method at the "/v1/voices/{voice_id}" endpoint. |
|
|
35
|
+
| `edit_voice_settings` | Updates voice settings for a specified voice ID and returns a success status. |
|
|
36
|
+
| `add_voice` | Adds a new voice entry to the voices collection using the provided data. |
|
|
37
|
+
| `edit_voice` | Updates the specified voice by ID using a POST request and returns a success status upon completion. |
|
|
38
|
+
| `add_sharing_voice` | Adds a voice associated with a public user ID and voice ID using the specified API endpoint. |
|
|
39
|
+
| `get_shared_voices` | Retrieves a list of shared voices filtered by parameters like gender and language, with pagination support via page_size. |
|
|
40
|
+
| `get_similar_library_voices` | Generates a list of similar voices using the POST method at the "/v1/similar-voices" endpoint. |
|
|
41
|
+
| `get_aprofile_page` | Retrieves a unified customer profile by handle and returns the associated attributes, identifiers, and traits. |
|
|
42
|
+
| `get_projects` | Retrieves a list of projects using the API defined at the "/v1/projects" endpoint via the GET method. |
|
|
43
|
+
| `add_project` | Creates a new project and returns a status message. |
|
|
44
|
+
| `get_project_by_id` | Retrieves information for a specific project identified by `{project_id}` using the API endpoint at "/v1/projects/{project_id}" via the GET method. |
|
|
45
|
+
| `edit_basic_project_info` | Creates a new project resource by sending data to the specified project identifier using the POST method at the "/v1/projects/{project_id}" endpoint. |
|
|
46
|
+
| `delete_project` | Deletes the specified project and returns a success status upon completion. |
|
|
47
|
+
| `convert_project` | Converts a specified project identified by project_id and returns the conversion result. |
|
|
48
|
+
| `get_project_snapshots` | Retrieves a list of snapshots associated with a specified project. |
|
|
49
|
+
| `streams_archive_with_project_audio` | Archives a project snapshot using the specified project ID and snapshot ID and returns a success status. |
|
|
50
|
+
| `add_chapter_to_aproject` | Adds a new chapter to a specified project using the provided project identifier and returns a success status upon completion. |
|
|
51
|
+
| `update_project_pronunciations` | Updates pronunciation dictionaries for a specified project using the POST method, returning a successful status message upon completion. |
|
|
52
|
+
| `get_chapters` | Retrieves a chapter for a specified project by ID using the GET method. |
|
|
53
|
+
| `get_chapter_by_id` | Retrieves a specific chapter within a project identified by project_id and chapter_id. |
|
|
54
|
+
| `delete_chapter` | Deletes a specific chapter within a project using the "DELETE" method. |
|
|
55
|
+
| `convert_chapter` | Converts a chapter in a project using the POST method and returns a response upon successful conversion. |
|
|
56
|
+
| `get_chapter_snapshots` | Retrieves a snapshot for a specific chapter within a project using the provided project and chapter IDs. |
|
|
57
|
+
| `stream_chapter_audio` | Streams data from a specific chapter snapshot in a project using the API and returns a response indicating success. |
|
|
58
|
+
| `dub_avideo_or_an_audio_file` | Initiates a dubbing process and returns a status message using the API defined at the "/v1/dubbing" endpoint via the POST method. |
|
|
59
|
+
| `get_dubbing_project_metadata` | Retrieves the details of a specific dubbing job using the provided dubbing ID. |
|
|
60
|
+
| `delete_dubbing_project` | Deletes a dubbing project with the specified ID and returns a success status upon completion. |
|
|
61
|
+
| `get_transcript_for_dub` | Retrieves the transcript for a specific dubbing task in the requested language using the "GET" method. |
|
|
62
|
+
| `get_models` | Retrieves a list of models using the GET method at the "/v1/models" endpoint. |
|
|
63
|
+
| `post_audio_native` | Processes audio data using the audio-native API and returns a response. |
|
|
64
|
+
| `get_characters_usage_metrics` | Retrieves character statistics within a specified time frame using the start and end Unix timestamps provided in the query parameters. |
|
|
65
|
+
| `add_apronunciation_dictionary` | Creates a pronunciation dictionary from a lexicon file and returns its ID and metadata. |
|
|
66
|
+
| `add_rules_to_dictionary` | Adds pronunciation rules to a specific pronunciation dictionary identified by its ID using the POST method. |
|
|
67
|
+
| `remove_pronunciation_rules` | Removes specified pronunciation rules from a pronunciation dictionary using a POST request. |
|
|
68
|
+
| `get_dictionary_version_file` | Retrieves and downloads a specific version of a pronunciation dictionary file using its dictionary ID and version ID. |
|
|
69
|
+
| `get_pronunciation_dictionary` | Retrieves a specific pronunciation dictionary by its ID using the "GET" method from the "/v1/pronunciation-dictionaries/{pronunciation_dictionary_id}" endpoint. |
|
|
70
|
+
| `get_pronunciation_dictionaries` | Retrieves a list of pronunciation dictionaries using the GET method at the "/v1/pronunciation-dictionaries" endpoint, allowing users to specify the number of items per page via the "page_size" query parameter. |
|
|
71
|
+
| `invite_user` | Invites a user to join a workspace by sending an invitation, allowing them to access the specified workspace upon acceptance. |
|
|
72
|
+
| `delete_existing_invitation` | Deletes a workspace invite and returns a success response upon completion. |
|
|
73
|
+
| `update_member` | Adds members to a workspace and returns the updated member list upon success. |
|
|
74
|
+
| `get_signed_url` | Generates a signed URL for initiating a conversation with a specific conversational AI agent, identified by the provided `agent_id`, using the ElevenLabs API. |
|
|
75
|
+
| `create_agent` | Creates a conversational AI agent with specified configuration settings and returns the agent details. |
|
|
76
|
+
| `get_agent` | Retrieves information about a specific conversational AI agent by its unique identifier using the GET method at the "/v1/convai/agents/{agent_id}" API endpoint. |
|
|
77
|
+
| `delete_agent` | Deletes a specified Conversational AI agent using the DELETE method. |
|
|
78
|
+
| `patches_an_agent_settings` | Updates an existing conversational AI agent's settings using the specified agent ID, allowing changes to properties such as the agent's name and tool configurations. |
|
|
79
|
+
| `get_agent_widget_config` | Retrieves and configures the Convai widget for the specified agent, but the provided details do not specify the exact functionality of this specific endpoint, suggesting it may relate to integrating or customizing Convai's character interaction capabilities. |
|
|
80
|
+
| `get_shareable_agent_link` | Retrieves and establishes a link for a Convai agent using the specified agent ID, facilitating integration or connectivity operations. |
|
|
81
|
+
| `post_agent_avatar` | Creates and configures a Convai avatar for a specific agent using the POST method, though the exact details of this endpoint are not provided in the available documentation. |
|
|
82
|
+
| `get_agent_knowledge_base` | Retrieves specific documentation for a knowledge base associated with an agent in Convai. |
|
|
83
|
+
| `add_agent_secret` | Adds a secret to a specified conversational AI agent through the API and returns a status confirmation. |
|
|
84
|
+
| `add_to_agent_sknowledge_base` | Adds new content to an agent's knowledge base by uploading a file or resource, which can be used to enhance the agent's conversational capabilities. |
|
|
85
|
+
| `get_agents_page` | Retrieves a list of conversational AI agents available in the Convai system. |
|
|
86
|
+
| `get_conversations` | Retrieves conversation history for a specified agent ID. |
|
|
87
|
+
| `get_conversation_details` | Retrieves and formats the details of a specific conversation based on the provided conversation ID. |
|
|
88
|
+
| `get_conversation_audio` | Retrieves the audio from a specific conversation using the ElevenLabs Conversational AI API. |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .app import ElevenlabsApp
|