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,21 @@
|
|
|
1
|
+
# RetellApp MCP Server
|
|
2
|
+
|
|
3
|
+
An MCP Server for the RetellApp API.
|
|
4
|
+
|
|
5
|
+
## 🛠️ Tool List
|
|
6
|
+
|
|
7
|
+
This is automatically generated from OpenAPI schema for the RetellApp API.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
| Tool | Description |
|
|
11
|
+
|------|-------------|
|
|
12
|
+
| `get_v2_get_call_by_call_id` | Retrieve detailed information about a specific call using its call ID. |
|
|
13
|
+
| `post_v2_create_phone_call` | Initiates a phone call using a JSON payload with specified parameters. |
|
|
14
|
+
| `post_v2_create_web_call` | Creates a web call via a POST request to the v2 endpoint with specified agent ID and optional metadata or dynamic variables. |
|
|
15
|
+
| `get_get_voice_by_voice_id` | Fetches voice details based on the provided voice ID. |
|
|
16
|
+
| `post_v2_list_calls` | Sends a POST request to list call records with optional filtering, sorting, pagination, and limits. |
|
|
17
|
+
| `post_create_phone_number` | Creates a phone number with the specified area code and optional parameters. |
|
|
18
|
+
| `get_get_phone_number_by_phone_number` | Retrieves phone number details by making a GET request to the API endpoint using the provided phone number. |
|
|
19
|
+
| `get_list_phone_numbers` | Retrieves a list of phone numbers from the remote API. |
|
|
20
|
+
| `patch_update_phone_number_by_phone_number` | Updates the information of a phone number by its number, allowing optional modification of inbound and outbound agent IDs and nickname. |
|
|
21
|
+
| `delete_delete_phone_number_by_phone_number` | Deletes a phone number resource by its phone number identifier via an HTTP DELETE request. |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .app import RetellApp
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from universal_mcp.applications.application import APIApplication
|
|
4
|
+
from universal_mcp.integrations import Integration
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class RetellApp(APIApplication):
|
|
8
|
+
def __init__(self, integration: Integration = None, **kwargs) -> None:
|
|
9
|
+
super().__init__(name="retell", integration=integration, **kwargs)
|
|
10
|
+
self.base_url = "https://api.retellai.com"
|
|
11
|
+
|
|
12
|
+
def get_v2_get_call_by_call_id(self, call_id) -> dict[str, Any]:
|
|
13
|
+
"""
|
|
14
|
+
Retrieve detailed information about a specific call using its call ID.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
call_id: The unique identifier of the call to retrieve. Must not be None.
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
A dictionary containing the details of the requested call as returned by the API.
|
|
21
|
+
|
|
22
|
+
Raises:
|
|
23
|
+
ValueError: If the 'call_id' parameter is None.
|
|
24
|
+
HTTPError: If the HTTP request to the API fails or returns an unsuccessful status code.
|
|
25
|
+
|
|
26
|
+
Tags:
|
|
27
|
+
get, call, api, important
|
|
28
|
+
"""
|
|
29
|
+
if call_id is None:
|
|
30
|
+
raise ValueError("Missing required parameter 'call_id'")
|
|
31
|
+
url = f"{self.base_url}/v2/get-call/{call_id}"
|
|
32
|
+
query_params = {}
|
|
33
|
+
response = self._get(url, params=query_params)
|
|
34
|
+
response.raise_for_status()
|
|
35
|
+
return response.json()
|
|
36
|
+
|
|
37
|
+
def post_v2_create_phone_call(
|
|
38
|
+
self,
|
|
39
|
+
from_number,
|
|
40
|
+
to_number,
|
|
41
|
+
override_agent_id=None,
|
|
42
|
+
metadata=None,
|
|
43
|
+
retell_llm_dynamic_variables=None,
|
|
44
|
+
) -> dict[str, Any]:
|
|
45
|
+
"""
|
|
46
|
+
Initiates a phone call using a JSON payload with specified parameters.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
from_number: The source number for the call.
|
|
50
|
+
to_number: The destination number for the call.
|
|
51
|
+
override_agent_id: Optional ID for overriding the default agent.
|
|
52
|
+
metadata: Optional metadata to be included with the call request.
|
|
53
|
+
retell_llm_dynamic_variables: Optional dynamic variables for LLM (Large Language Model) processing.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
A dictionary containing the response data for the created phone call.
|
|
57
|
+
|
|
58
|
+
Raises:
|
|
59
|
+
ValueError: Raised if either 'from_number' or 'to_number' is missing.
|
|
60
|
+
|
|
61
|
+
Tags:
|
|
62
|
+
initiate, create-call, async_job, management, important
|
|
63
|
+
"""
|
|
64
|
+
if from_number is None:
|
|
65
|
+
raise ValueError("Missing required parameter 'from_number'")
|
|
66
|
+
if to_number is None:
|
|
67
|
+
raise ValueError("Missing required parameter 'to_number'")
|
|
68
|
+
request_body = {
|
|
69
|
+
"from_number": from_number,
|
|
70
|
+
"to_number": to_number,
|
|
71
|
+
"override_agent_id": override_agent_id,
|
|
72
|
+
"metadata": metadata,
|
|
73
|
+
"retell_llm_dynamic_variables": retell_llm_dynamic_variables,
|
|
74
|
+
}
|
|
75
|
+
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
76
|
+
url = f"{self.base_url}/v2/create-phone-call"
|
|
77
|
+
query_params = {}
|
|
78
|
+
response = self._post(url, data=request_body, params=query_params)
|
|
79
|
+
response.raise_for_status()
|
|
80
|
+
return response.json()
|
|
81
|
+
|
|
82
|
+
def post_v2_create_web_call(
|
|
83
|
+
self, agent_id, metadata=None, retell_llm_dynamic_variables=None
|
|
84
|
+
) -> dict[str, Any]:
|
|
85
|
+
"""
|
|
86
|
+
Creates a web call via a POST request to the v2 endpoint with specified agent ID and optional metadata or dynamic variables.
|
|
87
|
+
|
|
88
|
+
Args:
|
|
89
|
+
agent_id: Required identifier of the agent initiating the web call.
|
|
90
|
+
metadata: Optional metadata to include in the web call request.
|
|
91
|
+
retell_llm_dynamic_variables: Optional dynamic variables for LLN model customization.
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
A dictionary containing the response details from the web call creation request.
|
|
95
|
+
|
|
96
|
+
Raises:
|
|
97
|
+
ValueError: Raised when the required 'agent_id' parameter is missing.
|
|
98
|
+
|
|
99
|
+
Tags:
|
|
100
|
+
create, web-calls, api-call
|
|
101
|
+
"""
|
|
102
|
+
if agent_id is None:
|
|
103
|
+
raise ValueError("Missing required parameter 'agent_id'")
|
|
104
|
+
request_body = {
|
|
105
|
+
"agent_id": agent_id,
|
|
106
|
+
"metadata": metadata,
|
|
107
|
+
"retell_llm_dynamic_variables": retell_llm_dynamic_variables,
|
|
108
|
+
}
|
|
109
|
+
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
110
|
+
url = f"{self.base_url}/v2/create-web-call"
|
|
111
|
+
query_params = {}
|
|
112
|
+
response = self._post(url, data=request_body, params=query_params)
|
|
113
|
+
response.raise_for_status()
|
|
114
|
+
return response.json()
|
|
115
|
+
|
|
116
|
+
def get_get_voice_by_voice_id(self, voice_id) -> dict[str, Any]:
|
|
117
|
+
"""
|
|
118
|
+
Fetches voice details based on the provided voice ID.
|
|
119
|
+
|
|
120
|
+
Args:
|
|
121
|
+
voice_id: The unique identifier of the voice to retrieve.
|
|
122
|
+
|
|
123
|
+
Returns:
|
|
124
|
+
A dictionary containing voice details.
|
|
125
|
+
|
|
126
|
+
Raises:
|
|
127
|
+
ValueError: Raised when the 'voice_id' parameter is missing or None.
|
|
128
|
+
|
|
129
|
+
Tags:
|
|
130
|
+
retrieve, voice, data-fetched
|
|
131
|
+
"""
|
|
132
|
+
if voice_id is None:
|
|
133
|
+
raise ValueError("Missing required parameter 'voice_id'")
|
|
134
|
+
url = f"{self.base_url}/get-voice/{voice_id}"
|
|
135
|
+
query_params = {}
|
|
136
|
+
response = self._get(url, params=query_params)
|
|
137
|
+
response.raise_for_status()
|
|
138
|
+
return response.json()
|
|
139
|
+
|
|
140
|
+
def post_v2_list_calls(
|
|
141
|
+
self, filter_criteria=None, sort_order=None, limit=None, pagination_key=None
|
|
142
|
+
) -> list[Any]:
|
|
143
|
+
"""
|
|
144
|
+
Sends a POST request to list call records with optional filtering, sorting, pagination, and limits.
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
filter_criteria: Optional dictionary specifying filter conditions for returned call records.
|
|
148
|
+
sort_order: Optional sorting instructions (e.g., by date or status) for the call records.
|
|
149
|
+
limit: Optional integer specifying the maximum number of call records to return.
|
|
150
|
+
pagination_key: Optional key indicating where to continue fetching records for paginated results.
|
|
151
|
+
|
|
152
|
+
Returns:
|
|
153
|
+
A list of call record objects returned from the API.
|
|
154
|
+
|
|
155
|
+
Raises:
|
|
156
|
+
HTTPError: If the HTTP request to the remote service fails or returns an error status code.
|
|
157
|
+
|
|
158
|
+
Tags:
|
|
159
|
+
list, calls, api, batch, management, important
|
|
160
|
+
"""
|
|
161
|
+
request_body = {
|
|
162
|
+
"filter_criteria": filter_criteria,
|
|
163
|
+
"sort_order": sort_order,
|
|
164
|
+
"limit": limit,
|
|
165
|
+
"pagination_key": pagination_key,
|
|
166
|
+
}
|
|
167
|
+
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
168
|
+
url = f"{self.base_url}/v2/list-calls"
|
|
169
|
+
query_params = {}
|
|
170
|
+
response = self._post(url, data=request_body, params=query_params)
|
|
171
|
+
response.raise_for_status()
|
|
172
|
+
return response.json()
|
|
173
|
+
|
|
174
|
+
def post_create_phone_number(
|
|
175
|
+
self, area_code, inbound_agent_id=None, outbound_agent_id=None, nickname=None
|
|
176
|
+
) -> dict[str, Any]:
|
|
177
|
+
"""
|
|
178
|
+
Creates a phone number with the specified area code and optional parameters.
|
|
179
|
+
|
|
180
|
+
Args:
|
|
181
|
+
area_code: The area code for the phone number (required).
|
|
182
|
+
inbound_agent_id: The ID of the agent to handle inbound calls (optional).
|
|
183
|
+
outbound_agent_id: The ID of the agent to handle outbound calls (optional).
|
|
184
|
+
nickname: A user-friendly name for the phone number (optional).
|
|
185
|
+
|
|
186
|
+
Returns:
|
|
187
|
+
A dictionary containing the created phone number details and any associated metadata.
|
|
188
|
+
|
|
189
|
+
Raises:
|
|
190
|
+
ValueError: When the required parameter 'area_code' is None or not provided.
|
|
191
|
+
HTTPError: When the API request fails with an error status code.
|
|
192
|
+
|
|
193
|
+
Tags:
|
|
194
|
+
create, phone, post, communication
|
|
195
|
+
"""
|
|
196
|
+
if area_code is None:
|
|
197
|
+
raise ValueError("Missing required parameter 'area_code'")
|
|
198
|
+
request_body = {
|
|
199
|
+
"inbound_agent_id": inbound_agent_id,
|
|
200
|
+
"outbound_agent_id": outbound_agent_id,
|
|
201
|
+
"area_code": area_code,
|
|
202
|
+
"nickname": nickname,
|
|
203
|
+
}
|
|
204
|
+
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
205
|
+
url = f"{self.base_url}/create-phone-number"
|
|
206
|
+
query_params = {}
|
|
207
|
+
response = self._post(url, data=request_body, params=query_params)
|
|
208
|
+
response.raise_for_status()
|
|
209
|
+
return response.json()
|
|
210
|
+
|
|
211
|
+
def get_get_phone_number_by_phone_number(self, phone_number) -> dict[str, Any]:
|
|
212
|
+
"""
|
|
213
|
+
Retrieves phone number details by making a GET request to the API endpoint using the provided phone number.
|
|
214
|
+
|
|
215
|
+
Args:
|
|
216
|
+
phone_number: str. The phone number to look up. Must not be None.
|
|
217
|
+
|
|
218
|
+
Returns:
|
|
219
|
+
dict[str, Any]: A dictionary containing the details associated with the given phone number as returned by the API.
|
|
220
|
+
|
|
221
|
+
Raises:
|
|
222
|
+
ValueError: If the 'phone_number' parameter is None.
|
|
223
|
+
requests.HTTPError: If the HTTP request fails or an error response is returned from the API.
|
|
224
|
+
|
|
225
|
+
Tags:
|
|
226
|
+
get, phone-number, api, lookup
|
|
227
|
+
"""
|
|
228
|
+
if phone_number is None:
|
|
229
|
+
raise ValueError("Missing required parameter 'phone_number'")
|
|
230
|
+
url = f"{self.base_url}/get-phone-number/{phone_number}"
|
|
231
|
+
query_params = {}
|
|
232
|
+
response = self._get(url, params=query_params)
|
|
233
|
+
response.raise_for_status()
|
|
234
|
+
return response.json()
|
|
235
|
+
|
|
236
|
+
def get_list_phone_numbers(
|
|
237
|
+
self,
|
|
238
|
+
) -> list[Any]:
|
|
239
|
+
"""
|
|
240
|
+
Retrieves a list of phone numbers from the remote API.
|
|
241
|
+
|
|
242
|
+
Args:
|
|
243
|
+
None: This function takes no arguments
|
|
244
|
+
|
|
245
|
+
Returns:
|
|
246
|
+
A list containing the phone numbers returned by the API.
|
|
247
|
+
|
|
248
|
+
Raises:
|
|
249
|
+
requests.HTTPError: If the HTTP request to the API fails or returns an unsuccessful status code.
|
|
250
|
+
|
|
251
|
+
Tags:
|
|
252
|
+
get, list, phone-numbers, api, synchronous
|
|
253
|
+
"""
|
|
254
|
+
url = f"{self.base_url}/list-phone-numbers"
|
|
255
|
+
query_params = {}
|
|
256
|
+
response = self._get(url, params=query_params)
|
|
257
|
+
response.raise_for_status()
|
|
258
|
+
return response.json()
|
|
259
|
+
|
|
260
|
+
def patch_update_phone_number_by_phone_number(
|
|
261
|
+
self, phone_number, inbound_agent_id=None, outbound_agent_id=None, nickname=None
|
|
262
|
+
) -> dict[str, Any]:
|
|
263
|
+
"""
|
|
264
|
+
Updates the information of a phone number by its number, allowing optional modification of inbound and outbound agent IDs and nickname.
|
|
265
|
+
|
|
266
|
+
Args:
|
|
267
|
+
phone_number: str. The phone number to update. This parameter is required.
|
|
268
|
+
inbound_agent_id: Optional[str]. The ID of the inbound agent to associate with the phone number. If None, this field will not be updated.
|
|
269
|
+
outbound_agent_id: Optional[str]. The ID of the outbound agent to associate with the phone number. If None, this field will not be updated.
|
|
270
|
+
nickname: Optional[str]. The nickname to assign to the phone number. If None, this field will not be updated.
|
|
271
|
+
|
|
272
|
+
Returns:
|
|
273
|
+
dict[str, Any]: A dictionary containing the updated phone number information as returned by the API.
|
|
274
|
+
|
|
275
|
+
Raises:
|
|
276
|
+
ValueError: If the required parameter 'phone_number' is not provided.
|
|
277
|
+
requests.HTTPError: If the HTTP PATCH request fails or the response has an error status.
|
|
278
|
+
|
|
279
|
+
Tags:
|
|
280
|
+
update, phone-number, api, patch, management
|
|
281
|
+
"""
|
|
282
|
+
if phone_number is None:
|
|
283
|
+
raise ValueError("Missing required parameter 'phone_number'")
|
|
284
|
+
request_body = {
|
|
285
|
+
"inbound_agent_id": inbound_agent_id,
|
|
286
|
+
"outbound_agent_id": outbound_agent_id,
|
|
287
|
+
"nickname": nickname,
|
|
288
|
+
}
|
|
289
|
+
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
290
|
+
url = f"{self.base_url}/update-phone-number/{phone_number}"
|
|
291
|
+
query_params = {}
|
|
292
|
+
response = self._patch(url, data=request_body, params=query_params)
|
|
293
|
+
response.raise_for_status()
|
|
294
|
+
return response.json()
|
|
295
|
+
|
|
296
|
+
def delete_delete_phone_number_by_phone_number(self, phone_number) -> Any:
|
|
297
|
+
"""
|
|
298
|
+
Deletes a phone number resource by its phone number identifier via an HTTP DELETE request.
|
|
299
|
+
|
|
300
|
+
Args:
|
|
301
|
+
phone_number: The phone number (str or compatible type) identifying the resource to be deleted.
|
|
302
|
+
|
|
303
|
+
Returns:
|
|
304
|
+
The server's JSON response as a Python object upon successful deletion.
|
|
305
|
+
|
|
306
|
+
Raises:
|
|
307
|
+
ValueError: If 'phone_number' is None.
|
|
308
|
+
requests.HTTPError: If the HTTP DELETE request results in an error status code.
|
|
309
|
+
|
|
310
|
+
Tags:
|
|
311
|
+
delete, phone-number, api, management
|
|
312
|
+
"""
|
|
313
|
+
if phone_number is None:
|
|
314
|
+
raise ValueError("Missing required parameter 'phone_number'")
|
|
315
|
+
url = f"{self.base_url}/delete-phone-number/{phone_number}"
|
|
316
|
+
query_params = {}
|
|
317
|
+
response = self._delete(url, params=query_params)
|
|
318
|
+
response.raise_for_status()
|
|
319
|
+
return response.json()
|
|
320
|
+
|
|
321
|
+
def list_tools(self):
|
|
322
|
+
return [
|
|
323
|
+
self.get_v2_get_call_by_call_id,
|
|
324
|
+
self.post_v2_create_phone_call,
|
|
325
|
+
self.post_v2_create_web_call,
|
|
326
|
+
self.get_get_voice_by_voice_id,
|
|
327
|
+
self.post_v2_list_calls,
|
|
328
|
+
self.post_create_phone_number,
|
|
329
|
+
self.get_get_phone_number_by_phone_number,
|
|
330
|
+
self.get_list_phone_numbers,
|
|
331
|
+
self.patch_update_phone_number_by_phone_number,
|
|
332
|
+
self.delete_delete_phone_number_by_phone_number,
|
|
333
|
+
]
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# RocketlaneApp MCP Server
|
|
2
|
+
|
|
3
|
+
An MCP Server for the RocketlaneApp API.
|
|
4
|
+
|
|
5
|
+
## 🛠️ Tool List
|
|
6
|
+
|
|
7
|
+
This is automatically generated from OpenAPI schema for the RocketlaneApp API.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
| Tool | Description |
|
|
11
|
+
|------|-------------|
|
|
12
|
+
| `get_time_entry` | Get a time entry |
|
|
13
|
+
| `update_time_entry` | Update a time entry |
|
|
14
|
+
| `delete_time_entry` | Delete a time entry |
|
|
15
|
+
| `get_task` | Get task by Id |
|
|
16
|
+
| `update_task` | Update task by Id |
|
|
17
|
+
| `delete_task` | Delete task by Id |
|
|
18
|
+
| `get_space` | Get space by Id |
|
|
19
|
+
| `update_space` | Update space by Id |
|
|
20
|
+
| `delete_space` | Delete space by Id |
|
|
21
|
+
| `get_space_document` | Get space document by Id |
|
|
22
|
+
| `update_space_document` | Update space document by Id |
|
|
23
|
+
| `delete_space_document` | Delete space document by Id |
|
|
24
|
+
| `get_project` | Get project by Id |
|
|
25
|
+
| `update_project` | Update project by Id |
|
|
26
|
+
| `delete_project` | Delete project by Id |
|
|
27
|
+
| `get_phase` | Get phase by Id |
|
|
28
|
+
| `update_phase` | Update phase by Id |
|
|
29
|
+
| `delete_phase` | Delete phase by Id |
|
|
30
|
+
| `get_field` | Get field by Id |
|
|
31
|
+
| `update_field` | Update field by Id |
|
|
32
|
+
| `delete_field` | Delete field by Id |
|
|
33
|
+
| `get_all_timeoffs` | Get all time-offs |
|
|
34
|
+
| `create_timeoff` | Create a time-off |
|
|
35
|
+
| `get_all_time_entries` | Get all time entries |
|
|
36
|
+
| `create_time_entry` | Create a time entry |
|
|
37
|
+
| `remove_followers_from_task` | Remove followers from a task by Id |
|
|
38
|
+
| `remove_dependencies_from_task` | Remove dependencies from a task by Id |
|
|
39
|
+
| `remove_assignees_from_task` | Remove assignees from a task by Id |
|
|
40
|
+
| `move_task_to_given_phase` | Move a task to the phase by Id |
|
|
41
|
+
| `add_followers_to_task` | Add followers to a task by Id |
|
|
42
|
+
| `add_dependencies_to_task` | Add dependencies to a task by Id |
|
|
43
|
+
| `add_assignee_to_task` | Add assignees to a task by Id |
|
|
44
|
+
| `get_all_tasks` | Get all tasks |
|
|
45
|
+
| `create_task` | Create a task |
|
|
46
|
+
| `get_all_spaces` | Get all spaces |
|
|
47
|
+
| `create_space` | Create a space |
|
|
48
|
+
| `get_all_space_documents` | Get all space documents |
|
|
49
|
+
| `create_space_document` | Create a space document |
|
|
50
|
+
| `unassign_placeholders` | Un assign placeholders from an user in a project |
|
|
51
|
+
| `remove_members` | Remove members from a project |
|
|
52
|
+
| `import_template` | Import a template to a project |
|
|
53
|
+
| `assign_placeholders` | Assign placeholders to an user in a project |
|
|
54
|
+
| `archive_project` | Archive project by Id |
|
|
55
|
+
| `add_members` | Add members to a project |
|
|
56
|
+
| `get_all_projects` | Get all projects |
|
|
57
|
+
| `create_project` | Create a project |
|
|
58
|
+
| `get_all_phases` | Get all phases |
|
|
59
|
+
| `create_phase` | Create a phase |
|
|
60
|
+
| `update_field_option` | Update field Option |
|
|
61
|
+
| `add_field_option` | Add field Option |
|
|
62
|
+
| `get_all_fields` | Get all fields |
|
|
63
|
+
| `create_field` | Create a Field |
|
|
64
|
+
| `get_user` | Get user by Id |
|
|
65
|
+
| `get_all_users` | Get all users |
|
|
66
|
+
| `get_timeoff` | Get time-off by Id |
|
|
67
|
+
| `delete_timeoff` | Delete a time-off |
|
|
68
|
+
| `search_time_entries` | Search time entries |
|
|
69
|
+
| `get_time_entry_categories` | Get time entry categories |
|
|
70
|
+
| `get_all_resource_allocations` | Get all Resource allocations |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .app import RocketlaneApp
|