Tool reference

Every tool the StickyPrompts MCP server exposes to API keys, grouped by area, with its arguments, the permission it needs, whether it writes, and how its result comes back.

19 min read · Updated 28 September 2026

This is the complete list of tools an API key can see. Your client sees only the tools whose permission your key holds - see MCP overview. Each tool returns one text item containing a JSON document; the result shapes are shown per tool.

How to read this page. Read tools only read. Write tools create, change, delete or send something. Async tools return before the work is done and must be polled. Arguments typed number are read as integers unless noted. Paged tools take limit and offset and return total_count, limit and offset.

At a glance

AreaTools
Chat and conversationssend_message, get_conversation, list_conversations, delete_conversation
Prompts and runslist_prompts, get_prompt, run_prompt, custom_run, list_ai_models
Agents and workflowslist_agents, get_agent, list_workflow_tasks, get_workflow_task, run_workflow_task
Knowledge and fileslist_knowledge_bases, search_knowledge_base, list_files, get_file
Projects and teamslist_projects, get_project, create_project, delete_project, list_workspace_members, list_teams, list_team_members
Media generationgenerate_image, edit_image, generate_video, get_video_generation_status, delete_video_generation, generate_speech, get_tts_generation_status, delete_tts_generation, generate_music, get_music_generation_status, delete_music_generation
Transcriptiontranscribe, get_transcription_status, delete_transcription
Spreadsheetslist_spreadsheet_processing_tasks, get_spreadsheet_processing_task, start_spreadsheet_processing, pause_spreadsheet_processing, resume_spreadsheet_processing
Integrations: emaillist_email_connections, send_email
Integrations: CRMlist_crm_connections, search_crm_contacts, list_crm_contacts, add_crm_contact, edit_crm_contact, search_crm_deals, list_crm_deals, create_crm_deal, list_crm_lists, list_crm_tags
Integrations: databaseslist_database_connections, list_database_tables, describe_database_tables, run_database_query
Integrations: storagelist_storage_connections, browse_storage_folder, search_storage_files, get_storage_entry, import_storage_files, export_file_to_storage
Searchsearch
Staff onlyget_usage_statistics

Chat and conversations

send_message

Send a message to an AI model and get its response, synchronously. Omit conversation_id to start a new conversation; pass one to continue it. This creates or updates the same conversation you see in the StickyPrompts app.

Write Permission conversations_manage

Arguments
message string required
The message to send.
conversation_id number optional
An existing conversation you own. Omit to start a new one.
ai_model_id number optional
The model for a new conversation, from list_ai_models. Ignored when continuing a conversation, which keeps its own model. Always pass it for a new conversation: without it the call currently fails with no AI model is selected, try reselecting model.

Result: {"conversation_id": <id>, "text": "<assistant reply>"}. A message that @mentions one of your agents by its tag is routed to that agent, as in the app. Errors: tool error conversation not found; model and provider failures are JSON-RPC errors.

get_conversation

Get a conversation you own, including its message transcript.

Read Permission conversations_get

Arguments
conversation_id number required
The conversation to read.

Result: {"id", "name", "messages": [{"is_user": bool, "text": "..."}]}. Errors: tool error conversation not found.

list_conversations

List your own interactive conversations (not team-shared or agent ones), a page at a time, most recently updated first.

Read Permission conversations_get

Arguments
search string optional
Matched against message text.
limit number optional default 20
Page size.
offset number optional default 0
Items to skip.

Result: {"conversations": [{"id", "name"}], "total_count", "limit", "offset"}.

delete_conversation

Delete a conversation you own.

Write Destructive Permission conversations_delete

Arguments
conversation_id number required
The conversation to delete.

Result: {"deleted": true}. Errors: tool error conversation not found.

Prompts and runs

list_prompts

List your own prompts (not project-scoped, and not prompts shared with you), a page at a time. Use get_prompt afterwards to see a prompt’s variables before calling run_prompt.

Read Permission prompts_get

Arguments
search string optional
Matched against name and description.
limit number optional default 20
Page size.
offset number optional default 0
Items to skip.

Result: {"prompts": [{"id", "name", "slug", "description", "is_favorite"}], "total_count", "limit", "offset"}.

get_prompt

Get a prompt you own, including its current version’s content and the variables it accepts.

Read Permission prompts_get

Arguments
id string required
Numeric ID or slug.

