mcpscraper-memory-sdk 0.13.0__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.
- mcpscraper_memory/__init__.py +9 -0
- mcpscraper_memory/_generated_client.py +588 -0
- mcpscraper_memory/_mcp_generated_client.py +1111 -0
- mcpscraper_memory/client.py +115 -0
- mcpscraper_memory/errors.py +17 -0
- mcpscraper_memory/mcp_client.py +136 -0
- mcpscraper_memory/mcp_models/__init__.py +0 -0
- mcpscraper_memory/mcp_models/access_accept_share.py +17 -0
- mcpscraper_memory/mcp_models/access_approve_sender.py +16 -0
- mcpscraper_memory/mcp_models/access_decline_share.py +16 -0
- mcpscraper_memory/mcp_models/access_inbox_settings.py +16 -0
- mcpscraper_memory/mcp_models/access_invite_account.py +21 -0
- mcpscraper_memory/mcp_models/access_issue_key.py +26 -0
- mcpscraper_memory/mcp_models/access_list_approved_senders.py +15 -0
- mcpscraper_memory/mcp_models/access_list_keys.py +17 -0
- mcpscraper_memory/mcp_models/access_note_inbox.py +14 -0
- mcpscraper_memory/mcp_models/access_remove_approved_sender.py +17 -0
- mcpscraper_memory/mcp_models/access_revoke_key.py +17 -0
- mcpscraper_memory/mcp_models/access_revoke_share.py +16 -0
- mcpscraper_memory/mcp_models/access_set_scope.py +19 -0
- mcpscraper_memory/mcp_models/access_share_note.py +26 -0
- mcpscraper_memory/mcp_models/access_share_vault.py +20 -0
- mcpscraper_memory/mcp_models/access_swap_vault.py +17 -0
- mcpscraper_memory/mcp_models/access_switch_account.py +18 -0
- mcpscraper_memory/mcp_models/access_unlink_share.py +16 -0
- mcpscraper_memory/mcp_models/add_vault.py +18 -0
- mcpscraper_memory/mcp_models/audit_site.py +17 -0
- mcpscraper_memory/mcp_models/browser_click.py +16 -0
- mcpscraper_memory/mcp_models/browser_close.py +12 -0
- mcpscraper_memory/mcp_models/browser_extension_delete.py +12 -0
- mcpscraper_memory/mcp_models/browser_extension_import.py +13 -0
- mcpscraper_memory/mcp_models/browser_extension_list.py +10 -0
- mcpscraper_memory/mcp_models/browser_goto.py +13 -0
- mcpscraper_memory/mcp_models/browser_list_replays.py +12 -0
- mcpscraper_memory/mcp_models/browser_list_sessions.py +12 -0
- mcpscraper_memory/mcp_models/browser_locate.py +13 -0
- mcpscraper_memory/mcp_models/browser_open.py +17 -0
- mcpscraper_memory/mcp_models/browser_press.py +13 -0
- mcpscraper_memory/mcp_models/browser_profile_connect.py +19 -0
- mcpscraper_memory/mcp_models/browser_profile_list.py +15 -0
- mcpscraper_memory/mcp_models/browser_read.py +12 -0
- mcpscraper_memory/mcp_models/browser_replay_annotate.py +19 -0
- mcpscraper_memory/mcp_models/browser_replay_download.py +14 -0
- mcpscraper_memory/mcp_models/browser_replay_mark.py +20 -0
- mcpscraper_memory/mcp_models/browser_replay_start.py +12 -0
- mcpscraper_memory/mcp_models/browser_replay_stop.py +13 -0
- mcpscraper_memory/mcp_models/browser_screenshot.py +12 -0
- mcpscraper_memory/mcp_models/browser_scroll.py +16 -0
- mcpscraper_memory/mcp_models/browser_type.py +14 -0
- mcpscraper_memory/mcp_models/bulk_delete_notes.py +24 -0
- mcpscraper_memory/mcp_models/call_service_connection_action.py +14 -0
- mcpscraper_memory/mcp_models/capture_serp_page_snapshots.py +16 -0
- mcpscraper_memory/mcp_models/capture_serp_snapshot.py +22 -0
- mcpscraper_memory/mcp_models/check_site_export.py +12 -0
- mcpscraper_memory/mcp_models/cost_usage.py +28 -0
- mcpscraper_memory/mcp_models/create_channel.py +19 -0
- mcpscraper_memory/mcp_models/create_scheduled_action.py +25 -0
- mcpscraper_memory/mcp_models/create_secure_vault.py +17 -0
- mcpscraper_memory/mcp_models/create_webhook.py +19 -0
- mcpscraper_memory/mcp_models/credits_info.py +13 -0
- mcpscraper_memory/mcp_models/delete_note.py +23 -0
- mcpscraper_memory/mcp_models/delete_scheduled_action.py +16 -0
- mcpscraper_memory/mcp_models/delete_vault.py +18 -0
- mcpscraper_memory/mcp_models/describe_service_connection_tool.py +14 -0
- mcpscraper_memory/mcp_models/diff_page.py +14 -0
- mcpscraper_memory/mcp_models/directory_workflow.py +24 -0
- mcpscraper_memory/mcp_models/export_connected_service_data.py +20 -0
- mcpscraper_memory/mcp_models/export_search_console_table_data.py +15 -0
- mcpscraper_memory/mcp_models/extract_site.py +18 -0
- mcpscraper_memory/mcp_models/extract_url.py +20 -0
- mcpscraper_memory/mcp_models/facebook_ad_search.py +14 -0
- mcpscraper_memory/mcp_models/facebook_ad_transcribe.py +12 -0
- mcpscraper_memory/mcp_models/facebook_page_intel.py +16 -0
- mcpscraper_memory/mcp_models/facebook_video_transcribe.py +13 -0
- mcpscraper_memory/mcp_models/fact_history.py +18 -0
- mcpscraper_memory/mcp_models/g2_reviews.py +13 -0
- mcpscraper_memory/mcp_models/get_chat_link.py +15 -0
- mcpscraper_memory/mcp_models/get_message_note.py +17 -0
- mcpscraper_memory/mcp_models/get_schedule_link.py +16 -0
- mcpscraper_memory/mcp_models/get_schedule_status.py +22 -0
- mcpscraper_memory/mcp_models/get_vault_app_link.py +15 -0
- mcpscraper_memory/mcp_models/get_vault_contract.py +17 -0
- mcpscraper_memory/mcp_models/gmail_send_message.py +15 -0
- mcpscraper_memory/mcp_models/google_ads_page_intel.py +15 -0
- mcpscraper_memory/mcp_models/google_ads_search.py +14 -0
- mcpscraper_memory/mcp_models/google_ads_transcribe.py +12 -0
- mcpscraper_memory/mcp_models/google_calendar_create_event.py +20 -0
- mcpscraper_memory/mcp_models/harvest_paa.py +20 -0
- mcpscraper_memory/mcp_models/import_service_connection_to_memory.py +17 -0
- mcpscraper_memory/mcp_models/instagram_media_download.py +19 -0
- mcpscraper_memory/mcp_models/instagram_profile_content.py +19 -0
- mcpscraper_memory/mcp_models/library_ingest.py +31 -0
- mcpscraper_memory/mcp_models/list_channel_members.py +18 -0
- mcpscraper_memory/mcp_models/list_channel_messages.py +17 -0
- mcpscraper_memory/mcp_models/list_memory_tags.py +16 -0
- mcpscraper_memory/mcp_models/list_scheduled_actions.py +14 -0
- mcpscraper_memory/mcp_models/list_service_connections.py +10 -0
- mcpscraper_memory/mcp_models/list_shared_with_me.py +14 -0
- mcpscraper_memory/mcp_models/list_vaults.py +16 -0
- mcpscraper_memory/mcp_models/list_webhooks.py +14 -0
- mcpscraper_memory/mcp_models/map_site_urls.py +13 -0
- mcpscraper_memory/mcp_models/maps_place_intel.py +18 -0
- mcpscraper_memory/mcp_models/maps_search.py +20 -0
- mcpscraper_memory/mcp_models/memory_backlinks.py +18 -0
- mcpscraper_memory/mcp_models/memory_capture.py +31 -0
- mcpscraper_memory/mcp_models/memory_export.py +18 -0
- mcpscraper_memory/mcp_models/memory_get.py +18 -0
- mcpscraper_memory/mcp_models/memory_graph_path.py +21 -0
- mcpscraper_memory/mcp_models/memory_graph_universe.py +23 -0
- mcpscraper_memory/mcp_models/memory_list.py +20 -0
- mcpscraper_memory/mcp_models/memory_put.py +26 -0
- mcpscraper_memory/mcp_models/memory_questions.py +18 -0
- mcpscraper_memory/mcp_models/memory_search.py +39 -0
- mcpscraper_memory/mcp_models/memory_suggest.py +17 -0
- mcpscraper_memory/mcp_models/memory_upload.py +22 -0
- mcpscraper_memory/mcp_models/meta_ad_creative_media.py +15 -0
- mcpscraper_memory/mcp_models/my_mentions.py +16 -0
- mcpscraper_memory/mcp_models/pause_scheduled_action.py +15 -0
- mcpscraper_memory/mcp_models/poll_channel.py +21 -0
- mcpscraper_memory/mcp_models/post_message.py +20 -0
- mcpscraper_memory/mcp_models/prepare_memory_write.py +26 -0
- mcpscraper_memory/mcp_models/propose_scheduled_action.py +21 -0
- mcpscraper_memory/mcp_models/provision_defaults.py +23 -0
- mcpscraper_memory/mcp_models/query_fanout_workflow.py +17 -0
- mcpscraper_memory/mcp_models/rank_tracker_workflow.py +26 -0
- mcpscraper_memory/mcp_models/react_message.py +21 -0
- mcpscraper_memory/mcp_models/read_service_connection.py +14 -0
- mcpscraper_memory/mcp_models/record_fact.py +22 -0
- mcpscraper_memory/mcp_models/reddit_thread.py +13 -0
- mcpscraper_memory/mcp_models/remove_channel_member.py +17 -0
- mcpscraper_memory/mcp_models/renew_connected_data_download.py +12 -0
- mcpscraper_memory/mcp_models/reply_message.py +21 -0
- mcpscraper_memory/mcp_models/report_artifact_read.py +14 -0
- mcpscraper_memory/mcp_models/resolve_memory_tags.py +16 -0
- mcpscraper_memory/mcp_models/resume_scheduled_action.py +17 -0
- mcpscraper_memory/mcp_models/revoke_chat_link.py +14 -0
- mcpscraper_memory/mcp_models/revoke_schedule_link.py +14 -0
- mcpscraper_memory/mcp_models/revoke_vault_app_link.py +14 -0
- mcpscraper_memory/mcp_models/revoke_webhook.py +16 -0
- mcpscraper_memory/mcp_models/route_memory.py +22 -0
- mcpscraper_memory/mcp_models/search_serp.py +20 -0
- mcpscraper_memory/mcp_models/set_agent_identity.py +16 -0
- mcpscraper_memory/mcp_models/set_schedule_defaults.py +16 -0
- mcpscraper_memory/mcp_models/set_schedule_entitlement.py +18 -0
- mcpscraper_memory/mcp_models/set_scheduled_action_connections.py +13 -0
- mcpscraper_memory/mcp_models/slack_send_message.py +14 -0
- mcpscraper_memory/mcp_models/storage_usage.py +19 -0
- mcpscraper_memory/mcp_models/table_create.py +19 -0
- mcpscraper_memory/mcp_models/table_delete_rows.py +17 -0
- mcpscraper_memory/mcp_models/table_describe.py +17 -0
- mcpscraper_memory/mcp_models/table_drop.py +16 -0
- mcpscraper_memory/mcp_models/table_insert_rows.py +17 -0
- mcpscraper_memory/mcp_models/table_list.py +14 -0
- mcpscraper_memory/mcp_models/table_query.py +22 -0
- mcpscraper_memory/mcp_models/temporal_recall.py +22 -0
- mcpscraper_memory/mcp_models/test_service_connection.py +13 -0
- mcpscraper_memory/mcp_models/trustpilot_reviews.py +13 -0
- mcpscraper_memory/mcp_models/upsert_memory_tag.py +19 -0
- mcpscraper_memory/mcp_models/validate_memory_write.py +22 -0
- mcpscraper_memory/mcp_models/video_analyze_start.py +21 -0
- mcpscraper_memory/mcp_models/video_analyze_status.py +22 -0
- mcpscraper_memory/mcp_models/video_frame_analysis.py +16 -0
- mcpscraper_memory/mcp_models/video_frame_analysis_status.py +12 -0
- mcpscraper_memory/mcp_models/workflow_artifact_read.py +14 -0
- mcpscraper_memory/mcp_models/workflow_list.py +12 -0
- mcpscraper_memory/mcp_models/workflow_run.py +14 -0
- mcpscraper_memory/mcp_models/workflow_status.py +12 -0
- mcpscraper_memory/mcp_models/workflow_step.py +12 -0
- mcpscraper_memory/mcp_models/workflow_suggest.py +19 -0
- mcpscraper_memory/mcp_models/youtube_harvest.py +15 -0
- mcpscraper_memory/mcp_models/youtube_transcribe.py +13 -0
- mcpscraper_memory/mcp_models/zoom_create_meeting.py +17 -0
- mcpscraper_memory/models/__init__.py +0 -0
- mcpscraper_memory/models/access_accept_share.py +19 -0
- mcpscraper_memory/models/access_approve_sender.py +18 -0
- mcpscraper_memory/models/access_decline_share.py +18 -0
- mcpscraper_memory/models/access_inbox_settings.py +18 -0
- mcpscraper_memory/models/access_invite_account.py +23 -0
- mcpscraper_memory/models/access_issue_key.py +28 -0
- mcpscraper_memory/models/access_list_approved_senders.py +18 -0
- mcpscraper_memory/models/access_list_keys.py +19 -0
- mcpscraper_memory/models/access_note_inbox.py +17 -0
- mcpscraper_memory/models/access_remove_approved_sender.py +19 -0
- mcpscraper_memory/models/access_revoke_key.py +19 -0
- mcpscraper_memory/models/access_revoke_share.py +18 -0
- mcpscraper_memory/models/access_set_scope.py +21 -0
- mcpscraper_memory/models/access_share_note.py +28 -0
- mcpscraper_memory/models/access_share_vault.py +22 -0
- mcpscraper_memory/models/access_swap_vault.py +19 -0
- mcpscraper_memory/models/access_switch_account.py +20 -0
- mcpscraper_memory/models/access_unlink_share.py +18 -0
- mcpscraper_memory/models/add_vault.py +20 -0
- mcpscraper_memory/models/cost_usage.py +30 -0
- mcpscraper_memory/models/create_channel.py +21 -0
- mcpscraper_memory/models/create_scheduled_action.py +27 -0
- mcpscraper_memory/models/create_secure_vault.py +19 -0
- mcpscraper_memory/models/create_webhook.py +21 -0
- mcpscraper_memory/models/delete_note.py +25 -0
- mcpscraper_memory/models/delete_scheduled_action.py +18 -0
- mcpscraper_memory/models/delete_vault.py +20 -0
- mcpscraper_memory/models/fact_history.py +20 -0
- mcpscraper_memory/models/get_chat_link.py +18 -0
- mcpscraper_memory/models/get_message_note.py +19 -0
- mcpscraper_memory/models/get_schedule_link.py +19 -0
- mcpscraper_memory/models/get_schedule_status.py +25 -0
- mcpscraper_memory/models/get_vault_contract.py +19 -0
- mcpscraper_memory/models/library_ingest.py +33 -0
- mcpscraper_memory/models/list_channel_members.py +20 -0
- mcpscraper_memory/models/list_channel_messages.py +19 -0
- mcpscraper_memory/models/list_memory_tags.py +18 -0
- mcpscraper_memory/models/list_scheduled_actions.py +17 -0
- mcpscraper_memory/models/list_shared_with_me.py +17 -0
- mcpscraper_memory/models/list_vaults.py +19 -0
- mcpscraper_memory/models/list_webhooks.py +17 -0
- mcpscraper_memory/models/memory_backlinks.py +20 -0
- mcpscraper_memory/models/memory_capture.py +33 -0
- mcpscraper_memory/models/memory_export.py +20 -0
- mcpscraper_memory/models/memory_get.py +20 -0
- mcpscraper_memory/models/memory_graph_path.py +23 -0
- mcpscraper_memory/models/memory_graph_universe.py +25 -0
- mcpscraper_memory/models/memory_list.py +22 -0
- mcpscraper_memory/models/memory_put.py +28 -0
- mcpscraper_memory/models/memory_questions.py +20 -0
- mcpscraper_memory/models/memory_search.py +24 -0
- mcpscraper_memory/models/memory_suggest.py +19 -0
- mcpscraper_memory/models/memory_upload.py +24 -0
- mcpscraper_memory/models/my_mentions.py +18 -0
- mcpscraper_memory/models/pause_scheduled_action.py +17 -0
- mcpscraper_memory/models/poll_channel.py +23 -0
- mcpscraper_memory/models/post_message.py +22 -0
- mcpscraper_memory/models/prepare_memory_write.py +28 -0
- mcpscraper_memory/models/propose_scheduled_action.py +21 -0
- mcpscraper_memory/models/provision_defaults.py +25 -0
- mcpscraper_memory/models/react_message.py +23 -0
- mcpscraper_memory/models/record_fact.py +24 -0
- mcpscraper_memory/models/remove_channel_member.py +19 -0
- mcpscraper_memory/models/reply_message.py +23 -0
- mcpscraper_memory/models/resolve_memory_tags.py +18 -0
- mcpscraper_memory/models/resume_scheduled_action.py +19 -0
- mcpscraper_memory/models/revoke_chat_link.py +17 -0
- mcpscraper_memory/models/revoke_schedule_link.py +17 -0
- mcpscraper_memory/models/revoke_webhook.py +18 -0
- mcpscraper_memory/models/route_memory.py +24 -0
- mcpscraper_memory/models/set_agent_identity.py +18 -0
- mcpscraper_memory/models/set_schedule_entitlement.py +20 -0
- mcpscraper_memory/models/storage_usage.py +22 -0
- mcpscraper_memory/models/table_create.py +21 -0
- mcpscraper_memory/models/table_delete_rows.py +19 -0
- mcpscraper_memory/models/table_describe.py +19 -0
- mcpscraper_memory/models/table_drop.py +18 -0
- mcpscraper_memory/models/table_insert_rows.py +19 -0
- mcpscraper_memory/models/table_list.py +17 -0
- mcpscraper_memory/models/table_query.py +24 -0
- mcpscraper_memory/models/temporal_recall.py +24 -0
- mcpscraper_memory/models/upsert_memory_tag.py +21 -0
- mcpscraper_memory/models/validate_memory_write.py +24 -0
- mcpscraper_memory/models/video_analyze_start.py +23 -0
- mcpscraper_memory/models/video_analyze_status.py +24 -0
- mcpscraper_memory_sdk-0.13.0.dist-info/METADATA +61 -0
- mcpscraper_memory_sdk-0.13.0.dist-info/RECORD +261 -0
- mcpscraper_memory_sdk-0.13.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class DeleteNoteInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
vault: str | None = Field(None, alias="vault", description="Vault to delete from. Optional; defaults to the session active vault, then the first vault the caller is entitled to.")
|
|
9
|
+
path: str | None = Field(None, alias="path", description="Exact vault-relative note path to delete, e.g. projects/q3-plan (as returned by memory-list or recall). Required unless shareId is given.")
|
|
10
|
+
share_id: str | None = Field(None, alias="shareId", description="Destroy a note shared with you and you accepted, by its shareId, instead of vault+path. Requires the share to grant delete permission and baseRevision (mandatory for shared notes).")
|
|
11
|
+
base_revision: float | None = Field(None, alias="baseRevision", description="Revision the delete is based on (from a prior get). When provided, the delete only applies if the note is still at this revision; otherwise it is rejected as a conflict instead of destroying a concurrent edit. Mandatory when shareId is given; optional otherwise (omit to delete unconditionally).")
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class DeleteNoteOutput(BaseModel):
|
|
15
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
16
|
+
|
|
17
|
+
ok: bool = Field(..., alias="ok", description="True when the delete request was processed; false on an auth/scope/lookup error or a revision conflict.")
|
|
18
|
+
vault: str | None = Field(None, alias="vault", description="The vault the delete was applied to (after defaulting). Present when ok is true.")
|
|
19
|
+
deleted: bool | None = Field(None, alias="deleted", description="True if a note was removed; false if no matching note existed (idempotent). Present when ok is true.")
|
|
20
|
+
conflict: bool | None = Field(None, alias="conflict", description="True when baseRevision did not match the current revision: someone else changed the note first. Nothing was deleted.")
|
|
21
|
+
current: dict[str, Any] | None = Field(None, alias="current", description="Present only when conflict is true: the note as it stands now, so the caller can re-read before deciding whether to still delete.")
|
|
22
|
+
code: str | None = Field(None, alias="code", description="Machine-readable denial code when ok is false: revision_conflict.")
|
|
23
|
+
error: str | None = Field(None, alias="error", description="Human-readable failure reason when ok is false.")
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class DeleteScheduledActionInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
id: str = Field(..., alias="id", description="The scheduled action id.")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class DeleteScheduledActionOutput(BaseModel):
|
|
12
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
13
|
+
|
|
14
|
+
ok: bool = Field(..., alias="ok", description="")
|
|
15
|
+
deleted: bool | None = Field(None, alias="deleted", description="")
|
|
16
|
+
error: str | None = Field(None, alias="error", description="")
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class DeleteVaultInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
vault: str = Field(..., alias="vault", description="Exact name of the vault to delete. The caller must own this vault and hold admin scope on it.")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class DeleteVaultOutput(BaseModel):
|
|
12
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
13
|
+
|
|
14
|
+
ok: bool = Field(..., alias="ok", description="True when the vault was deleted; false on auth/scope/ownership error.")
|
|
15
|
+
vault: str | None = Field(None, alias="vault", description="The deleted vault name. Present when ok is true.")
|
|
16
|
+
deleted_notes: float | None = Field(None, alias="deletedNotes", description="Number of notes removed from the vault. Present when ok is true.")
|
|
17
|
+
deleted_facts: float | None = Field(None, alias="deletedFacts", description="Number of facts (active + superseded) removed from the vault. Present when ok is true.")
|
|
18
|
+
error: str | None = Field(None, alias="error", description="Human-readable failure reason when ok is false.")
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class DescribeServiceConnectionToolInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
connection_id: str = Field(..., alias="connectionId", description="A tenant-owned connectionId from list_service_connections.")
|
|
9
|
+
tool: str = Field(..., alias="tool", description="One exact name from that connection's readTools or actionTools. Admin-blocked and arbitrary names are rejected.")
|
|
10
|
+
fresh: bool | None = Field(None, alias="fresh", description="Bypass the short-lived sanitized schema cache. Ownership, connection state, and tool policy are still rechecked; use only when a provider tool catalog just changed.")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class DescribeServiceConnectionToolOutput(BaseModel):
|
|
14
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class DiffPageInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
url: str = Field(..., alias="url", description="Public http/https URL to check for changes since the last diff_page call.")
|
|
9
|
+
allow_local: bool | None = Field(None, alias="allowLocal", description="Allow localhost and private-network URLs. Local development only.")
|
|
10
|
+
reset_baseline: bool | None = Field(None, alias="resetBaseline", description="Discard any previously stored snapshot for this URL and capture the current content as a fresh baseline instead of diffing against history. Use when you deliberately want to restart change tracking.")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class DiffPageOutput(BaseModel):
|
|
14
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class DirectoryWorkflowInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
query: str = Field(..., alias="query", description="Business category, niche, or keyword to search on Google Maps for every market. Do not include the city.")
|
|
9
|
+
state: str | None = Field(None, alias="state", description="US state abbreviation or name used to select Census places, e.g. TN.")
|
|
10
|
+
min_population: int | None = Field(None, alias="minPopulation", description="Minimum Census place population for market selection.")
|
|
11
|
+
population_year: int | None = Field(None, alias="populationYear", description="Census population estimate year (2020-2025 Population Estimates Program).")
|
|
12
|
+
max_cities: int | None = Field(None, alias="maxCities", description="Maximum markets to process after sorting by population descending.")
|
|
13
|
+
max_results_per_city: int | None = Field(None, alias="maxResultsPerCity", description="Google Maps candidates to collect per city.")
|
|
14
|
+
concurrency: int | None = Field(None, alias="concurrency", description="City Maps searches to run in parallel.")
|
|
15
|
+
include_zip_groups: bool | None = Field(None, alias="includeZipGroups", description="Attach ZIP groups from a configured US ZIPS CSV when available (MCP_SCRAPER_USZIPS_CSV_PATH or usZipsCsvPath).")
|
|
16
|
+
us_zips_csv_path: str | None = Field(None, alias="usZipsCsvPath", description="Local/test-only path to a US ZIPS CSV (state_abbr, zipcode, county, city columns). Deployed APIs should use MCP_SCRAPER_USZIPS_CSV_PATH instead. For ZIP enrichment, set MCP_SCRAPER_USZIPS_CSV_PATH on the server, or pass this in local/test mode.")
|
|
17
|
+
save_csv: bool | None = Field(None, alias="saveCsv", description="Save a directory-ready CSV of results to the MCP Scraper output directory and return its path.")
|
|
18
|
+
proxy_mode: Literal["location", "configured", "none"] | None = Field(None, alias="proxyMode", description="Proxy behavior per city search. Leave unset for the direct localized Google route; location is an explicit residential-proxy override.")
|
|
19
|
+
proxy_zip: str | None = Field(None, alias="proxyZip", description="Optional ZIP override for proxy targeting; normally omitted.")
|
|
20
|
+
debug: bool | None = Field(None, alias="debug", description="Include sanitized browser/proxy diagnostics.")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class DirectoryWorkflowOutput(BaseModel):
|
|
24
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class ExportConnectedServiceDataInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
connection_id: str = Field(..., alias="connectionId", description="A tenant-owned connectionId from list_service_connections.")
|
|
9
|
+
dataset: Literal["auto", "emails", "calendar_events", "zoom_recordings", "zoom_transcripts", "meta_ads_insights", "search_console_performance", "resend_data", "resend_emails", "resend_received_emails", "resend_logs", "resend_contacts", "resend_broadcasts", "resend_templates"] | None = Field(None, alias="dataset", description="Dataset to export. auto maps Gmail to emails, Google Calendar to calendar_events, Zoom to zoom_transcripts, Meta Marketing to meta_ads_insights, Google Search Console to search_console_performance, and Resend to resend_data. Search Console walks bounded Search Analytics rows across every accessible property. Meta walks daily account, campaign, ad-set, and ad insight levels across the connected ad accounts. The Resend aggregate walks 12 practical safe collections; six core collections are also individually selectable.")
|
|
10
|
+
last_days: int | None = Field(None, alias="lastDays", description="Relative range ending at to (or now). Defaults to 7 when from is omitted. Do not pass together with from.")
|
|
11
|
+
from_: str | None = Field(None, alias="from", description="Inclusive RFC3339 range start. Use instead of lastDays.")
|
|
12
|
+
to: str | None = Field(None, alias="to", description="Exclusive RFC3339 range end. Defaults to now.")
|
|
13
|
+
max_items: int | None = Field(None, alias="maxItems", description="Maximum records to include in this export invocation. Pagination and detail retrieval happen server-side.")
|
|
14
|
+
delivery: Literal["auto", "artifact"] | None = Field(None, alias="delivery", description="auto returns small results inline and stores larger results in private Blob. artifact always creates a private downloadable JSONL artifact.")
|
|
15
|
+
continuation: dict[str, Any] | None = Field(None, alias="continuation", description="Preferred resume input. Pass the entire continuation object returned by a prior partial export unchanged; it preserves the exact original range and dataset.")
|
|
16
|
+
cursor: str | None = Field(None, alias="cursor", description="Legacy resume input. When used, also pass the exact original from, to, and dataset. Prefer continuation.")
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ExportConnectedServiceDataOutput(BaseModel):
|
|
20
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class ExportSearchConsoleTableDataInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
table_name: str = Field(..., alias="tableName", description="Typed Search Console tableName returned by list_service_connections after a successful connection_sync run.")
|
|
9
|
+
filters: list[dict[str, Any]] | None = Field(None, alias="filters", description="Optional filters to AND together before download. Use table-describe or the documented typed columns.")
|
|
10
|
+
sort: dict[str, Any] | None = Field(None, alias="sort", description="Optional row ordering for the JSONL download.")
|
|
11
|
+
max_rows: int | None = Field(None, alias="maxRows", description="Maximum matching persisted rows to place in this artifact. Use filters to bound large tables.")
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ExportSearchConsoleTableDataOutput(BaseModel):
|
|
15
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class ExtractSiteInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
url: str = Field(..., alias="url", description="Public website URL or domain to crawl for page CONTENT (map + scrape). For a technical SEO audit use audit_site instead — this returns content only, not analysis.")
|
|
9
|
+
max_pages: int | None = Field(None, alias="maxPages", description="Maximum pages to extract. Bulk crawls (over 25 pages) switch to folder mode: each page saved as its own Markdown file, with a summary plus folder path returned instead of inlining content.")
|
|
10
|
+
rotate_proxies: bool | None = Field(None, alias="rotateProxies", description="Route page fetches through rotating residential proxies to defeat rate-limiting and bot blocks (403/429). Slower and pricier — use only when a site blocks normal crawling.")
|
|
11
|
+
rotate_proxy_every: int | None = Field(None, alias="rotateProxyEvery", description="When rotateProxies is on, pages fetched per proxy before rotating. Default 30.")
|
|
12
|
+
formats: list[Literal["markdown", "links", "json", "images", "branding"]] | None = Field(None, alias="formats", description="Per-page output formats: markdown, links, json, images are captured cheaply from HTML; branding (site-level logo/colors/fonts) requires a browser and adds time. Defaults to markdown+links.")
|
|
13
|
+
background: bool | None = Field(None, alias="background", description="Run the crawl as a background job instead of blocking this call, returning a jobId immediately — poll it with check_site_export to get a downloadable zip (all page content, plus real image files if downloadImages is set) once ready. Use for large sites where a synchronous call would be slow.")
|
|
14
|
+
download_images: bool | None = Field(None, alias="downloadImages", description="Download every discovered image as a real file into the export bundle (not just image URLs/stats). OFF by default — must be explicitly set true. Implies background regardless of the background flag, since downloading a whole site's images is too slow to run synchronously. Capped at 20 images/page and 500 images/site.")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ExtractSiteOutput(BaseModel):
|
|
18
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class ExtractUrlInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
url: str = Field(..., alias="url", description="Public http/https URL to extract.")
|
|
9
|
+
screenshot: bool | None = Field(None, alias="screenshot", description="Capture a full-page screenshot, saved to ~/Downloads/mcp-scraper/screenshots/ and returned inline.")
|
|
10
|
+
screenshot_device: Literal["desktop", "mobile"] | None = Field(None, alias="screenshotDevice", description="Viewport for screenshot. desktop = 1440×900, mobile = 390×844.")
|
|
11
|
+
extract_branding: bool | None = Field(None, alias="extractBranding", description="Extract brand colors, fonts, logo, and favicon via a rendered browser session.")
|
|
12
|
+
download_media: bool | None = Field(None, alias="downloadMedia", description="Extract and download page media (images/video/audio) to ~/Downloads/mcp-scraper/media/. Ad/tracking noise is filtered automatically.")
|
|
13
|
+
media_types: list[Literal["image", "video", "audio"]] | None = Field(None, alias="mediaTypes", description="Which media types to download. Default all three.")
|
|
14
|
+
allow_local: bool | None = Field(None, alias="allowLocal", description="Allow localhost and private-network URLs. Local development only.")
|
|
15
|
+
deposit_to_vault: bool | None = Field(None, alias="depositToVault", description="Save the full page content into the user's MCP Memory vault server-side, embedded for semantic recall — the full body is NOT returned to chat.")
|
|
16
|
+
vault_name: str | None = Field(None, alias="vaultName", description="Optional vault to deposit into. Defaults to the user's personal vault.")
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ExtractUrlOutput(BaseModel):
|
|
20
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class FacebookAdSearchInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
query: str = Field(..., alias="query", description="Advertiser, brand, competitor, niche, or keyword to search in Facebook Ad Library.")
|
|
9
|
+
country: str | None = Field(None, alias="country", description="Two-letter Ad Library country code. Default US. Examples: US, CA, GB, AU.")
|
|
10
|
+
max_results: int | None = Field(None, alias="maxResults", description="Maximum advertisers to return. Default 10, maximum 20. Prefer tighter search terms over maxing this out.")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class FacebookAdSearchOutput(BaseModel):
|
|
14
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class FacebookAdTranscribeInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
video_url: str = Field(..., alias="videoUrl", description="Direct Meta/Facebook CDN video URL from facebook_page_intel or meta_ad_creative_media. Use transient sources immediately. Do not pass a public post/reel/share URL—use facebook_video_transcribe for those.")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class FacebookAdTranscribeOutput(BaseModel):
|
|
12
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class FacebookPageIntelInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
page_id: str | None = Field(None, alias="pageId", description="Facebook advertiser/page ID. Use only a value returned by facebook_ad_search or copied from Ad Library.")
|
|
9
|
+
library_id: str | None = Field(None, alias="libraryId", description="Facebook Ad Library archive ID. Use a value returned by facebook_ad_search, or a libraryId/adArchiveId visible in Ad Library.")
|
|
10
|
+
query: str | None = Field(None, alias="query", description="Broad Ad Library keyword discovery when pageId/libraryId is not known. Results can mix unrelated advertisers; inspect matchConfidence, matchedAdvertisers, and warnings before analysis. One of pageId, libraryId, or query is required.")
|
|
11
|
+
max_ads: int | None = Field(None, alias="maxAds", description="Maximum ads to inspect. Default 50, maximum 200.")
|
|
12
|
+
country: str | None = Field(None, alias="country", description="Two-letter Ad Library country code. Default US.")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class FacebookPageIntelOutput(BaseModel):
|
|
16
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class FacebookVideoTranscribeInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
url: str = Field(..., alias="url", description="Public Facebook reel/video/watch/post/share URL from facebook.com, m.facebook.com, or fb.watch. For connected account ads, get the correct public candidate from meta_ad_creative_media instead of guessing URL structure.")
|
|
9
|
+
quality: Literal["best", "hd", "sd"] | None = Field(None, alias="quality", description="Preferred progressive MP4 quality. Use best by default; hd prefers the highest HD progressive URL; sd forces the SD URL.")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class FacebookVideoTranscribeOutput(BaseModel):
|
|
13
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class FactHistoryInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
vault: str | None = Field(None, alias="vault", description="Vault to read from. Optional; defaults to the session active vault, then the first vault the caller is entitled to.")
|
|
9
|
+
subject: str = Field(..., alias="subject", description="The subject whose history to read (e.g. \"db preference\"). Canonicalized to match how it was recorded.")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class FactHistoryOutput(BaseModel):
|
|
13
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
14
|
+
|
|
15
|
+
ok: bool = Field(..., alias="ok", description="True when the history was read; false on an auth/scope error.")
|
|
16
|
+
current: Any | None = Field(None, alias="current", description="The current active fact for the subject, or null if none exists. Present when ok is true.")
|
|
17
|
+
history: list[Any] | None = Field(None, alias="history", description="The superseded chain newest → oldest — the audit trail. Empty when nothing has been superseded. Present when ok is true.")
|
|
18
|
+
error: str | None = Field(None, alias="error", description="Human-readable failure reason when ok is false.")
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class G2ReviewsInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
product: str = Field(..., alias="product", description="The product's G2 URL slug, e.g. \"notion\" from g2.com/products/notion/reviews (also accepts a full g2.com product URL).")
|
|
9
|
+
max_pages: int | None = Field(None, alias="maxPages", description="Review pages to fetch (~10 reviews per page). Default 5 (~50 reviews). Maximum 50 — this tool is for sampling, not full-corpus export.")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class G2ReviewsOutput(BaseModel):
|
|
13
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class GetChatLinkInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class GetChatLinkOutput(BaseModel):
|
|
10
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
11
|
+
|
|
12
|
+
ok: bool = Field(..., alias="ok", description="True on success; false on auth error.")
|
|
13
|
+
url: str | None = Field(None, alias="url", description="The chat link. Present only the first time a link is minted for this identity.")
|
|
14
|
+
already_exists: bool | None = Field(None, alias="alreadyExists", description="True when a link already exists and was NOT re-shown. Use revoke-chat-link then call this again to get a fresh one.")
|
|
15
|
+
error: str | None = Field(None, alias="error", description="Human-readable failure reason when ok is false.")
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class GetMessageNoteInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
vault: str = Field(..., alias="vault", description="The channel (vault) the message is in.")
|
|
9
|
+
message_id: str = Field(..., alias="messageId", description="The message (from list-channel-messages / poll-channel) whose attached note to read.")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class GetMessageNoteOutput(BaseModel):
|
|
13
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
14
|
+
|
|
15
|
+
ok: bool = Field(..., alias="ok", description="True when the note was found and readable; false on auth/scope/not-found error.")
|
|
16
|
+
note: dict[str, Any] | None = Field(None, alias="note", description="Present when ok is true.")
|
|
17
|
+
error: str | None = Field(None, alias="error", description="Human-readable failure reason when ok is false.")
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class GetScheduleLinkInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class GetScheduleLinkOutput(BaseModel):
|
|
10
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
11
|
+
|
|
12
|
+
ok: bool = Field(..., alias="ok", description="True on success; false on auth error.")
|
|
13
|
+
url: str | None = Field(None, alias="url", description="The schedule link. Present only the first time a link is minted for this identity.")
|
|
14
|
+
already_exists: bool | None = Field(None, alias="alreadyExists", description="True when a link already exists and was NOT re-shown. Use revoke-schedule-link then call this again to get a fresh one.")
|
|
15
|
+
code: str | None = Field(None, alias="code", description="Machine-readable denial code when the link cannot be issued.")
|
|
16
|
+
error: str | None = Field(None, alias="error", description="Human-readable failure reason when ok is false.")
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class GetScheduleStatusInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class GetScheduleStatusOutput(BaseModel):
|
|
10
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
11
|
+
|
|
12
|
+
ok: bool = Field(..., alias="ok", description="")
|
|
13
|
+
enabled: bool | None = Field(None, alias="enabled", description="")
|
|
14
|
+
billing_mode: str | None = Field(None, alias="billingMode", description="")
|
|
15
|
+
run_base_credits: float | None = Field(None, alias="runBaseCredits", description="")
|
|
16
|
+
llm_cost_multiplier: float | None = Field(None, alias="llmCostMultiplier", description="")
|
|
17
|
+
quota_per_period: float | None = Field(None, alias="quotaPerPeriod", description="")
|
|
18
|
+
used_this_period: float | None = Field(None, alias="usedThisPeriod", description="")
|
|
19
|
+
period_start: str | None = Field(None, alias="periodStart", description="")
|
|
20
|
+
default_timezone: Any | None = Field(None, alias="defaultTimezone", description="IANA timezone applied to new schedules that name a time without a zone; null means UTC.")
|
|
21
|
+
code: str | None = Field(None, alias="code", description="Machine-readable reason scheduling is unavailable.")
|
|
22
|
+
error: str | None = Field(None, alias="error", description="")
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class GetVaultAppLinkInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class GetVaultAppLinkOutput(BaseModel):
|
|
10
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
11
|
+
|
|
12
|
+
ok: bool = Field(..., alias="ok", description="True when the request succeeded.")
|
|
13
|
+
url: str | None = Field(None, alias="url", description="Vault App link. Present only when the secret is first minted; anyone holding it can use the Vault App as this identity.")
|
|
14
|
+
already_exists: bool | None = Field(None, alias="alreadyExists", description="True when an active Vault App link exists but its secret cannot be shown again.")
|
|
15
|
+
error: str | None = Field(None, alias="error", description="Human-readable error when the request cannot be completed.")
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class GetVaultContractInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
vault: str = Field(..., alias="vault", description="One governed vault: Ideas, Inspiration, Knowledge, Library, People, Communications, Calendar, Tasks, Projects, Issues, Improvement Log, Experiments, or Sprint.")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class GetVaultContractOutput(BaseModel):
|
|
12
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
13
|
+
|
|
14
|
+
ok: bool = Field(..., alias="ok", description="")
|
|
15
|
+
vault: str | None = Field(None, alias="vault", description="")
|
|
16
|
+
contract: dict[str, Any] | None = Field(None, alias="contract", description="")
|
|
17
|
+
error: str | None = Field(None, alias="error", description="")
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class GmailSendMessageInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
connection_id: str = Field(..., alias="connectionId", description="A Gmail connectionId from list_service_connections, with actionsEnabled true.")
|
|
9
|
+
to: str = Field(..., alias="to", description="Recipient email address.")
|
|
10
|
+
subject: str = Field(..., alias="subject", description="Email subject line.")
|
|
11
|
+
body: str = Field(..., alias="body", description="Plain-text email body.")
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class GmailSendMessageOutput(BaseModel):
|
|
15
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class GoogleAdsPageIntelInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
advertiser_id: str | None = Field(None, alias="advertiserId", description="Google Ads Transparency advertiser ID (starts with AR...). Use one returned by google_ads_search; do not construct one yourself.")
|
|
9
|
+
domain: str | None = Field(None, alias="domain", description="A domain (e.g. getviktor.com) whose primary advertiser to inspect when advertiserId is unknown. One of advertiserId or domain is required.")
|
|
10
|
+
region: str | None = Field(None, alias="region", description="Two-letter region code for where the ads are shown. Default US.")
|
|
11
|
+
max_ads: int | None = Field(None, alias="maxAds", description="Maximum creatives to inspect and hydrate. Default 50, maximum 200. Prefer 25-50 for focused scans.")
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class GoogleAdsPageIntelOutput(BaseModel):
|
|
15
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class GoogleAdsSearchInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
query: str = Field(..., alias="query", description="A domain (e.g. getviktor.com) or advertiser/brand name to look up in Google Ads Transparency Center.")
|
|
9
|
+
region: str | None = Field(None, alias="region", description="Two-letter region code for where the ads are shown. Default US. Examples: US, CA, GB, AU.")
|
|
10
|
+
max_results: int | None = Field(None, alias="maxResults", description="Maximum advertisers to return. Default 10, maximum 20.")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class GoogleAdsSearchOutput(BaseModel):
|
|
14
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class GoogleAdsTranscribeInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
video_url: str = Field(..., alias="videoUrl", description="Direct googlevideo.com playback URL from google_ads_page_intel. For YouTube-hosted ads use youtube_transcribe instead.")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class GoogleAdsTranscribeOutput(BaseModel):
|
|
12
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class GoogleCalendarCreateEventInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
connection_id: str = Field(..., alias="connectionId", description="A Google Calendar connectionId from list_service_connections, with actionsEnabled true.")
|
|
9
|
+
calendar_id: str | None = Field(None, alias="calendarId", description="Calendar to create the event in. Default \"primary\".")
|
|
10
|
+
summary: str = Field(..., alias="summary", description="Event title.")
|
|
11
|
+
description: str = Field(..., alias="description", description="Required event context. Include the purpose or agenda supplied by the user and the Zoom join link when one was created.")
|
|
12
|
+
location: str | None = Field(None, alias="location", description="Event location.")
|
|
13
|
+
start_date_time: str = Field(..., alias="startDateTime", description="Start time, ISO 8601, e.g. \"2026-07-15T09:00:00-06:00\".")
|
|
14
|
+
end_date_time: str = Field(..., alias="endDateTime", description="End time, ISO 8601, e.g. \"2026-07-15T10:00:00-06:00\".")
|
|
15
|
+
time_zone: str | None = Field(None, alias="timeZone", description="IANA timezone, e.g. \"America/Denver\". Applies to both start and end.")
|
|
16
|
+
attendees: list[dict[str, Any]] = Field(..., alias="attendees", description="Required attendee list. Include every person the user asked to invite; use an empty array only when no invitee was identified.")
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class GoogleCalendarCreateEventOutput(BaseModel):
|
|
20
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class HarvestPaaInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
query: str = Field(..., alias="query", description="The search query. KEEP the place in the query text for localized results (e.g. \"best hvac company Denver CO\") and also set location — city-in-query is what localizes reliably.")
|
|
9
|
+
location: str | None = Field(None, alias="location", description="City, region, or country for geo signals, e.g. \"Denver, CO\". Set alongside city-in-query wording; alone it does NOT reliably localize.")
|
|
10
|
+
max_questions: int | None = Field(None, alias="maxQuestions", description="PAA questions to extract. Default 30, maximum 200. Use 10 for quick probes, 100-200 for deep research. Billed per extracted question; unused hold refunded.")
|
|
11
|
+
gl: str | None = Field(None, alias="gl", description="Google country code inferred from location or user language.")
|
|
12
|
+
hl: str | None = Field(None, alias="hl", description="Google interface/content language inferred from the user request.")
|
|
13
|
+
device: Literal["desktop", "mobile"] | None = Field(None, alias="device", description="SERP device context. Use mobile only for mobile rankings.")
|
|
14
|
+
proxy_mode: Literal["location", "configured", "none"] | None = Field(None, alias="proxyMode", description="Leave unset (clean egress). Do NOT set \"location\" just because a city was named — that comes from city-in-query wording. \"location\" forces residential geo-IP for rank-tracking fidelity, is frequently CAPTCHA-blocked, and accepts failures.")
|
|
15
|
+
proxy_zip: str | None = Field(None, alias="proxyZip", description="US ZIP for residential geo-IP targeting. Only meaningful with proxyMode \"location\".")
|
|
16
|
+
debug: bool | None = Field(None, alias="debug", description="Include sanitized diagnostics for debugging localization, CAPTCHA, or proxy behavior.")
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class HarvestPaaOutput(BaseModel):
|
|
20
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class ImportServiceConnectionToMemoryInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
connection_id: str = Field(..., alias="connectionId", description="A tenant-owned connectionId from list_service_connections.")
|
|
9
|
+
provider_config_key: str = Field(..., alias="providerConfigKey", description="The exact providerConfigKey returned with that connection. It is matched together with connectionId against the authenticated caller.")
|
|
10
|
+
tool: str = Field(..., alias="tool", description="One exact current readTools entry for that connection. Actions, admin tools, and unlisted names are rejected.")
|
|
11
|
+
args: dict[str, Any] | None = Field(None, alias="args", description="JSON arguments for one bounded provider read. The serialized object may be at most 64 KiB.")
|
|
12
|
+
vault: str = Field(..., alias="vault", description="An existing ordinary Memory vault the caller can write and index. Secure and channel vaults are rejected because this tool creates searchable RAG content.")
|
|
13
|
+
title: str | None = Field(None, alias="title", description="Optional human-readable snapshot title. The server always chooses the stable storage path.")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ImportServiceConnectionToMemoryOutput(BaseModel):
|
|
17
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class InstagramMediaDownloadInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
url: str = Field(..., alias="url", description="Instagram post, reel, or tv URL, e.g. https://www.instagram.com/reel/SHORTCODE/.")
|
|
9
|
+
profile: str | None = Field(None, alias="profile", description="Optional saved hosted browser profile name for authenticated Instagram access.")
|
|
10
|
+
save_profile_changes: bool | None = Field(None, alias="saveProfileChanges", description="Save browser changes back to the hosted profile. Leave unset unless intentionally updating the saved login.")
|
|
11
|
+
media_types: list[Literal["image", "video", "audio"]] | None = Field(None, alias="mediaTypes", description="Which media types to download when downloadMedia is true.")
|
|
12
|
+
download_media: bool | None = Field(None, alias="downloadMedia", description="Download extracted text/media files to the output directory. Media URLs are always returned even when false.")
|
|
13
|
+
download_all_tracks: bool | None = Field(None, alias="downloadAllTracks", description="Download every captured MP4 track instead of only the best video/audio pair.")
|
|
14
|
+
include_transcript: bool | None = Field(None, alias="includeTranscript", description="Transcribe the selected audio track. Adds transcription cost and time.")
|
|
15
|
+
mux: bool | None = Field(None, alias="mux", description="Mux separately downloaded video/audio tracks into one MP4 if ffmpeg is available.")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class InstagramMediaDownloadOutput(BaseModel):
|
|
19
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from typing import Any, Literal
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class InstagramProfileContentInput(BaseModel):
|
|
6
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
7
|
+
|
|
8
|
+
handle: str | None = Field(None, alias="handle", description="Instagram handle, with or without @. Provide handle or url.")
|
|
9
|
+
url: str | None = Field(None, alias="url", description="Instagram profile URL. Provide handle or url.")
|
|
10
|
+
profile: str | None = Field(None, alias="profile", description="Optional saved hosted browser profile name for authenticated Instagram access.")
|
|
11
|
+
save_profile_changes: bool | None = Field(None, alias="saveProfileChanges", description="Save browser changes back to the hosted profile. Leave unset unless intentionally updating the saved login.")
|
|
12
|
+
max_items: int | None = Field(None, alias="maxItems", description="Maximum grid URLs to collect. Default 50, maximum 2000.")
|
|
13
|
+
max_scrolls: int | None = Field(None, alias="maxScrolls", description="Maximum pagination scroll attempts. Default 10, maximum 250.")
|
|
14
|
+
scroll_delay_ms: int | None = Field(None, alias="scrollDelayMs", description="Delay after each scroll before collecting new links. Default 1200ms.")
|
|
15
|
+
stable_scroll_limit: int | None = Field(None, alias="stableScrollLimit", description="Stop after this many consecutive scrolls with no new links.")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class InstagramProfileContentOutput(BaseModel):
|
|
19
|
+
model_config = ConfigDict(populate_by_name=True, extra="allow")
|