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
|
+
# GoogleSearchconsoleApp MCP Server
|
|
2
|
+
|
|
3
|
+
An MCP Server for the GoogleSearchconsoleApp API.
|
|
4
|
+
|
|
5
|
+
## 🛠️ Tool List
|
|
6
|
+
|
|
7
|
+
This is automatically generated from OpenAPI schema for the GoogleSearchconsoleApp API.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
| Tool | Description |
|
|
11
|
+
|------|-------------|
|
|
12
|
+
| `get_sitemap` | Retrieves information about a specific sitemap. |
|
|
13
|
+
| `list_sitemaps` | Lists the sitemaps-entries submitted for this site, or included in the sitemap index file |
|
|
14
|
+
| `submit_sitemap` | Submits a sitemap for a site. Typically returns HTTP 204 No Content on success. |
|
|
15
|
+
| `delete_sitemap` | Deletes a sitemap from this site. Typically returns HTTP 204 No Content on success. |
|
|
16
|
+
| `get_site` | Retrieves information about a specific site. |
|
|
17
|
+
| `list_sites` | Lists the user's Search Console sites. |
|
|
18
|
+
| `add_site` | Adds a site to the set of the user's sites in Search Console. |
|
|
19
|
+
| `delete_site` | Removes a site from the set of the user's Search Console sites. |
|
|
20
|
+
| `index_inspect_url` | Inspects a URL in Google Index and provides information about its status. |
|
|
21
|
+
| `query_search_analytics` | Queries your search traffic data with filters and parameters that you define. |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .app import GoogleSearchconsoleApp
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import urllib.parse
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from universal_mcp.applications.application import APIApplication
|
|
6
|
+
from universal_mcp.integrations import Integration
|
|
7
|
+
|
|
8
|
+
logger = logging.getLogger(__name__)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class GoogleSearchconsoleApp(APIApplication):
|
|
12
|
+
def __init__(self, integration: Integration = None, **kwargs) -> None:
|
|
13
|
+
super().__init__(name="google-searchconsole", integration=integration, **kwargs)
|
|
14
|
+
self.webmasters_base_url = "https://www.googleapis.com/webmasters/v3"
|
|
15
|
+
self.searchconsole_base_url = "https://searchconsole.googleapis.com/v1"
|
|
16
|
+
|
|
17
|
+
def delete_sitemap(self, siteUrl: str, feedpath: str) -> None:
|
|
18
|
+
"""
|
|
19
|
+
Deletes a sitemap from this site. Typically returns HTTP 204 No Content on success.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
siteUrl (str): The site's URL, including protocol (e.g. 'http://www.example.com/').
|
|
23
|
+
feedpath (str): The URL of the sitemap to delete. Example: 'http://www.example.com/sitemap.xml'.
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
None: If the request is successful.
|
|
27
|
+
|
|
28
|
+
Tags:
|
|
29
|
+
sitemap_management
|
|
30
|
+
"""
|
|
31
|
+
# Encode URL parts used as path segments
|
|
32
|
+
siteUrl_encoded = urllib.parse.quote(siteUrl, safe="")
|
|
33
|
+
feedpath_encoded = urllib.parse.quote(feedpath, safe="")
|
|
34
|
+
|
|
35
|
+
url = f"{self.webmasters_base_url}/sites/{siteUrl_encoded}/sitemaps/{feedpath_encoded}"
|
|
36
|
+
response = self._delete(url)
|
|
37
|
+
response.raise_for_status()
|
|
38
|
+
|
|
39
|
+
def get_sitemap(self, siteUrl: str, feedpath: str) -> dict[str, Any]:
|
|
40
|
+
"""
|
|
41
|
+
Retrieves information about a specific sitemap.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
siteUrl (str): The site's URL, including protocol (e.g. 'http://www.example.com/').
|
|
45
|
+
feedpath (str): The URL of the sitemap to retrieve. Example: 'http://www.example.com/sitemap.xml'.
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
Dict[str, Any]: Sitemap resource.
|
|
49
|
+
|
|
50
|
+
Tags:
|
|
51
|
+
sitemap_management
|
|
52
|
+
"""
|
|
53
|
+
siteUrl_encoded = urllib.parse.quote(siteUrl, safe="")
|
|
54
|
+
feedpath_encoded = urllib.parse.quote(feedpath, safe="")
|
|
55
|
+
|
|
56
|
+
url = f"{self.webmasters_base_url}/sites/{siteUrl_encoded}/sitemaps/{feedpath_encoded}"
|
|
57
|
+
response = self._get(url)
|
|
58
|
+
response.raise_for_status()
|
|
59
|
+
return response.json()
|
|
60
|
+
|
|
61
|
+
def list_sitemaps(
|
|
62
|
+
self, siteUrl: str, sitemapIndex: str | None = None
|
|
63
|
+
) -> dict[str, Any]:
|
|
64
|
+
"""
|
|
65
|
+
Lists the sitemaps-entries submitted for this site, or included in the sitemap index file
|
|
66
|
+
(if sitemapIndex is specified in the request).
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
siteUrl (str): The site's URL, including protocol (e.g. 'http://www.example.com/').
|
|
70
|
+
sitemapIndex (Optional[str]): The URL of the sitemap index.
|
|
71
|
+
Example: 'http://www.example.com/sitemap_index.xml'.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
Dict[str, Any]: List of sitemap resources.
|
|
75
|
+
|
|
76
|
+
Tags:
|
|
77
|
+
sitemap_management, important
|
|
78
|
+
"""
|
|
79
|
+
siteUrl_encoded = urllib.parse.quote(siteUrl, safe="")
|
|
80
|
+
url = f"{self.webmasters_base_url}/sites/{siteUrl_encoded}/sitemaps"
|
|
81
|
+
|
|
82
|
+
query_params = {}
|
|
83
|
+
if sitemapIndex is not None:
|
|
84
|
+
query_params["sitemapIndex"] = sitemapIndex
|
|
85
|
+
|
|
86
|
+
response = self._get(url, params=query_params if query_params else None)
|
|
87
|
+
response.raise_for_status()
|
|
88
|
+
return response.json()
|
|
89
|
+
|
|
90
|
+
def submit_sitemap(self, siteUrl: str, feedpath: str) -> None:
|
|
91
|
+
"""
|
|
92
|
+
Submits a sitemap for a site. Typically returns HTTP 204 No Content on success.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
siteUrl (str): The site's URL, including protocol (e.g. 'http://www.example.com/').
|
|
96
|
+
feedpath (str): The URL of the sitemap to submit. Example: 'http://www.example.com/sitemap.xml'.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
None: If the request is successful.
|
|
100
|
+
|
|
101
|
+
Tags:
|
|
102
|
+
sitemap_management
|
|
103
|
+
"""
|
|
104
|
+
siteUrl_encoded = urllib.parse.quote(siteUrl, safe="")
|
|
105
|
+
feedpath_encoded = urllib.parse.quote(feedpath, safe="")
|
|
106
|
+
|
|
107
|
+
url = f"{self.webmasters_base_url}/sites/{siteUrl_encoded}/sitemaps/{feedpath_encoded}"
|
|
108
|
+
# PUT requests for submitting/notifying often don't have a body.
|
|
109
|
+
response = self._put(url, data=None)
|
|
110
|
+
response.raise_for_status()
|
|
111
|
+
|
|
112
|
+
# --- Sites ---
|
|
113
|
+
|
|
114
|
+
def add_site(self, siteUrl: str) -> dict[str, Any]:
|
|
115
|
+
"""
|
|
116
|
+
Adds a site to the set of the user's sites in Search Console.
|
|
117
|
+
This will require verification of the site ownership.
|
|
118
|
+
If successful, this method returns a site resource in the response body.
|
|
119
|
+
|
|
120
|
+
Args:
|
|
121
|
+
siteUrl (str): The URL of the site to add. Example: 'http://www.example.com/'.
|
|
122
|
+
|
|
123
|
+
Returns:
|
|
124
|
+
Dict[str, Any]: Site resource upon successful addition.
|
|
125
|
+
|
|
126
|
+
Tags:
|
|
127
|
+
site_management, important
|
|
128
|
+
"""
|
|
129
|
+
siteUrl_encoded = urllib.parse.quote(siteUrl, safe="")
|
|
130
|
+
url = f"{self.webmasters_base_url}/sites/{siteUrl_encoded}"
|
|
131
|
+
# This specific PUT for adding a site generally does not require a body;
|
|
132
|
+
# the resource identifier is the siteUrl itself.
|
|
133
|
+
# Google API docs state it returns a site resource.
|
|
134
|
+
response = self._put(url, data=None)
|
|
135
|
+
response.raise_for_status()
|
|
136
|
+
return response.json()
|
|
137
|
+
|
|
138
|
+
def delete_site(self, siteUrl: str) -> None:
|
|
139
|
+
"""
|
|
140
|
+
Removes a site from the set of the user's Search Console sites.
|
|
141
|
+
Typically returns HTTP 204 No Content on success.
|
|
142
|
+
|
|
143
|
+
Args:
|
|
144
|
+
siteUrl (str): The URL of the site to delete. Example: 'http://www.example.com/'.
|
|
145
|
+
|
|
146
|
+
Returns:
|
|
147
|
+
None: If the request is successful.
|
|
148
|
+
|
|
149
|
+
Tags:
|
|
150
|
+
site_management
|
|
151
|
+
"""
|
|
152
|
+
siteUrl_encoded = urllib.parse.quote(siteUrl, safe="")
|
|
153
|
+
url = f"{self.webmasters_base_url}/sites/{siteUrl_encoded}"
|
|
154
|
+
response = self._delete(url)
|
|
155
|
+
response.raise_for_status()
|
|
156
|
+
|
|
157
|
+
def get_site(self, siteUrl: str) -> dict[str, Any]:
|
|
158
|
+
"""
|
|
159
|
+
Retrieves information about a specific site.
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
siteUrl (str): The site's URL, including protocol (e.g. 'http://www.example.com/').
|
|
163
|
+
|
|
164
|
+
Returns:
|
|
165
|
+
Dict[str, Any]: Site resource.
|
|
166
|
+
|
|
167
|
+
Tags:
|
|
168
|
+
site_management
|
|
169
|
+
"""
|
|
170
|
+
siteUrl_encoded = urllib.parse.quote(siteUrl, safe="")
|
|
171
|
+
url = f"{self.webmasters_base_url}/sites/{siteUrl_encoded}"
|
|
172
|
+
response = self._get(url)
|
|
173
|
+
response.raise_for_status()
|
|
174
|
+
return response.json()
|
|
175
|
+
|
|
176
|
+
def list_sites(self) -> dict[str, Any]:
|
|
177
|
+
"""
|
|
178
|
+
Lists the user's Search Console sites.
|
|
179
|
+
|
|
180
|
+
Returns:
|
|
181
|
+
Dict[str, Any]: List of site resources.
|
|
182
|
+
|
|
183
|
+
Tags:
|
|
184
|
+
site_management
|
|
185
|
+
"""
|
|
186
|
+
url = f"{self.webmasters_base_url}/sites"
|
|
187
|
+
response = self._get(url)
|
|
188
|
+
response.raise_for_status()
|
|
189
|
+
return response.json()
|
|
190
|
+
|
|
191
|
+
# --- URL Inspection ---
|
|
192
|
+
|
|
193
|
+
def index_inspect_url(
|
|
194
|
+
self, inspectionUrl: str, siteUrl: str, languageCode: str | None = None
|
|
195
|
+
) -> dict[str, Any]:
|
|
196
|
+
"""
|
|
197
|
+
Inspects a URL in Google Index and provides information about its status.
|
|
198
|
+
|
|
199
|
+
Args:
|
|
200
|
+
inspectionUrl (str): The URL to inspect. Example: 'https://www.example.com/mypage'.
|
|
201
|
+
siteUrl (str): The site URL (property) to inspect the URL under.
|
|
202
|
+
Must be a property in Search Console. Example: 'sc-domain:example.com' or 'https://www.example.com/'.
|
|
203
|
+
languageCode (Optional[str]): Optional. The BCP-47 language code for the inspection. Example: 'en-US'.
|
|
204
|
+
|
|
205
|
+
Returns:
|
|
206
|
+
Dict[str, Any]: Inspection result containing details about the URL's indexing status.
|
|
207
|
+
|
|
208
|
+
Tags:
|
|
209
|
+
url_inspection, indexing
|
|
210
|
+
"""
|
|
211
|
+
url = f"{self.searchconsole_base_url}/urlInspection/index:inspect"
|
|
212
|
+
request_body: dict[str, Any] = {
|
|
213
|
+
"inspectionUrl": inspectionUrl,
|
|
214
|
+
"siteUrl": siteUrl,
|
|
215
|
+
}
|
|
216
|
+
if languageCode is not None:
|
|
217
|
+
request_body["languageCode"] = languageCode
|
|
218
|
+
|
|
219
|
+
# Assuming _post handles dict as JSON payload, similar to ExaApp
|
|
220
|
+
response = self._post(url, data=request_body)
|
|
221
|
+
response.raise_for_status()
|
|
222
|
+
return response.json()
|
|
223
|
+
|
|
224
|
+
# --- Search Analytics ---
|
|
225
|
+
|
|
226
|
+
def query_search_analytics(
|
|
227
|
+
self,
|
|
228
|
+
siteUrl: str,
|
|
229
|
+
startDate: str,
|
|
230
|
+
endDate: str,
|
|
231
|
+
dimensions: list[str] | None = None,
|
|
232
|
+
dimensionFilterGroups: list[dict[str, Any]] | None = None,
|
|
233
|
+
aggregationType: str | None = None,
|
|
234
|
+
rowLimit: int | None = None,
|
|
235
|
+
startRow: int | None = None,
|
|
236
|
+
dataState: str | None = None,
|
|
237
|
+
search_type: str | None = None, # 'type' is a reserved keyword in Python
|
|
238
|
+
) -> dict[str, Any]:
|
|
239
|
+
"""
|
|
240
|
+
Queries your search traffic data with filters and parameters that you define.
|
|
241
|
+
The method returns zero or more rows grouped by the row that you define.
|
|
242
|
+
You must define a date range of one or more days.
|
|
243
|
+
|
|
244
|
+
Args:
|
|
245
|
+
siteUrl (str): The site's URL, including protocol (e.g. 'http://www.example.com/').
|
|
246
|
+
startDate (str): Start date of the requested period in YYYY-MM-DD format.
|
|
247
|
+
endDate (str): End date of the requested period in YYYY-MM-DD format.
|
|
248
|
+
dimensions (Optional[List[str]]): List of dimensions to group the data by.
|
|
249
|
+
Possible values: "date", "query", "page", "country", "device", "searchAppearance".
|
|
250
|
+
Example: ["date", "query"].
|
|
251
|
+
dimensionFilterGroups (Optional[List[Dict[str, Any]]]): Filter the results by dimensions.
|
|
252
|
+
Example: [{
|
|
253
|
+
"groupType": "and",
|
|
254
|
+
"filters": [{
|
|
255
|
+
"dimension": "country",
|
|
256
|
+
"operator": "equals",
|
|
257
|
+
"expression": "USA"
|
|
258
|
+
}, {
|
|
259
|
+
"dimension": "device",
|
|
260
|
+
"operator": "equals",
|
|
261
|
+
"expression": "DESKTOP"
|
|
262
|
+
}]
|
|
263
|
+
}]
|
|
264
|
+
aggregationType (Optional[str]): How data is aggregated.
|
|
265
|
+
Possible values: "auto", "byPage", "byProperty". Default is "auto".
|
|
266
|
+
rowLimit (Optional[int]): The maximum number of rows to return. Default is 1000. Max 25000.
|
|
267
|
+
startRow (Optional[int]): Zero-based index of the first row to return. Default is 0.
|
|
268
|
+
dataState (Optional[str]): Whether to filter for fresh data or all data.
|
|
269
|
+
Possible values: "all", "final". Default "all".
|
|
270
|
+
search_type (Optional[str]): Filter by search type.
|
|
271
|
+
Example: "web", "image", "video", "news", "discover", "googleNews".
|
|
272
|
+
This corresponds to the 'type' parameter in the API.
|
|
273
|
+
|
|
274
|
+
Returns:
|
|
275
|
+
Dict[str, Any]: Search analytics data.
|
|
276
|
+
|
|
277
|
+
Tags:
|
|
278
|
+
search_analytics, reporting
|
|
279
|
+
"""
|
|
280
|
+
siteUrl_encoded = urllib.parse.quote(siteUrl, safe="")
|
|
281
|
+
url = (
|
|
282
|
+
f"{self.webmasters_base_url}/sites/{siteUrl_encoded}/searchAnalytics/query"
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
request_body: dict[str, Any] = {
|
|
286
|
+
"startDate": startDate,
|
|
287
|
+
"endDate": endDate,
|
|
288
|
+
}
|
|
289
|
+
if dimensions is not None:
|
|
290
|
+
request_body["dimensions"] = dimensions
|
|
291
|
+
if dimensionFilterGroups is not None:
|
|
292
|
+
request_body["dimensionFilterGroups"] = dimensionFilterGroups
|
|
293
|
+
if aggregationType is not None:
|
|
294
|
+
request_body["aggregationType"] = aggregationType
|
|
295
|
+
if rowLimit is not None:
|
|
296
|
+
request_body["rowLimit"] = rowLimit
|
|
297
|
+
if startRow is not None:
|
|
298
|
+
request_body["startRow"] = startRow
|
|
299
|
+
if dataState is not None:
|
|
300
|
+
request_body["dataState"] = dataState
|
|
301
|
+
if search_type is not None:
|
|
302
|
+
request_body["type"] = search_type # API expects 'type'
|
|
303
|
+
|
|
304
|
+
response = self._post(url, data=request_body)
|
|
305
|
+
response.raise_for_status()
|
|
306
|
+
return response.json()
|
|
307
|
+
|
|
308
|
+
def list_tools(self):
|
|
309
|
+
return [
|
|
310
|
+
self.get_sitemap,
|
|
311
|
+
self.list_sitemaps,
|
|
312
|
+
self.submit_sitemap,
|
|
313
|
+
self.delete_sitemap,
|
|
314
|
+
self.get_site,
|
|
315
|
+
self.list_sites,
|
|
316
|
+
self.add_site,
|
|
317
|
+
self.delete_site,
|
|
318
|
+
self.index_inspect_url,
|
|
319
|
+
self.query_search_analytics,
|
|
320
|
+
]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# GoogleSheetApp MCP Server
|
|
2
|
+
|
|
3
|
+
An MCP Server for the GoogleSheetApp API.
|
|
4
|
+
|
|
5
|
+
## 🛠️ Tool List
|
|
6
|
+
|
|
7
|
+
This is automatically generated from OpenAPI schema for the GoogleSheetApp API.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
| Tool | Description |
|
|
11
|
+
|------|-------------|
|
|
12
|
+
| `create_spreadsheet` | Creates a new blank Google Spreadsheet with the specified title and returns the API response. |
|
|
13
|
+
| `get_spreadsheet` | Retrieves detailed information about a specific Google Spreadsheet using its ID excluding cell data. |
|
|
14
|
+
| `batch_get_values` | Retrieves multiple ranges of values from a Google Spreadsheet in a single batch request. |
|
|
15
|
+
| `insert_dimensions` | Inserts new rows or columns into a Google Sheet at a specific position within the sheet. |
|
|
16
|
+
| `append_dimensions` | Appends empty rows or columns to the end of a Google Sheet. |
|
|
17
|
+
| `delete_dimensions` | Tool to delete specified rows or columns from a sheet in a google spreadsheet. use when you need to remove a range of rows or columns. |
|
|
18
|
+
| `add_sheet` | Adds a new sheet (worksheet) to a spreadsheet. use this tool to create a new tab within an existing google sheet, optionally specifying its title, index, size, and other properties. |
|
|
19
|
+
| `delete_sheet` | Tool to delete a sheet (worksheet) from a spreadsheet. use when you need to remove a specific sheet from a google sheet document. |
|
|
20
|
+
| `add_basic_chart` | Adds a basic chart to a Google Spreadsheet like a column chart, bar chart, line chart and area chart. |
|
|
21
|
+
| `add_pie_chart` | Adds a pie chart to a Google Spreadsheet. |
|
|
22
|
+
| `add_table` | Adds a table to a Google Spreadsheet. |
|
|
23
|
+
| `update_table` | Updates an existing table in a Google Spreadsheet. |
|
|
24
|
+
| `clear_values` | Clears all values from a specified range in a Google Spreadsheet while preserving cell formatting and other properties |
|
|
25
|
+
| `update_values` | Updates cell values in a specified range of a Google Spreadsheet using the Sheets API |
|
|
26
|
+
| `batch_update` | Updates a specified range in a google sheet with given values, or appends them as new rows if `first cell location` is omitted; ensure the target sheet exists and the spreadsheet contains at least one worksheet. |
|
|
27
|
+
| `clear_basic_filter` | Tool to clear the basic filter from a sheet. use when you need to remove an existing basic filter from a specific sheet within a google spreadsheet. |
|
|
28
|
+
| `list_tables` | This action is used to list all tables in a google spreadsheet, call this action to get the list of tables in a spreadsheet. discover all tables in a google spreadsheet by analyzing sheet structure and detecting data patterns. uses heuristic analysis to find header rows, data boundaries, and table structures. |
|
|
29
|
+
| `get_values` | Retrieves values from a specific range in a Google Spreadsheet. |
|
|
30
|
+
| `get_table_schema` | Analyzes table structure and infers column names, types, and constraints. |
|
|
31
|
+
| `set_basic_filter` | Tool to set a basic filter on a sheet in a google spreadsheet. use when you need to filter or sort data within a specific range on a sheet. |
|
|
32
|
+
| `copy_to_sheet` | Tool to copy a single sheet from a spreadsheet to another spreadsheet. Use when you need to duplicate a sheet into a different spreadsheet. |
|
|
33
|
+
| `append_values` | Tool to append values to a spreadsheet. use when you need to add new data to the end of an existing table in a google sheet. |
|
|
34
|
+
| `batch_clear_values` | Tool to clear one or more ranges of values from a spreadsheet. use when you need to remove data from specific cells or ranges while keeping formatting and other properties intact. |
|
|
35
|
+
| `batch_get_values_by_data_filter` | Tool to return one or more ranges of values from a spreadsheet that match the specified data filters. use when you need to retrieve specific data sets based on filtering criteria rather than entire sheets or fixed ranges. |
|
|
36
|
+
| `format_cells` | Applies comprehensive cell formatting to a specified range in a Google Sheets worksheet. |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .app import GoogleSheetApp
|