Result: {"id", "name", "slug", "description", "content", "variables": [{"slug", "name", "description", "required", "default_value"}]}. Errors: tool error prompt not found, also for prompts shared with you that you do not own.

run_prompt

Fill in a prompt’s variables and run it against a model, returning the response text. Runs as a single detached call; it does not create an interactive conversation in the app.

Write Permission run_prompt

Arguments
id string required
Numeric ID or slug of a prompt you own.
ai_model_id number required
From list_ai_models. There is no "auto" value.
variables object optional
Map of variable slug to string value, for example {"customer": "Bluebird Market"}. Omitted variables use their default; unknown keys are ignored.

Result: {"text": "<model response>"}. Errors: tool errors prompt not found, prompt has no current version, variable "<slug>" must be a string, missing a value for a required variable, or the sensitive-data message if a guardrail blocks the filled prompt. Model and provider failures are JSON-RPC errors.

custom_run

Run raw prompt text against a model and return the response text, without a saved prompt. Runs as a single detached call; it does not create a conversation.

Write Permission custom_run

Arguments
prompt string required
The text to send.
ai_model_id number required
From list_ai_models.

Result: {"text": "<model response>"}.

list_ai_models

List the models available to run against, excluding models restricted by your workspace (including data-residency rules) and, by default, deprecated models.

Read Permission ai_models_get

Arguments
search string optional
Matched against the model name.
include_deprecated boolean optional default false
Include deprecated models.

Result: {"models": [{"id", "name", "powered_by", "description", "premium"}]}, in the platform’s sort order.

Agents and workflows

list_agents

List your own agents (not agents shared with you by a team or workspace). Not paginated.

Read Permission agents_get

Arguments
search string optional
Matched against the agent name.

Result: {"agents": [{"id", "name", "slug", "tag"}]}. The tag is what you @mention in send_message.

get_agent

Get an agent you have access to, including its system prompt and configured model.

Read Permission agents_get

Arguments
id string required
Numeric ID or slug.

Result: {"id", "name", "slug", "description", "system_prompt", "ai_model_id", "ai_model_name"}. Errors: tool errors agent not found, you don't have access to this agent.

list_workflow_tasks

List your own scheduled workflow tasks, a page at a time.

Read Permission workflow_tasks_get

Arguments
search string optional
Case-insensitive match on the name.
limit number optional default 20
Page size.
offset number optional default 0
Items to skip.

Result: {"workflow_tasks": [{"id", "name", "slug", "enabled"}], "total_count", "limit", "offset"}.

get_workflow_task

Get a workflow task you manage, including its instructions and run success rate.

Read Permission workflow_tasks_get

Arguments
id string required
Numeric ID or slug.

Result: {"id", "name", "slug", "description", "instructions", "enabled", "total_run_count", "success_rate"}. Errors: tool error workflow task not found or access denied.

run_workflow_task

Start a run of a workflow task right now, outside its schedule. Returns immediately with the new execution’s id and status; it does not wait for the run to finish.

Write Async Permission workflow_tasks_manage

Arguments
id string required
Numeric ID or slug.

Result: {"execution_id": <id>, "status": "running"}. There is no MCP tool to read an execution’s outcome: once it finishes, get_workflow_task’s total_run_count and success_rate reflect it. If the owner is out of quota, the execution fails with quota exceeded. Errors: tool error workflow task not found or access denied.

Knowledge and files

list_knowledge_bases

List the knowledge bases you own or have been given access to.

Read Permission knowledge_bases_get

No arguments. Result: {"knowledge_bases": [{"id", "name", "description"}]}.

search_knowledge_base

Search a knowledge base for passages relevant to a query, returning the passages and the files they came from. This is the same semantic search a conversation uses; it has no REST equivalent.

Read Permission knowledge_bases_get

Arguments
knowledge_base_id number required
From list_knowledge_bases.
query string required
What to look for.

Result: {"context": "<retrieved passages as text>", "files": [{"id", "name"}]}. Recorded as knowledge-base usage. Errors: tool error knowledge base not found or access denied, or the retrieval error message.

list_files

List your own uploaded and generated files, newest first, a page at a time. There is no MCP tool for uploading files.

Read Permission files_get

Arguments
limit number optional default 20
Page size.
offset number optional default 0
Items to skip.

Result: {"files": [{"id", "name", "file_type"}], "total_count", "limit", "offset"}.

get_file

Get metadata for a file you own, for example to pass its ID to edit_image.

Read Permission files_get

Arguments
id number required
The file ID.

Result: {"id", "name", "file_type"} - no URL and no content. Errors: tool error file not found or access denied.

Projects and teams

list_projects

List the projects you own or that are shared with you, a page at a time.

Read Permission projects_get

Arguments
search string optional
Case-insensitive match on name and description.
limit number optional default 20
Page size.
offset number optional default 0
Items to skip.

Result: {"projects": [{"id", "name", "slug", "description"}], "total_count", "limit", "offset"}.

get_project

Get a project you have access to.

Read Permission projects_get

Arguments
id string required
Numeric ID or slug.

Result: {"id", "name", "slug", "description", "instructions"}. Errors: tool errors project not found, you don't have access to this project.

create_project

Create a new project that you own.

Write Permission projects_manage

Arguments
name string required
Project name.
description string optional
Short description.

Result: {"id", "slug", "name"}.

delete_project

Delete a project you own. Only the owner can delete.

Write Destructive Permission projects_delete

Arguments
id string required
Numeric ID or slug.

Result: {"deleted": true}. Errors: tool errors project not found, you don't have access to this project.

list_workspace_members

List the members of your workspace, a page at a time.

Read Permission organization_get

Arguments
search string optional
Matched against name and email.
limit number optional default 20
Page size.
offset number optional default 0
Items to skip.

Result: {"members": [{"id", "email", "first_name", "last_name", "is_owner", "permissions": [...]}], "total_count", "limit", "offset"}. The workspace owner is always reported with permissions: ["admin"].

list_teams

List all teams in your workspace. Not paginated.

Read Permission teams_get

Arguments
search string optional
Matched against team name and description.

Result: {"teams": [{"id", "name", "description", "color", "member_count"}]}.

list_team_members

List the members of a team, a page at a time. You must be a workspace admin or a member of the team.

Read Permission teams_get

Arguments
team_id number required
From list_teams.
search string optional
Matched against member name and email.
limit number optional default 20
Page size.
offset number optional default 0
Items to skip.

Result: {"members": [{"id", "email", "first_name", "last_name", "role"}], "total_count", "limit", "offset"}. Errors: JSON-RPC errors team not found, not authorized to view the members of this team.

Media generation

The media tools take no model argument: StickyPrompts uses the configured model for each medium. Results include path, the stored file’s direct URL (not a signed or expiring link), and _attachments, a list of {"type": "file", "id": <file id>} items whose ids you can pass to other tools.

generate_image

Generate an image from a prompt.

Write Permission image_generation_manage

Arguments
prompt string required
The image prompt. Not marked required in the advertised schema, but the call fails without it.

Result (synchronous): {"path": "<storage URL>", "_attachments": [{"type": "file", "id": <file id>}]}.

edit_image

Edit an existing image based on instructions. Returns a new file.

Write Permission image_generation_manage

Arguments
prompt string required
The editing instructions. Not marked required in the advertised schema, but the call fails without it.
file_id number required
The image file to edit. Must be a file you own. Not marked required in the advertised schema, but the call fails without it.

Result: same shape as generate_image, with a new file id. Errors: JSON-RPC error file not found or access denied.

generate_video

Start generating a video from a prompt, optionally animating a starting image. Returns immediately with the generation’s id and status; poll get_video_generation_status until it reports done or error. Generation can take several minutes.

Write Async Permission video_generation_manage

Arguments
prompt string required
The video prompt.
starting_image_file_id number optional
An image file to animate as the first frame.
last_frame_file_id number optional
An image file to use as the last frame. Requires starting_image_file_id; cannot be combined with reference_image_ids.
reference_image_ids array of integer optional
Image files to use as references. Cannot be combined with starting_image_file_id or last_frame_file_id.
aspect_ratio string optional default 16:9
For example "16:9". Must be one the model supports.
resolution string optional
For example "1080p". Defaults to the model’s first supported resolution.
duration_seconds number optional
Defaults to the model’s maximum. Must fall within the model’s range for the chosen resolution.

Result: {"id": <video generation id>, "status": "queued"}. Errors: JSON-RPC errors for an unsupported aspect ratio, resolution or duration, an invalid image combination, or a model your workspace may not use.

get_video_generation_status

Check a video generation started by generate_video. Status is queued, processing, done or error. While it is queued or processing, wait (for example 15-60 seconds) and call again.

Read Permission video_generation_get

Arguments
video_generation_id number required
The id returned by generate_video.

Result: {"id", "status"}, plus error when the status is error, or path and _attachments when it is done. Errors: not found is a JSON-RPC error.

delete_video_generation

Delete a video generation you own.

Write Destructive Permission video_generation_delete

Arguments
video_generation_id number required
The video generation id.

Result: {"deleted": true}.

generate_speech

Convert text to spoken audio. Returns once the audio is ready.

Write Permission tts_generation_manage

Arguments
text string required
The text to speak.
voice string optional
Voice identifier. Defaults to the model’s default voice.
language string optional
Defaults to detecting the language from the text. Rejected if the model lists supported languages and this is not one of them.

Result (synchronous): {"path": "<storage URL>", "_attachments": [{"type": "file", "id": <file id>}]}. No generation id is returned.

get_tts_generation_status

Check a past text-to-speech generation. Status is queued, processing, done or error. Because generate_speech does not return a generation id, you would use an id from the app or the REST API.

Read Permission tts_generation_get

Arguments
tts_generation_id number required
The speech generation id.

Result: {"id", "status"}, plus error, or path and _attachments when done. Errors: tool error tts generation not found.

delete_tts_generation

Delete a text-to-speech generation you own.

Write Destructive Permission tts_generation_delete

Arguments
tts_generation_id number required
The speech generation id.

Result: {"deleted": true}.

generate_music

Generate a piece of music from a text prompt. Returns once the audio is ready.

Write Permission music_generation_manage

Arguments
prompt string required
The music prompt.
duration_seconds number optional
Defaults to the model’s maximum.
output_format string optional
For example "mp3" or "wav". Defaults to the model’s default.
instrumental boolean optional default false
Instrumental only, with no vocals or lyrics.

Result (synchronous): {"path", "duration_seconds", "_attachments"}, plus lyrics when the model produced lyrics. No generation id is returned.

get_music_generation_status

Check a past music generation. Status is queued, processing, done or error. Because generate_music does not return a generation id, you would use an id from the app or the REST API.

Read Permission music_generation_get

Arguments
music_generation_id number required
The music generation id.

Result: {"id", "status"}, plus error, or path, duration_seconds, _attachments (and lyrics if any) when done. Errors: tool error music generation not found.

delete_music_generation

Delete a music generation you own.

Write Destructive Permission music_generation_delete

Arguments
music_generation_id number required
The music generation id.

Result: {"deleted": true}.

Transcription

transcribe

Transcribe audio or video to text from a public URL. Returns once the transcript is ready, so give your client a generous timeout for long media.

Write Permission transcription_manage

Arguments
url string required
Public URL of an audio or video file.

Result (synchronous): {"text": "<transcript>", "_attachments": [{"type": "transcription", "id": <transcription id>}]}. The transcription id is only in _attachments.

get_transcription_status

Check a past transcription. Status is queued, fetching, preparing, processing, done or error.

Read Permission transcription_get

Arguments
transcription_id number required
The transcription id.

Result: {"id", "status"}, plus error, or text and _attachments when done. Errors: tool error transcription not found.

delete_transcription

Delete a transcription you own.

Write Destructive Permission transcription_delete

Arguments
transcription_id number required
The transcription id.

Result: {"deleted": true}.

Spreadsheets

Spreadsheet processing runs a prompt template against each row of an xlsx sheet and writes the answer into an output column. All five tools return a task object: {"task_id", "status", "processed_rows", "total_rows", "original_file_id", "created_at", "credit_cost"}, plus error, result_preview, eta and generated_file_id when present. Status values: queued, initializing, processing, paused, done, error.

list_spreadsheet_processing_tasks

List your own spreadsheet processing tasks, a page at a time.

Read Permission spreadsheet_processing_get

Arguments
limit number optional default 20
Page size.
offset number optional default 0
Items to skip.

Result: {"tasks": [task], "total_count", "limit", "offset"}.

get_spreadsheet_processing_task

Get the status and progress of a task you own.

Read Permission spreadsheet_processing_get

Arguments
task_id string required
The id returned by start_spreadsheet_processing.

Result: a task object. Errors: tool error task not found. A poll immediately after starting may briefly report this while the task is being created.

start_spreadsheet_processing

Start processing an xlsx file you already have in StickyPrompts. Runs in the background and returns a task_id at once; poll get_spreadsheet_processing_task until the status is done or error.

Write Async Permission spreadsheet_processing_manage

Arguments
file_id number required
An xlsx file you own. Upload it in the app or the REST API, or bring it in with import_storage_files.
prompt_template string required
The prompt run for each row.
output_column string required
Column letter for the results, for example "D".
ai_model_id number required
From list_ai_models.
sheet_index number optional default 0
Zero-based sheet index.
skip_non_empty_cells boolean optional default false
Leave rows whose output cell already has a value.

Result: {"task_id": "<32-character id>"}. Errors: tool error file not found.

pause_spreadsheet_processing

Pause a running task you own. Only tasks that are queued, initializing or processing can be paused.

Write Permission spreadsheet_processing_manage

Arguments
task_id string required
The task to pause.

Result: the task object. Errors: tool errors task not found, file processing cannot be paused currently, file processing is already paused, file processing is already finished, file processing is not running.

resume_spreadsheet_processing

Resume a paused task you own. It is queued again, and any partial output file is discarded and regenerated.

Write Async Permission spreadsheet_processing_manage

Arguments
task_id string required
The task to resume.

Result: the task object with status: "queued". Errors: tool errors task not found, file processing is already running, file processing is already finished, file processing is not paused.

Integrations: email

Works with the email account connected in StickyPrompts (Postmark, Resend, SendGrid or SMTP). Connections are set up in the app; see Email sending.

list_email_connections

List the email accounts you have connected, personal or shared with your workspace. Returns an empty list if none is connected.

Read Permission integration_email_get

No arguments. Result: {"connections": [{"connection_id", "provider", "name", "description", "sends_from"}]}.

send_email

Send an email through one of your connected email accounts. This really delivers mail and cannot be undone, so confirm recipients and content before calling it. Either html_body or text_body is required.

Write Permission integration_email_manage

Arguments
connection_id number required
From list_email_connections.
to array of string required
Recipient email addresses.
subject string required
Subject line.
html_body string optional
HTML body. Send this, text_body, or both.
text_body string optional
Plain-text body.
cc array of string optional
CC recipients.
bcc array of string optional
BCC recipients.
reply_to array of string optional
Reply-to addresses.
from_email string optional
Override the connection’s default sender. Your email provider rejects addresses it has not verified.
from_name string optional
Sender name, used with from_email.
attachment_file_ids array of number optional
Files to attach. Over an API key this currently fails with you do not have permission to use this file, because attachments are resolved against an in-app conversation. Send without attachments.

Result: {"message_id": "...", "provider": "..."}.

Integrations: CRM

Works with ActiveCampaign, Brevo or Pipedrive connected in StickyPrompts; see CRM. The write tools (add_crm_contact, edit_crm_contact, create_crm_deal) also need the connection itself to allow write access. Connections are read-only by default.

list_crm_connections

List the CRM accounts you have connected, personal or shared with your workspace. Returns an empty list if none is connected.

Read Permission integration_crm_get

No arguments. Result: {"connections": [{"connection_id", "provider", "name", "description"}]}.

search_crm_contacts

Search contacts in a connected CRM. Use it before edit_crm_contact to find the contact, or before add_crm_contact to avoid duplicates.

Read Permission integration_crm_get

Arguments
connection_id number required
From list_crm_connections.
query string required
A name, email or company where the provider supports free-text search, or an exact email or id otherwise.
filters object optional
String values, for example list_id, tag_id or status for ActiveCampaign, organization_id for Pipedrive.

Result: {"contacts": [{"remote_id", "provider", "contact"}]}.

list_crm_contacts

Browse contacts a page at a time, in the provider’s own order, with no query.

Read Permission integration_crm_get

Arguments
connection_id number required
From list_crm_connections.
limit number optional
Page size, clamped per provider.
offset number optional
Items to skip. Ignored by Pipedrive.
cursor string optional
Pipedrive only: the previous page’s next_cursor.
filters object optional
Provider-specific filters, for example filter_id for Pipedrive.

Result: {"contacts": [...], "has_more": bool, "next_cursor": "..."} (next_cursor omitted when empty).

add_crm_contact

Add a new contact. Always creates a new contact and never updates an existing one.

Write Permission integration_crm_manage

Arguments
connection_id number required
From list_crm_connections.
email string required
The contact’s email.
first_name string optional
First name.
last_name string optional
Last name.
phone string optional
Phone number.
company string optional
Company.
custom_fields object optional
Provider-specific fields with string values. Unknown keys are ignored.
list_ids array of string optional
Brevo and ActiveCampaign only. Adds to these lists.
tag_ids array of string optional
ActiveCampaign only. Adds these tags.

Result: {"remote_id", "provider", "contact": {...}}.

edit_crm_contact

Edit an existing contact, looked up by email. Fails if no contact with that email exists; it never creates one.

Write Permission integration_crm_manage

Arguments
connection_id number required
From list_crm_connections.
email string required
The lookup key, not a new value.
first_name string optional
New first name.
last_name string optional
New last name.
phone string optional
New phone number.
company string optional
New company.
custom_fields object optional
Provider-specific fields with string values.
list_ids array of string optional
Brevo and ActiveCampaign only. Add-only.
tag_ids array of string optional
ActiveCampaign only. Add-only.

Omitted fields are left unchanged; an explicitly sent empty string clears the field. Result: {"remote_id", "provider", "contact": {...}}.

search_crm_deals

Search deals by title or by the linked contact’s email. Use it before create_crm_deal to check for an existing deal.

Read Permission integration_crm_get

Arguments
connection_id number required
From list_crm_connections.
query string required
A deal title or contact email.
filters object optional
For example status, stage_id or owner_id for ActiveCampaign and Pipedrive, contact_ids or company_ids for Brevo.

Result: {"deals": [{"remote_id", "provider", "deal"}]}.

list_crm_deals

Browse deals a page at a time, in the provider’s own order. Not every CRM provider manages deals; check the connection’s provider first.

Read Permission integration_crm_get

Arguments
connection_id number required
From list_crm_connections.
limit number optional
Page size, clamped per provider.
offset number optional
Items to skip. Ignored by Pipedrive.
cursor string optional
Pipedrive only: the previous page’s next_cursor.
filters object optional
Provider-specific filters.

Result: {"deals": [...], "has_more", "next_cursor"}.

create_crm_deal

Create a deal linked to an existing contact. Not every CRM provider manages deals; check the connection’s provider first.

Write Permission integration_crm_manage

Arguments
connection_id number required
From list_crm_connections.
title string required
Deal title.
contact_email string required
Email of an existing contact.
value number optional
Deal value (a decimal number).
currency string optional
For example USD.

Result: {"remote_id", "provider", "deal": {"title", "value", "currency", "contact_email", "stage"}}.

list_crm_lists

List the contact lists or segments on a connected CRM (Brevo and ActiveCampaign only, not Pipedrive). Use the ids as a list_id filter or in list_ids.

Read Permission integration_crm_get

Arguments
connection_id number required
From list_crm_connections.

Result: {"lists": [{"id", "name"}]}.

list_crm_tags

List the contact tags on a connected CRM (ActiveCampaign only). Use the ids as a tag_id filter or in tag_ids.

Read Permission integration_crm_get

Arguments
connection_id number required
From list_crm_connections.

Result: {"tags": [{"id", "name"}]}.

Integrations: databases

Works with MySQL, MariaDB, PostgreSQL and SQL Server databases connected in StickyPrompts; see Databases. Each connection has its own permission level, which is the real guard on what a query may do: read_only accepts only a single SELECT or WITH statement, create_update also allows a single INSERT or UPDATE, and full_access applies no filtering.

list_database_connections

List the databases you have connected, personal or shared with your workspace, with each connection’s database_permission. Returns an empty list if none is connected.

Read Permission integration_database_get

No arguments. Result: {"connections": [{"connection_id", "provider", "name", "description", "database_permission"}]}.

list_database_tables

List the tables and views in a connected database, without column detail.

Read Permission integration_database_get

Arguments
connection_id number required
From list_database_connections.

Result: {"tables": ["schema.name", ...]}.

describe_database_tables

Get column detail (name, data type, nullability) for specific tables.

Read Permission integration_database_get

Arguments
connection_id number required
From list_database_connections.
tables array of string required
Each as "schema.name", as returned by list_database_tables.

Result: {"tables": [{"schema", "name", "columns": [{"name", "data_type", "nullable"}]}]}. Errors: JSON-RPC error for a table reference without a dot.

run_database_query

Run a single statement against a connected database, within the connection’s permission level. Row count and timeout are clamped on the server.

Write Destructive Permission integration_database_manage

Arguments
connection_id number required
From list_database_connections.
query string required
A single statement allowed by the connection’s permission level.
row_limit number optional default 100
Maximum rows returned, up to 1000.
timeout_seconds number optional default 10
Query timeout, up to 30.

Result: {"columns": [...], "rows": [[...]], "row_count": n, "truncated": bool}. The API-key permission only decides whether the tool is callable; connect the database as Read only if a key should never change data.

Integrations: storage

Works with Google Drive. The provider argument on every storage tool accepts the single value google_drive. Storage connections are personal, not shared with the workspace.

Several tools return a RemoteEntry object: {"id", "name", "kind", "mime_type", "size", "modified_at", "icon_url", "web_url", "parent_id", "shared", "owned_by_me", "can_add_children", "importable", "import_name"}.

list_storage_connections

List the cloud drives you have personally connected. Returns an empty list if none is connected.

Read Permission integration_storage_get

No arguments. Result: {"connections": [{"provider", "name", "description", "account_name"}]}.

browse_storage_folder

List the folders and files directly inside a folder. Omit folder_id to browse the root.

Read Permission integration_storage_get

Arguments
provider string required
google_drive.
folder_id string optional
The folder to list. Omit for the root.
page_token string optional
The previous page’s next_page_token.
page_size number optional
1-200, clamped. Provider default when omitted.
kind string optional
folder or file.

Result: {"entries": [RemoteEntry], "next_page_token", "breadcrumbs": [RemoteEntry]}. Breadcrumbs run root-first when the provider can resolve them.

search_storage_files

Search a connected drive by name or content, optionally within one folder.

Read Permission integration_storage_get

Arguments
provider string required
google_drive.
query string required
What to search for.
folder_id string optional
Restrict the search to this folder.
page_token string optional
The previous page’s next_page_token.
page_size number optional
1-200, clamped.
kind string optional
folder or file.

Result: {"entries": [...], "next_page_token", "breadcrumbs": null}.

get_storage_entry

Get metadata for a single file or folder, from a browse or search result’s id.

Read Permission integration_storage_get

Arguments
provider string required
google_drive.
entry_id string required
The entry id.

Result: a single RemoteEntry.

import_storage_files

Download files from a connected drive and save them as StickyPrompts files. Google Docs, Sheets and Slides are converted to PDF, XLSX and PPTX; Google Forms, Sites and Apps Script projects cannot be imported. Entries succeed or fail independently. This is the only way to bring a new file into StickyPrompts over MCP.

Write Permission integration_storage_manage

Arguments
provider string required
google_drive.
entry_ids array of string required
Up to 20 entries. More is an error.
project_id number optional
Attach the imported files to this project.

Result: {"files": [{"id", "name", "file_type"}], "failed": [{"entry_id", "error"}], "_attachments": [...]}. Check failed even when some files succeed. The file ids work with edit_image, generate_video and start_spreadsheet_processing.

export_file_to_storage

Upload one of your StickyPrompts files to a folder on a connected drive. The folder must already exist and be writable by the connected account.

Write Permission integration_storage_manage

Arguments
provider string required
google_drive.
file_id number required
A file you own, from list_files, a media result or an import.
folder_id string required
Destination folder, from browse_storage_folder or search_storage_files.
name string optional
Override the remote file name.

Result: {"entry": RemoteEntry} for the uploaded file.

search

Search your own prompts and conversations by name and text. Unlike search in the app, this does not include prompts shared with you or the public prompt catalogue.

Read Permission search

Arguments
query string required
What to search for.

Result: {"prompts": [{"id", "name", "description"}], "conversations": [{"id", "name", "relevant_message": {"id", "text"}}]} - at most 5 of each. Matched text is trimmed to about 50 characters around the first match, with the match wrapped in <span class="search-highlight">...</span>.

Staff only

get_usage_statistics

Returns the caller’s credit usage and run count over a date range, by category. It needs statistics_get, a permission reserved for StickyPrompts staff that customers cannot put on a key, so this tool never appears for customer keys. Workspace admins see usage in the app under Usage, credits and billing.

Read Permission statistics_get (staff only)

Arguments
from_date string required
YYYY-MM-DD.
to_date string required
YYYY-MM-DD, inclusive of the whole day.

Result: {"from_date", "to_date", "total_credits", "total_runs", "by_category": [{"category", "credits", "runs"}]}.