From d545c193b93b6ba783632ffd1ae54816481ae017 Mon Sep 17 00:00:00 2001 From: sanil-23 Date: Wed, 15 Apr 2026 21:06:59 +0530 Subject: [PATCH] feat(agent): fuzzy-filter skills_agent toolkit actions by task prompt (#579) * feat(agent): fuzzy-filter skills_agent toolkit actions by task prompt Narrow large Composio toolkits (e.g. github ~500 actions) down to the handful relevant to a given delegation prompt before registering them as native tools on a spawned skills_agent. Falls back to the full catalogue when the filter yields fewer than MIN_CONFIDENT_HITS hits to avoid starving the sub-agent on under-specified prompts. Filter is only invoked when both `definition.id == "skills_agent"` and a `toolkit=` argument is present, so orchestrator and other sub-agents are unaffected. Co-Authored-By: Claude Opus 4.6 (1M context) * test(composio): mock toolkits route in ops integration test --------- Co-authored-by: Claude Opus 4.6 (1M context) --- Cargo.lock | 2 +- app/src-tauri/Cargo.lock | 2 +- src/openhuman/agent/harness/mod.rs | 1 + .../agent/harness/subagent_runner.rs | 40 +- src/openhuman/agent/harness/tool_filter.rs | 639 ++++++++++++++++++ src/openhuman/composio/ops.rs | 15 +- tests/fixtures/composio_facebook.json | 1 + tests/fixtures/composio_github.json | 1 + tests/fixtures/composio_gmail.json | 1 + tests/fixtures/composio_googledrive.json | 1 + tests/fixtures/composio_googlesheets.json | 1 + tests/fixtures/composio_instagram.json | 1 + tests/fixtures/composio_notion.json | 1 + tests/fixtures/composio_reddit.json | 1 + tests/fixtures/composio_slack.json | 1 + 15 files changed, 704 insertions(+), 4 deletions(-) create mode 100644 src/openhuman/agent/harness/tool_filter.rs create mode 100644 tests/fixtures/composio_facebook.json create mode 100644 tests/fixtures/composio_github.json create mode 100644 tests/fixtures/composio_gmail.json create mode 100644 tests/fixtures/composio_googledrive.json create mode 100644 tests/fixtures/composio_googlesheets.json create mode 100644 tests/fixtures/composio_instagram.json create mode 100644 tests/fixtures/composio_notion.json create mode 100644 tests/fixtures/composio_reddit.json create mode 100644 tests/fixtures/composio_slack.json diff --git a/Cargo.lock b/Cargo.lock index 8d34f58e3..fb54fbc6a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4307,7 +4307,7 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openhuman" -version = "0.52.9" +version = "0.52.12" dependencies = [ "aes-gcm", "anyhow", diff --git a/app/src-tauri/Cargo.lock b/app/src-tauri/Cargo.lock index 5f079a266..418c31a71 100644 --- a/app/src-tauri/Cargo.lock +++ b/app/src-tauri/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "OpenHuman" -version = "0.52.9" +version = "0.52.12" dependencies = [ "env_logger", "log", diff --git a/src/openhuman/agent/harness/mod.rs b/src/openhuman/agent/harness/mod.rs index 2fb26441c..1a33a5781 100644 --- a/src/openhuman/agent/harness/mod.rs +++ b/src/openhuman/agent/harness/mod.rs @@ -35,6 +35,7 @@ pub(crate) mod self_healing; pub mod session; pub(crate) mod session_queue; pub mod subagent_runner; +pub(crate) mod tool_filter; mod tool_loop; pub use definition::{ diff --git a/src/openhuman/agent/harness/subagent_runner.rs b/src/openhuman/agent/harness/subagent_runner.rs index 79674cd0d..7e4ea6b10 100644 --- a/src/openhuman/agent/harness/subagent_runner.rs +++ b/src/openhuman/agent/harness/subagent_runner.rs @@ -271,7 +271,45 @@ async fn run_typed_mode( .iter() .find(|ci| ci.connected && ci.toolkit.eq_ignore_ascii_case(tk)) { - for action in &integration.tools { + // Fuzzy-filter the toolkit's actions against the task prompt + // so large catalogues (e.g. github ~500 actions) are narrowed + // to the handful actually relevant to this delegation. The + // orchestrator's `SkillDelegationTool` schema forces the + // prompt to be a clear, context-rich instruction, so it's a + // reliable matching target. + // + // Fallback: if the filter yields fewer than + // `MIN_CONFIDENT_HITS` results, register every action. A + // too-narrow filter is worse than none — it starves the + // sub-agent and forces it to guess. + const TOOL_FILTER_TOP_K: usize = 25; + let filter_hits = super::tool_filter::filter_actions_by_prompt( + task_prompt, + &integration.tools, + TOOL_FILTER_TOP_K, + ); + let selected: Vec<&crate::openhuman::context::prompt::ConnectedIntegrationTool> = + if filter_hits.len() >= super::tool_filter::MIN_CONFIDENT_HITS { + tracing::info!( + agent_id = %definition.id, + toolkit = %tk, + total = integration.tools.len(), + kept = filter_hits.len(), + "[subagent_runner:typed] fuzzy tool filter narrowed toolkit" + ); + filter_hits.iter().map(|&i| &integration.tools[i]).collect() + } else { + tracing::info!( + agent_id = %definition.id, + toolkit = %tk, + total = integration.tools.len(), + filter_hits = filter_hits.len(), + "[subagent_runner:typed] fuzzy filter thin; falling back to full toolkit" + ); + integration.tools.iter().collect() + }; + + for action in selected { dynamic_tools.push(Box::new( crate::openhuman::composio::ComposioActionTool::new( client.clone(), diff --git a/src/openhuman/agent/harness/tool_filter.rs b/src/openhuman/agent/harness/tool_filter.rs new file mode 100644 index 000000000..83f86b7a8 --- /dev/null +++ b/src/openhuman/agent/harness/tool_filter.rs @@ -0,0 +1,639 @@ +//! Fuzzy tool-filter for sub-agent delegation. +//! +//! When `skills_agent` is spawned with a bound Composio toolkit (e.g. +//! `toolkit="github"`), the parent-refined task prompt is usually specific +//! enough that only a handful of the toolkit's actions are relevant. Github's +//! catalogue alone has 500 actions; loading every one into the sub-agent's +//! tool set balloons prompt size and confuses the model. +//! +//! This module ranks the actions against the task prompt using a cheap +//! five-stage pipeline — no model load, pure CPU, stdlib only: +//! +//! 1. **Verb detection** — map the prompt to CRUD-ish intents +//! (`create`/`send`/`read`/`list`/`update`/`delete`/`merge`). +//! 2. **Verb gate** — drop actions whose first-word verb conflicts with +//! the detected intent. Tools with a neutral prefix (e.g. `GITHUB_FIND_*`) +//! are kept as ambiguous. +//! 3. **Query token expansion** — strip stopwords, expand common +//! abbreviations (`pr` → `pull request`, `dm` → `direct message`) so +//! the ranker can match the user's casual phrasing against the +//! toolkit's formal action names. +//! 4. **Weighted token overlap** — 3× weight on hits in the action name, +//! 1× on hits in the description. Cheap, effective, explainable. +//! 5. **Verb-alignment boost** — small additive bonus when the action's +//! first-word verb matches the detected intent, penalty when it +//! clearly conflicts. +//! +//! Entry point: [`filter_actions_by_prompt`]. + +use std::collections::HashSet; + +use crate::openhuman::context::prompt::ConnectedIntegrationTool; + +/// Minimum number of hits the filter must produce to be trusted. Below this, +/// the caller should fall back to the unfiltered toolkit — a too-narrow filter +/// is worse than no filter at all because it starves the sub-agent. +pub const MIN_CONFIDENT_HITS: usize = 3; + +/// Rank `actions` against `prompt` and return indices for the top +/// `max_results` matches, ordered best-first. +/// +/// Returns an empty `Vec` when `prompt` is empty or no token hits are found — +/// callers should check `.len() < MIN_CONFIDENT_HITS` and fall back to the +/// unfiltered toolkit in that case. +pub fn filter_actions_by_prompt( + prompt: &str, + actions: &[ConnectedIntegrationTool], + max_results: usize, +) -> Vec { + if prompt.trim().is_empty() || actions.is_empty() { + return Vec::new(); + } + + let verbs = detect_verbs(prompt); + let qt = query_tokens(prompt); + + // Stage 1-2: verb gate. Keep actions whose verb matches the query, + // or whose prefix is neutral (no recognised verb). + let gated: Vec = actions + .iter() + .enumerate() + .filter(|(_, a)| { + if verbs.is_empty() { + return true; + } + match tool_verb(&a.name) { + Some(v) => verbs.contains(&v), + None => true, + } + }) + .map(|(i, _)| i) + .collect(); + + // Stage 3-5: weighted token overlap + verb-alignment bonus, then sort. + let mut scored: Vec<(i32, usize)> = gated + .iter() + .map(|&i| { + let a = &actions[i]; + let score = + weighted_overlap(&qt, &a.name, &a.description) + verb_bonus(&a.name, &verbs); + (score, i) + }) + .collect(); + + scored.sort_by(|a, b| b.0.cmp(&a.0)); + + // Only keep positively-scored results. Zero-overlap tools would add noise. + scored + .into_iter() + .filter(|(s, _)| *s > 0) + .take(max_results) + .map(|(_, i)| i) + .collect() +} + +// ───────────────────────────────────────────────────────────────────────── +// Verb detection +// ───────────────────────────────────────────────────────────────────────── + +/// Detected query intent. A small, stable set — expanding it risks +/// over-matching (e.g. "open" is deliberately excluded because it appears in +/// both "open a PR" and "open PRs"). +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub enum Verb { + Create, + Send, + Read, + List, + Update, + Delete, + Merge, +} + +fn verb_aliases(v: Verb) -> &'static [&'static str] { + match v { + Verb::Create => &[ + "create", "make", "new", "add", "start", "write", "post", "draft", + ], + Verb::Send => &[ + "send", "email", "message", "dm", "reply", "forward", "notify", + ], + Verb::Read => &["read", "get", "fetch", "show", "view", "see", "retrieve"], + Verb::List => &["list", "search", "find", "lookup", "browse"], + Verb::Update => &[ + "update", "edit", "modify", "change", "rename", "move", "set", + ], + Verb::Delete => &["delete", "remove", "drop", "archive", "unsubscribe"], + Verb::Merge => &["merge", "accept", "approve"], + } +} + +const ALL_VERBS: [Verb; 7] = [ + Verb::Create, + Verb::Send, + Verb::Read, + Verb::List, + Verb::Update, + Verb::Delete, + Verb::Merge, +]; + +/// Tool-name prefixes (uppercase, after the toolkit prefix is stripped) +/// that map to each verb. Checked against the first two words of the +/// stripped tool name; trailing `S` is tolerated (`DELETES` → `DELETE`). +fn tool_verb_prefixes(v: Verb) -> &'static [&'static str] { + match v { + Verb::Create => &["CREATE", "ADD", "NEW", "POST", "DRAFT", "START", "INSERT"], + Verb::Send => &["SEND", "REPLY", "FORWARD", "NOTIFY"], + Verb::Read => &[ + "GET", "FETCH", "SHOW", "READ", "RETRIEVE", "DESCRIBE", "CHECK", + ], + Verb::List => &["LIST", "SEARCH", "FIND", "BROWSE", "COUNT", "QUERY"], + Verb::Update => &[ + "UPDATE", "EDIT", "MODIFY", "RENAME", "MOVE", "SET", "PATCH", "UPSERT", + ], + Verb::Delete => &["DELETE", "REMOVE", "DROP", "ARCHIVE", "UNSUBSCRIBE"], + Verb::Merge => &["MERGE", "APPROVE", "ACCEPT", "DISMISS"], + } +} + +fn detect_verbs(prompt: &str) -> HashSet { + let lowered = prompt.to_ascii_lowercase(); + let mut found = HashSet::new(); + for &v in &ALL_VERBS { + for alias in verb_aliases(v) { + if contains_whole_word(&lowered, alias) { + found.insert(v); + break; + } + } + } + found +} + +/// Classify a tool name (e.g. `"GITHUB_CREATE_A_PULL_REQUEST"`) by verb. +/// Returns `None` when no verb prefix is recognised — such tools are kept as +/// neutral by the gate. +fn tool_verb(name: &str) -> Option { + // Strip the toolkit prefix (everything up to and including the first `_`). + let stripped = match name.split_once('_') { + Some((_, rest)) => rest, + None => name, + }; + // Check the first two words. + for word in stripped.split('_').take(2) { + let trimmed = word.strip_suffix('S').unwrap_or(word); + for &v in &ALL_VERBS { + for &prefix in tool_verb_prefixes(v) { + if word == prefix || trimmed == prefix { + return Some(v); + } + } + } + } + None +} + +// ───────────────────────────────────────────────────────────────────────── +// Token handling +// ───────────────────────────────────────────────────────────────────────── + +const STOPWORDS: &[&str] = &[ + "the", "a", "an", "to", "from", "for", "of", "with", "my", "me", "i", "and", "or", "on", "in", + "at", "is", "are", "by", "this", "that", "it", "about", "all", "any", "some", "new", "old", +]; + +/// Bidirectional abbreviation map applied to query tokens. If the query has +/// `pr`, we add `pull` and `request`; if the tool name has `PULL_REQUEST` and +/// the query has `pr`, this bridges them. +const ABBREVS: &[(&str, &[&str])] = &[ + ("pr", &["pull", "request"]), + ("prs", &["pull", "requests"]), + ("dm", &["direct", "message"]), + ("dms", &["direct", "messages"]), + ("repo", &["repository"]), + ("repos", &["repositories"]), + ("org", &["organization"]), + ("orgs", &["organizations"]), + ("msg", &["message"]), + ("ch", &["channel"]), +]; + +/// Tokenize a string into lowercase alphanumeric words. +fn tokenize(s: &str) -> HashSet { + let mut out = HashSet::new(); + let mut current = String::new(); + for c in s.chars() { + if c.is_ascii_alphanumeric() { + current.push(c.to_ascii_lowercase()); + } else if !current.is_empty() { + out.insert(std::mem::take(&mut current)); + } + } + if !current.is_empty() { + out.insert(current); + } + out +} + +fn query_tokens(query: &str) -> HashSet { + let raw: HashSet = tokenize(query) + .into_iter() + .filter(|t| t.len() > 1 && !STOPWORDS.contains(&t.as_str())) + .collect(); + let mut expanded = raw.clone(); + for t in &raw { + for (abbr, replacements) in ABBREVS { + if t == abbr { + for r in *replacements { + expanded.insert((*r).to_string()); + } + } + } + } + expanded +} + +fn weighted_overlap(qt: &HashSet, name: &str, desc: &str) -> i32 { + let name_tokens = tokenize(name); + let desc_tokens = tokenize(desc); + let name_hits = qt.intersection(&name_tokens).count() as i32; + let desc_hits = qt.intersection(&desc_tokens).count() as i32; + 3 * name_hits + desc_hits +} + +fn verb_bonus(name: &str, query_verbs: &HashSet) -> i32 { + if query_verbs.is_empty() { + return 0; + } + match tool_verb(name) { + Some(v) if query_verbs.contains(&v) => 3, + Some(_) => -2, + None => 0, + } +} + +fn contains_whole_word(haystack: &str, needle: &str) -> bool { + // Cheap whole-word check without regex. Works on ASCII; prompts from + // orchestrators are essentially ASCII anyway. + let mut start = 0; + while let Some(idx) = haystack[start..].find(needle) { + let abs = start + idx; + let before_ok = abs == 0 || !haystack.as_bytes()[abs - 1].is_ascii_alphanumeric(); + let end = abs + needle.len(); + let after_ok = end == haystack.len() || !haystack.as_bytes()[end].is_ascii_alphanumeric(); + if before_ok && after_ok { + return true; + } + start = abs + 1; + } + false +} + +// ───────────────────────────────────────────────────────────────────────── +// Tests +// ───────────────────────────────────────────────────────────────────────── + +#[cfg(test)] +mod tests { + use super::*; + + fn tool(name: &str, desc: &str) -> ConnectedIntegrationTool { + ConnectedIntegrationTool { + name: name.to_string(), + description: desc.to_string(), + parameters: None, + } + } + + fn github_sample() -> Vec { + vec![ + tool("GITHUB_CREATE_A_PULL_REQUEST", + "Creates a pull request in a GitHub repository, requiring existing base and head branches."), + tool("GITHUB_CREATE_A_REVIEW_FOR_A_PULL_REQUEST", + "Creates a pull request review, allowing approval, change requests, or comments."), + tool("GITHUB_CREATE_A_DEPLOYMENT_BRANCH_POLICY", + "Creates a deployment branch or tag policy for an existing environment in a repository."), + tool("GITHUB_DELETE_A_REVIEW_COMMENT_FOR_A_PULL_REQUEST", + "Deletes a review comment on a pull request."), + tool("GITHUB_FIND_PULL_REQUESTS", + "Primary tool to find and search pull requests."), + tool("GITHUB_GET_A_PULL_REQUEST", + "Retrieves a specific pull request by number."), + tool("GITHUB_LIST_ASSIGNEES", + "Lists users who can be assigned to issues in a repository."), + ] + } + + #[test] + fn create_pr_ranks_create_a_pull_request_first() { + let actions = github_sample(); + let idx = + filter_actions_by_prompt("create a PR from my feature branch to main", &actions, 5); + assert!(!idx.is_empty()); + // Top match must be a CREATE verb tool (not DELETE/GET). + let top_name = &actions[idx[0]].name; + assert!( + top_name.contains("CREATE") && top_name.contains("PULL_REQUEST"), + "expected top match to be a CREATE + PULL_REQUEST tool, got {top_name}" + ); + // The DELETE tool must not appear — verb gate should drop it. + for &i in &idx { + assert!( + !actions[i].name.starts_with("GITHUB_DELETE"), + "DELETE tool leaked past verb gate: {}", + actions[i].name + ); + } + } + + #[test] + fn list_prs_ranks_find_pull_requests_first() { + let actions = github_sample(); + let idx = filter_actions_by_prompt("list open PRs assigned to me", &actions, 5); + assert!(!idx.is_empty()); + let top_name = &actions[idx[0]].name; + assert!( + top_name == "GITHUB_FIND_PULL_REQUESTS" || top_name == "GITHUB_LIST_ASSIGNEES", + "expected FIND_PULL_REQUESTS or LIST_ASSIGNEES on top, got {top_name}" + ); + } + + #[test] + fn empty_prompt_returns_empty() { + let actions = github_sample(); + let idx = filter_actions_by_prompt("", &actions, 5); + assert!(idx.is_empty()); + } + + #[test] + fn abbreviation_expansion_works() { + let qt = query_tokens("create a PR from feature branch"); + assert!(qt.contains("pr")); + assert!(qt.contains("pull")); + assert!(qt.contains("request")); + } + + #[test] + fn stopwords_removed() { + let qt = query_tokens("send the email to my manager"); + assert!(!qt.contains("the")); + assert!(!qt.contains("to")); + assert!(!qt.contains("my")); + assert!(qt.contains("send")); + assert!(qt.contains("email")); + assert!(qt.contains("manager")); + } + + #[test] + fn verb_detection_handles_aliases() { + let v = detect_verbs("post a message to general channel"); + assert!(v.contains(&Verb::Send) || v.contains(&Verb::Create)); + + let v = detect_verbs("delete all promotional emails"); + assert!(v.contains(&Verb::Delete)); + + let v = detect_verbs("merge pull request 42"); + assert!(v.contains(&Verb::Merge)); + } + + #[test] + fn tool_verb_handles_plurals() { + assert_eq!(tool_verb("SLACK_DELETES_A_MESSAGE"), Some(Verb::Delete)); + assert_eq!( + tool_verb("GITHUB_CREATE_A_PULL_REQUEST"), + Some(Verb::Create) + ); + assert_eq!(tool_verb("GMAIL_SEND_EMAIL"), Some(Verb::Send)); + assert_eq!(tool_verb("NOTION_QUERY_DATABASE"), Some(Verb::List)); + // Neutral — no verb prefix recognised + assert_eq!(tool_verb("GITHUB_GIST_COMMENT"), None); + } + + #[test] + fn delete_query_excludes_create_tools() { + let actions = vec![ + tool("GMAIL_SEND_EMAIL", "Sends an email."), + tool("GMAIL_DELETE_MESSAGE", "Deletes a message by id."), + tool("GMAIL_DELETE_THREAD", "Deletes a thread."), + tool("GMAIL_BATCH_DELETE_MESSAGES", "Bulk delete messages."), + ]; + let idx = filter_actions_by_prompt("delete all promotional emails", &actions, 10); + for &i in &idx { + assert!( + actions[i].name.contains("DELETE"), + "non-DELETE tool leaked: {}", + actions[i].name + ); + } + assert!(idx.len() >= 3); + } + + // ── Real-dataset integration tests ──────────────────────────────── + // + // These run the filter against the actual Composio tool-list dump + // for each toolkit (1000 tools total) captured from a live sidecar + // `openhuman.composio_list_tools` call. Fixtures live in + // `tests/fixtures/composio_.json`. + + fn load_real_toolkit(toolkit: &str) -> Vec { + let path = format!( + "{}/tests/fixtures/composio_{}.json", + env!("CARGO_MANIFEST_DIR"), + toolkit + ); + let raw = std::fs::read_to_string(&path) + .unwrap_or_else(|e| panic!("failed to read fixture {path}: {e}")); + let v: serde_json::Value = + serde_json::from_str(&raw).unwrap_or_else(|e| panic!("failed to parse {path}: {e}")); + let tools = v + .pointer("/result/result/tools") + .and_then(|t| t.as_array()) + .unwrap_or_else(|| panic!("missing /result/result/tools in {path}")); + tools + .iter() + .map(|t| { + let f = &t["function"]; + ConnectedIntegrationTool { + name: f["name"].as_str().unwrap_or("").to_string(), + description: f["description"].as_str().unwrap_or("").to_string(), + parameters: None, + } + }) + .collect() + } + + /// Assert `wanted` shows up in the top-K indices of the filter output. + fn assert_in_top( + actions: &[ConnectedIntegrationTool], + hits: &[usize], + wanted: &str, + label: &str, + ) { + let top_names: Vec<&str> = hits.iter().map(|&i| actions[i].name.as_str()).collect(); + assert!( + top_names.iter().any(|n| *n == wanted), + "[{label}] '{wanted}' not in top {k}: {top_names:?}", + k = hits.len() + ); + } + + #[test] + fn real_data_github_create_pr() { + let actions = load_real_toolkit("github"); + assert!(actions.len() > 400, "github fixture should have ~500 tools"); + let hits = filter_actions_by_prompt( + "Create a pull request from feature/auth-fix to main in the openhuman repo", + &actions, + 15, + ); + assert!(hits.len() >= MIN_CONFIDENT_HITS); + assert!( + hits.len() < actions.len() / 5, + "filter should narrow by >80%, got {}/{}", + hits.len(), + actions.len() + ); + assert_in_top( + &actions, + &hits, + "GITHUB_CREATE_A_PULL_REQUEST", + "github create PR", + ); + } + + #[test] + fn real_data_github_list_prs() { + let actions = load_real_toolkit("github"); + let hits = filter_actions_by_prompt( + "Find all open pull requests assigned to the current user in the openhuman repo", + &actions, + 15, + ); + assert!(hits.len() >= MIN_CONFIDENT_HITS); + assert_in_top( + &actions, + &hits, + "GITHUB_FIND_PULL_REQUESTS", + "github list PRs", + ); + } + + #[test] + fn real_data_gmail_send_email() { + let actions = load_real_toolkit("gmail"); + let hits = filter_actions_by_prompt( + "Send an email to john@example.com with subject 'Q2 Report' and body attached", + &actions, + 10, + ); + assert!(hits.len() >= MIN_CONFIDENT_HITS); + assert_in_top(&actions, &hits, "GMAIL_SEND_EMAIL", "gmail send email"); + // Top 3 should all be send-related, not label/trash operations. + for &i in hits.iter().take(3) { + let n = &actions[i].name; + assert!( + n.contains("SEND") || n.contains("REPLY") || n.contains("DRAFT"), + "non-send tool in top 3: {n}" + ); + } + } + + #[test] + fn real_data_gmail_delete_emails() { + let actions = load_real_toolkit("gmail"); + let hits = filter_actions_by_prompt( + "Delete all promotional emails received in the last week", + &actions, + 10, + ); + assert!(hits.len() >= MIN_CONFIDENT_HITS); + // All top results must be DELETE-flavoured, not send/fetch. + for &i in &hits { + let n = &actions[i].name; + assert!( + n.contains("DELETE") || n.contains("TRASH") || n.contains("REMOVE"), + "non-delete tool in delete query top-K: {n}" + ); + } + } + + #[test] + fn real_data_slack_send_message() { + let actions = load_real_toolkit("slack"); + let hits = filter_actions_by_prompt( + "Post a message to the #general channel saying the deploy is complete", + &actions, + 15, + ); + assert!(hits.len() >= MIN_CONFIDENT_HITS); + assert_in_top(&actions, &hits, "SLACK_SEND_MESSAGE", "slack send message"); + } + + #[test] + fn real_data_notion_create_page() { + let actions = load_real_toolkit("notion"); + let hits = filter_actions_by_prompt( + "Create a new page in the Engineering workspace titled 'Sprint Plan'", + &actions, + 15, + ); + assert!(hits.len() >= MIN_CONFIDENT_HITS); + assert_in_top( + &actions, + &hits, + "NOTION_CREATE_NOTION_PAGE", + "notion create page", + ); + } + + #[test] + fn real_data_full_funnel_report() { + // Non-asserting report showing the reduction ratio across all toolkits + // for a representative query. Prints to stderr; run with + // `cargo test real_data_full_funnel_report -- --nocapture`. + let cases: &[(&str, &str)] = &[ + ("gmail", "send an email to the team about the release"), + ( + "github", + "create a pull request from feature branch to main", + ), + ("slack", "post a message to the general channel"), + ("notion", "create a new page in the engineering database"), + ( + "googlesheets", + "add a row with today's sales to the revenue sheet", + ), + ("googledrive", "upload a file to the shared design folder"), + ("instagram", "schedule a post with this photo and caption"), + ("reddit", "comment on the top post in r/rust"), + ("facebook", "post a status update to my page"), + ]; + let mut total_in = 0usize; + let mut total_out = 0usize; + for (tk, q) in cases { + let actions = load_real_toolkit(tk); + let hits = filter_actions_by_prompt(q, &actions, 15); + let kept = if hits.len() >= MIN_CONFIDENT_HITS { + hits.len() + } else { + actions.len() // fallback path + }; + total_in += actions.len(); + total_out += kept; + eprintln!( + "{:13} {:4} → {:3} ({:5.1}% kept) query: {}", + tk, + actions.len(), + kept, + 100.0 * kept as f64 / actions.len() as f64, + q + ); + } + eprintln!( + "TOTAL {total_in:4} → {total_out:3} ({:5.1}% kept)", + 100.0 * total_out as f64 / total_in as f64 + ); + assert!(total_out < total_in / 3, "overall reduction should be >66%"); + } +} diff --git a/src/openhuman/composio/ops.rs b/src/openhuman/composio/ops.rs index b396645fa..caf9ab45d 100644 --- a/src/openhuman/composio/ops.rs +++ b/src/openhuman/composio/ops.rs @@ -1007,8 +1007,21 @@ mod tests { #[tokio::test] async fn fetch_connected_integrations_via_mock_aggregates_tools() { // Connections: gmail + notion. Tools: filtered to those toolkits - // and prefixed with the uppercased slug. + // and prefixed with the uppercased slug. The toolkits route + // backs the `list_toolkits()` allowlist gate that + // `fetch_connected_integrations_uncached` calls before touching + // connections — without it the function bails out at the first + // step and returns an empty vec. let app = Router::new() + .route( + "/agent-integrations/composio/toolkits", + get(|| async { + Json(json!({ + "success": true, + "data": {"toolkits": ["gmail", "notion"]} + })) + }), + ) .route( "/agent-integrations/composio/connections", get(|| async { diff --git a/tests/fixtures/composio_facebook.json b/tests/fixtures/composio_facebook.json new file mode 100644 index 000000000..38e088bdb --- /dev/null +++ b/tests/fixtures/composio_facebook.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"logs":["composio: 43 tool(s) listed"],"result":{"tools":[{"function":{"description":"Assigns tasks/roles to a business-scoped user or system user for a specific Facebook Page. Important: This action requires a business-scoped user ID or system user ID from Facebook Business Manager. Regular Facebook user IDs cannot be used. The page must also be managed through Facebook Business Manager for this action to work. Required permissions: business_management, pages_manage_metadata","name":"FACEBOOK_ASSIGN_PAGE_TASK","parameters":{"properties":{"page_id":{"description":"The ID of the Facebook Page","title":"Page Id","type":"string"},"tasks":{"description":"List of tasks to assign. Valid values include: 'MANAGE', 'CREATE_CONTENT', 'MODERATE', 'ADVERTISE', 'ANALYZE', 'MESSAGING'. Example: ['MANAGE', 'CREATE_CONTENT']","items":{"type":"string"},"title":"Tasks","type":"array"},"user":{"description":"The business-scoped user ID or system user ID to assign tasks to. Note: Regular Facebook user IDs are not accepted - only business-scoped IDs (from Business Manager) or system user IDs can be used with this endpoint.","title":"User","type":"string"}},"required":["page_id","user","tasks"],"title":"AssignPageTaskRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a comment on a Facebook post or replies to an existing comment.","name":"FACEBOOK_CREATE_COMMENT","parameters":{"properties":{"attachment_id":{"description":"ID of an unpublished photo to attach to the comment","title":"Attachment Id","type":"string"},"attachment_share_url":{"description":"URL of a GIF to attach to the comment","title":"Attachment Share Url","type":"string"},"attachment_url":{"description":"URL of a photo to attach to the comment","title":"Attachment Url","type":"string"},"message":{"description":"The text content of the comment","title":"Message","type":"string"},"object_id":{"description":"The ID of the post or comment to comment on. Must be a numeric ID (e.g., '3071372469667482') or compound format 'pageId_postId' (e.g., '678465505624869_3071372469667482'). Do not include prefixes like 'post_', 'id_', or 'p'.","title":"Object Id","type":"string"}},"required":["object_id","message"],"title":"CreateCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new photo album on a Facebook Page. Note: This endpoint requires the 'pages_manage_posts' permission or equivalent permissions to be granted to your Facebook application. This action is publicly visible on the Page; confirm with the user before calling.","name":"FACEBOOK_CREATE_PHOTO_ALBUM","parameters":{"properties":{"location":{"description":"Location associated with the album","title":"Location","type":"string"},"message":{"description":"Description of the album","title":"Message","type":"string"},"name":{"description":"Name of the photo album","title":"Name","type":"string"},"page_id":{"description":"The ID of the Facebook Page Must be a Facebook Page ID — personal profile or user timeline IDs are invalid.","title":"Page Id","type":"string"},"privacy":{"additionalProperties":{"type":"string"},"description":"Privacy settings for the album (e.g., {'value': 'EVERYONE'})","title":"Privacy","type":"object"}},"required":["page_id","name"],"title":"CreatePhotoAlbumRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a photo post on a Facebook Page. Requires an image to be provided via either 'url' (publicly accessible image URL) or 'photo' (local image file upload). This action is specifically for posting images with optional captions, not text-only posts. Returns a composite post_id (PageID_PostID); use this for follow-up operations, not the photo/media id alone.","name":"FACEBOOK_CREATE_PHOTO_POST","parameters":{"properties":{"backdated_time":{"description":"Unix timestamp to backdate the post","title":"Backdated Time","type":"integer"},"backdated_time_granularity":{"description":"Granularity of backdated time: year, month, day, hour, or min","title":"Backdated Time Granularity","type":"string"},"media":{"description":"Alias for 'photo'. for uploading a local image file (e.g..jpg.png.gif). At least one of 'media', 'photo', or 'url' is required.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"message":{"description":"Caption text for the photo. Can also be provided as 'caption'.","title":"Message","type":"string"},"page_id":{"description":"The numeric ID of the Facebook Page to post to. Can be provided as a string or number.","title":"Page Id","type":"string"},"photo":{"description":"for uploading a local image file (e.g..jpg.png.gif). At least one of 'photo', 'url', or 'media' is required.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"published":{"default":true,"description":"Set to true to publish immediately, false to save as unpublished","title":"Published","type":"boolean"},"scheduled_publish_time":{"description":"Unix timestamp for scheduled posts (required if published=false) Must be a future UTC epoch timestamp. Providing this with published=true triggers a 400 validation error.","title":"Scheduled Publish Time","type":"integer"},"url":{"description":"URL of a publicly accessible image to upload. Supports direct image links with or without file extensions (e.g., https://example.com/image.jpg or hash-based URLs from services like Imgur, Gyazo, Postimages). The image host must not block requests from Facebook. Cannot be a Facebook URL. At least one of 'url', 'photo', or 'media' is required. The URL must return an image MIME type directly — redirects or HTML pages cause upload failures.","title":"Url","type":"string"}},"required":["page_id"],"title":"CreatePhotoPostRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new text or link post on a Facebook Page. Requires `pages_manage_posts` permission and manage-level Page role on the target Page. For image posts use FACEBOOK_CREATE_PHOTO_POST; for video posts use FACEBOOK_CREATE_VIDEO_POST — media fields are not supported here. Returns a composite post ID in `PageID_PostID` format, required for FACEBOOK_GET_POST retrieval.","name":"FACEBOOK_CREATE_POST","parameters":{"properties":{"link":{"description":"URL to include in the post","title":"Link","type":"string"},"message":{"description":"The text content of the post At least one of `message` or `link` must be non-empty; omitting both causes a validation error.","title":"Message","type":"string"},"page_id":{"description":"The numeric ID of the Facebook Page to post to. This is a numeric string (e.g., '123456789012345'). To obtain a valid page_id, use the 'Get User Pages' or 'List Managed Pages' action which returns page IDs for pages you have access to manage.","title":"Page Id","type":"string"},"published":{"default":true,"description":"Set to true to publish immediately, false to save as draft or schedule","title":"Published","type":"boolean"},"scheduled_publish_time":{"description":"Unix timestamp for when the post should be published. Must be at least 10 minutes in the future. When provided, published must be false (will be auto-set to false if true). Must be Unix UTC epoch (not local time); timezone mismatches cause validation failures.","title":"Scheduled Publish Time","type":"integer"},"targeting":{"additionalProperties":true,"description":"Audience targeting specifications","title":"Targeting","type":"object"}},"required":["page_id","message"],"title":"CreatePostRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a video post on a Facebook Page. Requires a Page access token with `pages_manage_posts` scope and manage-level permissions on the target page.","name":"FACEBOOK_CREATE_VIDEO_POST","parameters":{"properties":{"description":{"description":"Description of the video","title":"Description","type":"string"},"file_url":{"description":"URL of the video file to upload. At least one of 'file_url' or 'video' must be provided. Must be a direct download URL (e.g., direct MP4 link), not a watch/share URL. Use MP4 with H.264/AAC encoding; unsupported formats or very large files may fail.","title":"File Url","type":"string"},"page_id":{"description":"The ID of the Facebook Page Must be a Facebook Page ID (not a personal profile ID); the authenticated token must have manage-level access.","title":"Page Id","type":"string"},"published":{"default":true,"description":"Whether to publish immediately","title":"Published","type":"boolean"},"scheduled_publish_time":{"description":"Unix timestamp to schedule the video post Requires `published=false`; must be a UTC Unix epoch at least ~10 minutes in the future. Combining with `published=true` or omitting when `published=false` causes 400 errors.","title":"Scheduled Publish Time","type":"integer"},"targeting":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"items":{"type":"string"},"type":"array"}]},"description":"Audience targeting specifications","title":"Targeting","type":"object"},"title":{"description":"Title of the video","title":"Title","type":"string"},"video":{"description":"Local video file to upload. At least one of 'video' or 'file_url' must be provided.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"}},"required":["page_id"],"title":"CreateVideoPostRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a Facebook comment. Requires a Page Access Token with appropriate permissions for comments on Page-owned content. The page_id parameter helps ensure the correct page token is used for authentication.","name":"FACEBOOK_DELETE_COMMENT","parameters":{"properties":{"comment_id":{"description":"The ID of the comment to delete. Can be in format 'parentId_commentId' (e.g., '122157027176937815_1371138271476143') or just the comment ID.","title":"Comment Id","type":"string"},"page_id":{"description":"Optional: The ID of the Facebook Page that owns the post containing this comment. If not provided, the action will use the first available managed page. Providing the correct page_id ensures proper authentication.","title":"Page Id","type":"string"}},"required":["comment_id"],"title":"DeleteCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes a Facebook Page post. Deletion is irreversible — deleted posts cannot be recovered. For bulk deletions, keep throughput to ~1 delete/second to avoid Graph API rate limits.","name":"FACEBOOK_DELETE_POST","parameters":{"properties":{"post_id":{"description":"The ID of the post to delete The token must have Page-level delete permissions for this post. Posts created by other users or requiring elevated Page roles may not be deletable.","title":"Post Id","type":"string"}},"required":["post_id"],"title":"DeletePostRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves details of a specific Facebook comment.","name":"FACEBOOK_GET_COMMENT","parameters":{"properties":{"comment_id":{"description":"The ID of the comment to retrieve","title":"Comment Id","type":"string"},"fields":{"default":"id,message,created_time,from,attachment,comment_count,like_count,is_hidden,parent","description":"Comma-separated list of fields to return","title":"Fields","type":"string"}},"required":["comment_id"],"title":"GetCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves comments from a Facebook post or comment (for replies). This endpoint requires appropriate permissions: - For page-owned posts: A Page Access Token with 'pages_read_engagement' permission - The API automatically swaps user tokens for page tokens when available API Version: Uses v23.0 which was released May 2025.","name":"FACEBOOK_GET_COMMENTS","parameters":{"properties":{"fields":{"default":"id,message,created_time,from,attachment,comment_count,like_count,is_hidden","description":"Comma-separated list of fields to return for each comment. Available fields: id, message, created_time, from, attachment, comment_count, like_count, is_hidden, user_likes, can_comment, can_remove, can_hide, permalink_url, parent, comments (for nested replies). Note: 'from' field requires a Page Token to access user information (since Graph API v2.11).","title":"Fields","type":"string"},"filter":{"description":"Filter comments by type: 'stream' returns all comments including replies in flat list (default), 'toplevel' returns only top-level comments without replies.","title":"Filter","type":"string"},"limit":{"default":25,"description":"Number of comments to return (max 100)","maximum":100,"minimum":1,"title":"Limit","type":"integer"},"object_id":{"description":"The ID of the post or comment to get comments from. Must be in full format 'pageId_postId' for posts (e.g., '123456789_987654321'). For comments, use the comment ID directly.","title":"Object Id","type":"string"},"order":{"description":"Order of comments: 'chronological' (oldest first) or 'reverse_chronological' (newest first, default).","title":"Order","type":"string"}},"required":["object_id"],"title":"GetCommentsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves messages from a specific conversation.","name":"FACEBOOK_GET_CONVERSATION_MESSAGES","parameters":{"properties":{"conversation_id":{"description":"The ID of the conversation in the format 't_' followed by a numeric ID (e.g., 't_3638640842939952'). Obtain valid conversation IDs from the Get Page Conversations action. If a numeric-only ID is provided, the 't_' prefix will be added automatically.","title":"Conversation Id","type":"string"},"fields":{"default":"id,created_time,from,to,message","description":"Comma-separated list of fields to return for each message. Available fields include: id, created_time, from, to, message, attachments, sticker, shares, tags.","title":"Fields","type":"string"},"limit":{"default":25,"description":"Number of messages to return (max 25) To retrieve full histories, paginate using `paging.cursors.after` or the `next` URL from the response.","maximum":25,"minimum":1,"title":"Limit","type":"integer"},"page_id":{"description":"The ID of the Facebook Page that owns the conversation. Required to obtain the correct page access token. Get this from the List Managed Pages action.","title":"Page Id","type":"string"}},"required":["page_id","conversation_id"],"title":"GetConversationMessagesRequest","type":"object"}},"type":"function"},{"function":{"description":"Validates the access token and retrieves the authenticated user's own profile via /me. Cannot fetch arbitrary users by name or ID.","name":"FACEBOOK_GET_CURRENT_USER","parameters":{"properties":{"fields":{"default":"id,name,email","description":"Comma-separated list of fields to return for the current user Fields are silently omitted or return null if the access token lacks the required Facebook permissions — including defaults like `email`. Handle missing fields defensively.","title":"Fields","type":"string"}},"title":"GetCurrentUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves details of a specific message sent or received by the Page.","name":"FACEBOOK_GET_MESSAGE_DETAILS","parameters":{"properties":{"fields":{"default":"id,created_time,from,to,message","description":"Comma-separated list of fields to return","title":"Fields","type":"string"},"message_id":{"description":"The ID of the message to retrieve details for","title":"Message Id","type":"string"}},"required":["message_id"],"title":"GetMessageDetailsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a list of conversations between users and the Page.","name":"FACEBOOK_GET_PAGE_CONVERSATIONS","parameters":{"properties":{"fields":{"default":"participants,updated_time,id","description":"Comma-separated list of fields to return for each conversation Avoid requesting heavy nested fields (e.g., embedded messages) to prevent large payloads.","title":"Fields","type":"string"},"limit":{"default":25,"description":"Number of conversations to return (max 25) Use `paging.cursors.after` or `paging.next` from the response to paginate beyond the first page.","maximum":25,"minimum":1,"title":"Limit","type":"integer"},"page_id":{"description":"The ID of the Facebook Page. Numeric IDs are accepted and will be converted to strings.","title":"Page Id","type":"string"}},"required":["page_id"],"title":"GetPageConversationsRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches details about a specific Facebook Page.","name":"FACEBOOK_GET_PAGE_DETAILS","parameters":{"properties":{"fields":{"default":"id,name,about,category,description,fan_count,followers_count,website","description":"Comma-separated list of fields to return for the Page. Common valid fields include: id, name, about, category, description, fan_count, followers_count, website, link, username, is_published, access_token, emails, phone, location, hours, cover, picture, engagement, verification_status, and many more. IMPORTANT: The following fields are NOT valid for direct Page queries and will be automatically filtered out: 'tasks' (only available via /me/accounts endpoint - use FACEBOOK_LIST_MANAGED_PAGES to get page tasks), 'created_time' (not supported on all page node types such as ProfileDelegatePage). For a complete list of valid Page fields, refer to the Facebook Graph API Page reference.","title":"Fields","type":"string"},"page_id":{"description":"The unique numeric ID of the Facebook Page to get details for. This must be a valid Facebook Page ID that the authenticated user has access to view. Facebook Page IDs are numeric strings typically 15-16 digits long (e.g., '678594635343968'). To find valid page IDs you have access to, first use the FACEBOOK_LIST_MANAGED_PAGES or FACEBOOK_GET_USER_PAGES actions to retrieve a list of pages you manage, which will include their IDs. You can also find a page's ID in its Facebook URL (e.g., https://www.facebook.com/123456789012345) or in the Page's 'About' section. Do not use arbitrary numbers, timestamps, bank account numbers, or other non-Facebook identifiers.","title":"Page Id","type":"string"}},"required":["page_id"],"title":"GetPageDetailsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves analytics and insights for a Facebook Page. Returns metrics like impressions, page views, fan counts, and engagement data. Empty objects (`{}`) in results indicate missing data, not zero values. High-volume calls risk Graph API rate limits (error codes 4/613).","name":"FACEBOOK_GET_PAGE_INSIGHTS","parameters":{"properties":{"metrics":{"default":"page_follows,page_daily_follows_unique,page_daily_unfollows_unique,page_media_view,page_post_engagements,page_video_views,page_total_actions","description":"Comma-separated list of metrics to retrieve. VALID METRICS: page_follows (total followers), page_daily_follows_unique (new follows), page_daily_unfollows_unique (unfollows), page_media_view (content views), page_post_engagements (engagement count), page_video_views (video views), page_total_actions (CTA clicks), page_actions_post_reactions_total (reactions breakdown). DEPRECATED (will be auto-replaced): page_impressions -> page_media_view, page_fans -> page_follows, page_engaged_users -> page_post_engagements, page_fan_adds -> page_daily_follows_unique. Individual reaction metrics (page_actions_post_reactions_like_total, etc.) are deprecated; use page_actions_post_reactions_total instead. Not all metric/period combinations are valid; incompatible combinations return empty data — reduce metrics list or adjust period if this occurs.","title":"Metrics","type":"string"},"page_id":{"description":"The ID of the Facebook Page Must be a numeric Page ID; page names, URLs, and personal profile IDs are invalid.","title":"Page Id","type":"string"},"period":{"default":"day","description":"Period for the metrics: day, week, days_28, month, lifetime Using `lifetime` with bounded `since`/`until` ranges produces misleading or empty results. Standardize all date inputs to UTC.","title":"Period","type":"string"},"since":{"description":"Start of date range as Unix timestamp (e.g., '1704067200'), ISO 8601 datetime (e.g., '2024-10-01T00:00:00+0000', '2024-10-01'), or strtotime-compatible string (e.g., 'yesterday', '-7 days'). Maximum range is 90 days when combined with 'until'.","title":"Since","type":"string"},"until":{"description":"End of date range as Unix timestamp (e.g., '1704672000'), ISO 8601 datetime (e.g., '2025-01-29T05:12:31+0000', '2025-01-29'), or strtotime-compatible string (e.g., 'now', '-1 day'). Maximum range is 90 days when combined with 'since'.","title":"Until","type":"string"}},"required":["page_id"],"title":"GetPageInsightsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves photos from a Facebook Page. CDN-based URLs (including `source`) are time-limited and expire; download and persist images promptly if long-term access is needed.","name":"FACEBOOK_GET_PAGE_PHOTOS","parameters":{"properties":{"fields":{"default":"id,created_time,name,picture,source,album,height,width,link","description":"Comma-separated list of valid Photo fields to return. Valid fields include: id, created_time, updated_time, name, images, height, width, picture, link, icon, from, album, backdated_time, place, page_story_id, target, event, can_delete, can_tag, webp_images. NOTE: 'reactions' and 'comments' are NOT valid fields - they are edges that must be accessed via separate API calls (e.g., /{photo-id}/reactions, /{photo-id}/comments).","title":"Fields","type":"string"},"limit":{"default":25,"description":"Number of photos to return (max 100) Use paging cursors from the response to iterate through all available photos in large libraries; limit=100 does not guarantee all photos are returned in one call.","maximum":100,"minimum":1,"title":"Limit","type":"integer"},"page_id":{"description":"The numeric ID of the Facebook Page (e.g., '678594635343968'). You can obtain page IDs using the FACEBOOK_LIST_MANAGED_PAGES action. Do NOT pass datetime strings, timestamps, or date values - only valid Facebook page IDs.","title":"Page Id","type":"string"},"type":{"description":"Filter by photo type: uploaded, tagged","title":"Type","type":"string"}},"required":["page_id"],"title":"GetPagePhotosRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves posts from a Facebook Page. Endpoint choice: Uses /{page_id}/feed instead of /posts or /published_posts because: - /feed returns all content on page timeline (page's posts + visitor posts + tagged posts) - /posts returns only posts created by the page itself - /published_posts returns only published posts by the page (excludes scheduled/unpublished) The /feed endpoint provides the most comprehensive view of page activity. Pagination: follow paging.cursors.after or paging.next across multiple calls until no next cursor exists. Throttling: high-volume pagination can trigger Graph API errors 4 and 613; use backoff between requests. API Version: Uses v23.0 (released May 2025). v20.0 and earlier will be deprecated by Meta. See: https://developers.facebook.com/docs/graph-api/changelog","name":"FACEBOOK_GET_PAGE_POSTS","parameters":{"properties":{"fields":{"default":"id,message,created_time,updated_time,permalink_url,attachments","description":"Comma-separated list of fields to return for each post. Supported fields include: id, message, created_time, updated_time, permalink_url, attachments, story, from, status_type, full_picture, shares, reactions, comments, is_hidden, is_published. For summary counts, use '.summary(true)' syntax (e.g., 'reactions.summary(true)', 'comments.summary(true)', 'likes.summary(true)'). Note: 'type', 'link', 'source', 'picture', 'name', 'caption', 'description', and 'icon' are deprecated since Graph API v3.3 and will be automatically removed if requested. Response nests engagement data: extract reactions.summary.total_count, comments.summary.total_count, and shares.count; treat missing keys as zero.","title":"Fields","type":"string"},"limit":{"default":25,"description":"Number of posts to return (max 100)","maximum":100,"minimum":1,"title":"Limit","type":"integer"},"page_id":{"description":"The ID of the Facebook Page. Can be provided as a string or number. Must be a Facebook Page ID, not a personal profile or user ID — use FACEBOOK_GET_USER_PAGES to obtain a valid Page ID.","title":"Page Id","type":"string"},"removed_deprecated_fields":{"description":"Internal field to track deprecated fields that were automatically removed.","items":{"type":"string"},"title":"Removed Deprecated Fields","type":"array"},"since":{"description":"Filter posts updated after this time. Accepts: Unix timestamp (e.g., '1705320000'), strtotime values (e.g., 'yesterday', '7 days ago', 'last week'), or datetime strings (e.g., '2024-01-15', '2024-01-15T12:00:00'). Datetime strings are automatically converted to Unix timestamps.","title":"Since","type":"string"},"until":{"description":"Filter posts updated before this time. Accepts: Unix timestamp (e.g., '1705320000'), strtotime values (e.g., 'yesterday', '7 days ago', 'last week'), or datetime strings (e.g., '2024-01-15', '2024-01-15T12:00:00'). Datetime strings are automatically converted to Unix timestamps.","title":"Until","type":"string"}},"required":["page_id"],"title":"GetPagePostsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a list of people and their tasks/roles on a Facebook Page. The connected account must have management access to the target Page; otherwise the response may be empty or incomplete. Returned role types include MANAGE and CREATE_CONTENT — verify these before calling tools like FACEBOOK_UPDATE_PAGE_SETTINGS. Recently changed roles may take time to propagate; retry if role data appears stale after an update.","name":"FACEBOOK_GET_PAGE_ROLES","parameters":{"properties":{"after":{"description":"Cursor string for forward pagination. Use the 'after' cursor from a previous response's paging.cursors.after field to retrieve the next page of results.","title":"After","type":"string"},"before":{"description":"Cursor string for backward pagination. Use the 'before' cursor from a previous response's paging.cursors.before field to retrieve the previous page of results.","title":"Before","type":"string"},"limit":{"description":"Maximum number of roles to return per request.","minimum":1,"title":"Limit","type":"integer"},"page_id":{"description":"The ID of the Facebook Page","title":"Page Id","type":"string"}},"required":["page_id"],"title":"GetPageRolesRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves posts where a Facebook Page is tagged or mentioned. Use when monitoring brand mentions or tracking posts that tag your Page but don't appear on your Page's own feed.","name":"FACEBOOK_GET_PAGE_TAGGED_POSTS","parameters":{"properties":{"fields":{"default":"id,message,created_time,updated_time,permalink_url,from,attachments","description":"Comma-separated list of fields to return for each post","title":"Fields","type":"string"},"limit":{"default":25,"description":"Number of posts to return (max 100)","maximum":100,"minimum":1,"title":"Limit","type":"integer"},"page_id":{"description":"The ID of the Facebook Page. Can be provided as a string or number.","title":"Page Id","type":"string"},"since":{"description":"Filter posts updated after this time. Accepts: Unix timestamp (e.g., '1705320000'), strtotime values (e.g., 'yesterday', '7 days ago', 'last week'), or datetime strings (e.g., '2024-01-15', '2024-01-15T12:00:00'). Datetime strings are automatically converted to Unix timestamps.","title":"Since","type":"string"},"until":{"description":"Filter posts updated before this time. Accepts: Unix timestamp (e.g., '1705320000'), strtotime values (e.g., 'yesterday', '7 days ago', 'last week'), or datetime strings (e.g., '2024-01-15', '2024-01-15T12:00:00'). Datetime strings are automatically converted to Unix timestamps.","title":"Until","type":"string"}},"required":["page_id"],"title":"GetPageTaggedPostsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves videos from a Facebook Page.","name":"FACEBOOK_GET_PAGE_VIDEOS","parameters":{"properties":{"fields":{"default":"id,created_time,description,title,length,source,picture,views,likes.summary(true)","description":"Comma-separated list of fields to return for each video The `source` field returns time-limited URLs; download or process promptly rather than storing for later use.","title":"Fields","type":"string"},"limit":{"default":25,"description":"Number of videos to return (max 100) Controls only the first batch; iterate through paging cursors (`paging.cursors.after`) until no `next` page is returned to retrieve all videos.","maximum":100,"minimum":1,"title":"Limit","type":"integer"},"page_id":{"description":"The numeric ID of the Facebook Page. This is a numeric string (e.g., '123456789012345'). To obtain a valid page_id, use the 'Get User Pages' or 'List Managed Pages' action which returns page IDs for pages you have access to manage.","title":"Page Id","type":"string"},"type":{"description":"Filter by video type: uploaded, tagged","title":"Type","type":"string"}},"required":["page_id"],"title":"GetPageVideosRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves details of a specific Facebook post.","name":"FACEBOOK_GET_POST","parameters":{"properties":{"fields":{"default":"id,message,created_time,updated_time,permalink_url,from,attachments,likes.summary(true),shares","description":"Comma-separated list of fields to return. Common fields: id, message, created_time, updated_time, permalink_url, from, attachments, shares, story, picture, full_picture, place, privacy, status_type. For engagement metrics with counts, use edge.summary(true) syntax. CORRECT: likes.summary(true), comments.summary(true), reactions.summary(true). WRONG: likes.summary(total_count) - using 'total_count' as parameter causes API syntax errors. The 'true' parameter enables the summary, and total_count is returned in the response automatically. Note: Legacy post fields (name, link, description, type) are deprecated; use 'attachments' edge instead.","title":"Fields","type":"string"},"post_id":{"description":"The ID of the post to retrieve. Must be in full format: 'pageId_postId' where both pageId and postId are numeric (e.g., '123456789_987654321'). Page-scoped IDs (alphanumeric strings like '1ANtnBaCHX' or '17GandZR1N') are not supported. Use FACEBOOK_GET_PAGE_POSTS to obtain valid full-format post IDs.","title":"Post Id","type":"string"}},"required":["post_id"],"title":"GetPostRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves analytics and insights for a specific Facebook post. Returns metrics like impressions, clicks, and engagement data. Very new posts may return empty metric values; allow a short delay before querying and treat absent fields as partial data.","name":"FACEBOOK_GET_POST_INSIGHTS","parameters":{"properties":{"metrics":{"default":"post_media_view","description":"Comma-separated list of metrics to retrieve. Valid metric: post_media_view (the number of times the post entered a person's screen). Note: Older metrics like post_impressions, post_impressions_unique, post_clicks, post_engagements, post_engaged_users, post_reactions_by_type_total were deprecated by Facebook as of November 15, 2025 and are no longer supported. Request only needed metrics to reduce payload size and avoid rate limit errors (error codes 4/613) when iterating over many posts.","title":"Metrics","type":"string"},"period":{"description":"Period for the metrics (only applicable for some metrics): lifetime Supports since/until parameters in UTC; convert from user timezone to avoid misleading aggregates when comparing posts across time windows.","title":"Period","type":"string"},"post_id":{"description":"The ID of the post to get insights for","title":"Post Id","type":"string"}},"required":["post_id"],"title":"GetPostInsightsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves reactions (like, love, wow, etc.) for a Facebook post. Very recent posts may return empty or partial reactions data; treat missing fields as incomplete coverage, not an error.","name":"FACEBOOK_GET_POST_REACTIONS","parameters":{"properties":{"limit":{"default":25,"description":"Number of reactions to return (max 100)","maximum":100,"minimum":1,"title":"Limit","type":"integer"},"post_id":{"description":"The ID of the post to get reactions for","title":"Post Id","type":"string"},"summary":{"default":true,"description":"Include summary with total count per reaction type","title":"Summary","type":"boolean"},"type":{"description":"Filter by reaction type: LIKE, LOVE, WOW, HAHA, SAD, ANGRY, THANKFUL","title":"Type","type":"string"}},"required":["post_id"],"title":"GetPostReactionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves scheduled and unpublished posts for a Facebook Page. Results are cursor-paginated; follow pagination cursors to retrieve all results beyond the limit. When searching for posts near a specific time, filter to a narrow (~±5 minutes) window. Use this tool to check for existing entries before scheduling new posts to avoid duplicates.","name":"FACEBOOK_GET_SCHEDULED_POSTS","parameters":{"properties":{"fields":{"default":"id,message,created_time,scheduled_publish_time,is_published","description":"Comma-separated list of fields to return for each post","title":"Fields","type":"string"},"limit":{"default":25,"description":"Number of posts to return (max 100)","maximum":100,"minimum":1,"title":"Limit","type":"integer"},"page_id":{"description":"The ID of the Facebook Page","title":"Page Id","type":"string"}},"required":["page_id"],"title":"GetScheduledPostsRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use FACEBOOK_LIST_MANAGED_PAGES instead. Retrieves Facebook Pages the user manages (excludes personal profiles, groups, and non-Page entities); an empty `data` array means no manageable Pages exist. Requires `pages_show_list` scope; missing scopes yield empty `data` or OAuthException code 200. Results paginate ~100 items per page — follow `paging.cursors.after` or `next` until exhausted.","name":"FACEBOOK_GET_USER_PAGES","parameters":{"properties":{"after":{"description":"Cursor string for pagination. Use the 'after' cursor from a previous response's paging.cursors.after field to retrieve the next page of results.","title":"After","type":"string"},"composio_execution_message":{"description":"Execution message from preprocessing.","title":"Composio Execution Message","type":"string"},"fields":{"default":"id,name,access_token,tasks","description":"Comma-separated list of fields to return for each page. Supported fields include: id, name, access_token, tasks, category, category_list, picture, link, fan_count, followers_count, is_published, global_brand_page_name, instagram_business_account, verification_status, is_webhooks_subscribed. Always include `id` and `name` to avoid extra identity-resolution calls. Check `tasks` values before write actions — Page inclusion does not guarantee publish/manage permissions.","title":"Fields","type":"string"},"limit":{"description":"Maximum number of pages to return per request.","minimum":1,"title":"Limit","type":"integer"},"user_id":{"default":"me","description":"The ID of the user whose pages to retrieve. Defaults to 'me' for current user.","title":"User Id","type":"string"}},"title":"GetUserPagesRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a LIKE reaction to a Facebook post or comment. Note: Due to API limitations, only LIKE reactions can be added programmatically. This action is user-visible and irreversible — confirm with the user before calling.","name":"FACEBOOK_LIKE_POST_OR_COMMENT","parameters":{"properties":{"object_id":{"description":"The ID of the post or comment to react to. Facebook IDs are numeric strings (typically 15-20 digits). Must belong to a Page post or comment, not a personal profile timeline.IMPORTANT: Always pass IDs as strings to preserve precision. Integer values will be converted to strings, but float values (including scientific notation like 5.3e+32) are rejected because they lose precision.","title":"Object Id","type":"string"},"type":{"default":"LIKE","description":"Reaction type: Currently only LIKE is supported via API. Other reactions (LOVE, WOW, HAHA, SAD, ANGRY, THANKFUL) cannot be added programmatically","title":"Type","type":"string"}},"required":["object_id"],"title":"LikePostOrCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a list of Facebook Pages that the user manages (not personal profiles), including page details, access tokens, and tasks. Requires `pages_show_list` or `pages_read_engagement` OAuth scopes; missing scopes silently return empty results rather than an error. An empty `data` array means the user manages no Pages. Results are paginated via `paging.cursors`; follow `paging.next` until absent to retrieve all Pages when count exceeds `limit`. Graph API throttling (error codes 4, 17, 613) can occur during pagination — use exponential backoff.","name":"FACEBOOK_LIST_MANAGED_PAGES","parameters":{"properties":{"after":{"description":"Cursor string for forward pagination. Use the 'after' cursor from a previous response's paging.cursors.after field to retrieve the next page of results.","title":"After","type":"string"},"before":{"description":"Cursor string for backward pagination. Use the 'before' cursor from a previous response's paging.cursors.before field to retrieve the previous page of results.","title":"Before","type":"string"},"fields":{"default":"id,name,access_token,category,tasks,about,link,picture","description":"Comma-separated list of fields to return for each managed page.","title":"Fields","type":"string"},"limit":{"default":25,"description":"Maximum number of pages to retrieve per request.","title":"Limit","type":"integer"},"user_id":{"default":"me","description":"The ID of the user whose managed pages to retrieve. Defaults to 'me' for current user.","title":"User Id","type":"string"}},"title":"ListManagedPagesRequest","type":"object"}},"type":"function"},{"function":{"description":"Marks a user's message as seen by the Page, visibly updating the read status in the user's conversation. Note: This action requires an active messaging session with the user. Facebook's messaging policy requires that users have messaged the Page within the last 24 hours for sender actions to work.","name":"FACEBOOK_MARK_MESSAGE_SEEN","parameters":{"properties":{"page_id":{"description":"The ID of the Facebook Page","title":"Page Id","type":"string"},"recipient_id":{"description":"The ID of the user whose message to mark as seen","title":"Recipient Id","type":"string"}},"required":["page_id","recipient_id"],"title":"MarkMessageSeenRequest","type":"object"}},"type":"function"},{"function":{"description":"Publishes a previously scheduled or unpublished Facebook post immediately. This action takes a scheduled or unpublished post and publishes it immediately by setting is_published to true. The post must have been previously created with published=false or with a scheduled_publish_time. Requirements: - The post must exist and be in an unpublished/scheduled state - The user must have admin access to the page that owns the post - The app must have pages_manage_posts permission","name":"FACEBOOK_PUBLISH_SCHEDULED_POST","parameters":{"properties":{"page_id":{"description":"Optional: The ID of the Facebook Page that owns the post. If not provided, it will be extracted from the post_id (the part before the underscore).","title":"Page Id","type":"string"},"post_id":{"description":"The ID of the scheduled/unpublished post to publish. Format is typically 'pageId_postId' (e.g., '123456789_987654321'). Use 'Get Scheduled Posts' action to find scheduled post IDs.","title":"Post Id","type":"string"}},"required":["post_id"],"title":"PublishScheduledPostRequest","type":"object"}},"type":"function"},{"function":{"description":"Removes a user's tasks/access from a specific Facebook Page. Caller must have admin-level rights on the Page. Operates on one page_id at a time; repeat for each page if removing from multiple pages. Partial access may remain if only some tasks are revoked.","name":"FACEBOOK_REMOVE_PAGE_TASK","parameters":{"properties":{"page_id":{"description":"The ID of the Facebook Page","title":"Page Id","type":"string"},"user":{"description":"The ID or username of the user to remove Verify this matches the intended collaborator before calling; a mismatch revokes access for the wrong account.","title":"User","type":"string"}},"required":["page_id","user"],"title":"RemovePageTaskRequest","type":"object"}},"type":"function"},{"function":{"description":"Changes the scheduled publish time of an unpublished Facebook post. This action updates the scheduled_publish_time of a previously scheduled post. The post must have been created with published=false and a scheduled_publish_time.","name":"FACEBOOK_RESCHEDULE_POST","parameters":{"properties":{"post_id":{"description":"The ID of the scheduled post to reschedule. Format is typically 'pageId_postId' (e.g., '123456789_987654321').","title":"Post Id","type":"string"},"scheduled_publish_time":{"description":"New Unix timestamp for when to publish the post. Must be at least 10 minutes in the future and no more than 6 months ahead.","title":"Scheduled Publish Time","type":"integer"}},"required":["post_id","scheduled_publish_time"],"title":"ReschedulePostRequest","type":"object"}},"type":"function"},{"function":{"description":"Searches for Facebook Pages based on a query string. Returns pages matching the search criteria with requested fields. DEPRECATION WARNING: The /pages/search endpoint was deprecated by Facebook in 2019 and is now ONLY available to Workplace by Meta apps. Standard Facebook apps will receive Error #10 (permission error) regardless of which permissions or features have been granted. For Workplace apps only - requires one of: - 'pages_read_engagement' permission - 'Page Public Content Access' feature - 'Page Public Metadata Access' feature Standard Facebook apps should use alternative methods to discover pages, such as: - Direct page ID lookup via /{page-id} endpoint - User's managed pages via /me/accounts endpoint Reference: https://developers.facebook.com/docs/apps/review/feature#reference-PAGES_ACCESS. Results include only Facebook Pages; personal profiles, groups, and other entity types are excluded.","name":"FACEBOOK_SEARCH_PAGES","parameters":{"properties":{"fields":{"default":"id,name,category,link,picture,fan_count,is_verified","description":"Comma-separated list of fields to retrieve for each page Returned field data (e.g., fan_count, location) can be sparse or outdated; avoid relying on a single field for selection logic.","title":"Fields","type":"string"},"limit":{"default":10,"description":"Maximum number of results to return (max 100) A specific target page may not appear in a single response; refine the query string if the desired page is missing.","title":"Limit","type":"integer"},"query":{"description":"Search query for finding pages (e.g., business name, topic, etc.)","title":"Query","type":"string"}},"required":["query"],"title":"SearchPagesRequest","type":"object"}},"type":"function"},{"function":{"description":"Sends a media message (image, video, audio, or file) from the Page to a user.","name":"FACEBOOK_SEND_MEDIA_MESSAGE","parameters":{"properties":{"is_reusable":{"default":false,"description":"Whether the attachment is reusable","title":"Is Reusable","type":"boolean"},"media_type":{"description":"Type of media: image, video, audio, or file","title":"Media Type","type":"string"},"media_url":{"description":"URL of the media to send","title":"Media Url","type":"string"},"messaging_type":{"default":"RESPONSE","description":"The messaging type - RESPONSE, UPDATE, or MESSAGE_TAG","title":"Messaging Type","type":"string"},"page_id":{"description":"The ID of the Facebook Page sending the message","title":"Page Id","type":"string"},"recipient_id":{"description":"The ID of the message recipient (user ID or PSID)","title":"Recipient Id","type":"string"},"tag":{"description":"Message tag required when messaging_type is MESSAGE_TAG. Valid tags include: CONFIRMED_EVENT_UPDATE, POST_PURCHASE_UPDATE, ACCOUNT_UPDATE, HUMAN_AGENT","title":"Tag","type":"string"}},"required":["page_id","recipient_id","media_type","media_url"],"title":"SendMediaMessageRequest","type":"object"}},"type":"function"},{"function":{"description":"Sends a text message from a Facebook Page (not personal profiles) to a user via Messenger. Requires explicit user confirmation before calling, as this action delivers a message to a real end user.","name":"FACEBOOK_SEND_MESSAGE","parameters":{"properties":{"message_text":{"description":"The text content of the message to send","title":"Message Text","type":"string"},"messaging_type":{"default":"RESPONSE","description":"The messaging type - RESPONSE, UPDATE, or MESSAGE_TAG. Use RESPONSE within 24 hours of user's last message. Use MESSAGE_TAG with a tag parameter to send outside the 24-hour window.","title":"Messaging Type","type":"string"},"page_id":{"description":"The ID of the Facebook Page sending the message Must be a numeric page ID, not a username or alias.","title":"Page Id","type":"string"},"recipient_id":{"description":"The ID of the message recipient (user ID or PSID) Must be a numeric PSID, not a username or display name.","title":"Recipient Id","type":"string"},"tag":{"description":"Required when messaging_type is MESSAGE_TAG. Valid tags: HUMAN_AGENT (within 7 days of last user message for human agent responses), CONFIRMED_EVENT_UPDATE (for registered event updates), POST_PURCHASE_UPDATE (for purchase-related updates), ACCOUNT_UPDATE (for non-recurring account changes).","title":"Tag","type":"string"}},"required":["page_id","recipient_id","message_text"],"title":"SendMessageRequest","type":"object"}},"type":"function"},{"function":{"description":"Shows or hides the typing indicator for a user in Messenger.","name":"FACEBOOK_TOGGLE_TYPING_INDICATOR","parameters":{"properties":{"page_id":{"description":"The ID of the Facebook Page","title":"Page Id","type":"string"},"recipient_id":{"description":"The Page-Scoped ID (PSID) of the user to show/hide typing indicator for","title":"Recipient Id","type":"string"},"typing_on":{"description":"True to show typing indicator, False to hide it","title":"Typing On","type":"boolean"}},"required":["page_id","recipient_id","typing_on"],"title":"ToggleTypingIndicatorRequest","type":"object"}},"type":"function"},{"function":{"description":"Removes a like from a Facebook post or comment.","name":"FACEBOOK_UNLIKE_POST_OR_COMMENT","parameters":{"properties":{"object_id":{"description":"The ID of the post or comment to unlike. Facebook IDs are numeric strings (typically 15-20 digits). IMPORTANT: Always pass IDs as strings to preserve precision. Integer values will be converted to strings, but float values (including scientific notation like 5.3e+32) are rejected because they lose precision.","title":"Object Id","type":"string"}},"required":["object_id"],"title":"UnlikePostOrCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates an existing Facebook comment. IMPORTANT: This action requires a Page Access Token. The comment must belong to a post on a Page that you manage. Use the page_id parameter to ensure the correct page token is used, especially if you manage multiple pages.","name":"FACEBOOK_UPDATE_COMMENT","parameters":{"properties":{"comment_id":{"description":"The ID of the comment to update. Format is typically 'objectId_commentId' (e.g., '122157027176937815_1371138271476143').","title":"Comment Id","type":"string"},"is_hidden":{"description":"Whether to hide or unhide the comment","title":"Is Hidden","type":"boolean"},"message":{"description":"The new text content of the comment","title":"Message","type":"string"},"page_id":{"description":"The ID of the Facebook Page that owns the comment. Required to ensure the correct page access token is used. If not provided, the action will attempt to use the first available page's token, which may fail if you manage multiple pages.","title":"Page Id","type":"string"}},"required":["comment_id","message"],"title":"UpdateCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates settings for a specific Facebook Page. Requires the authenticated user to have MANAGE and CREATE_CONTENT tasks for the target page; verify roles via FACEBOOK_GET_PAGE_ROLES. Not all fields (about, description, general_info, etc.) are available for every Page category.","name":"FACEBOOK_UPDATE_PAGE_SETTINGS","parameters":{"properties":{"about":{"description":"Updated about section for the page","title":"About","type":"string"},"description":{"description":"Updated description for the page","title":"Description","type":"string"},"emails":{"description":"Updated email addresses","items":{"type":"string"},"title":"Emails","type":"array"},"general_info":{"description":"Updated general information","title":"General Info","type":"string"},"page_id":{"description":"The ID of the Facebook Page to update","title":"Page Id","type":"string"},"phone":{"description":"Updated phone number","title":"Phone","type":"string"},"website":{"description":"Updated website URL","title":"Website","type":"string"}},"required":["page_id"],"title":"UpdatePageSettingsRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates an existing Facebook Page post.","name":"FACEBOOK_UPDATE_POST","parameters":{"properties":{"message":{"description":"Updated text content of the post","title":"Message","type":"string"},"og_action_type_id":{"description":"Open Graph action type ID","title":"Og Action Type Id","type":"string"},"og_icon_id":{"description":"Open Graph icon ID","title":"Og Icon Id","type":"string"},"og_object_id":{"description":"Open Graph object ID","title":"Og Object Id","type":"string"},"og_phrase":{"description":"Open Graph phrase","title":"Og Phrase","type":"string"},"og_suggestion_mechanism":{"description":"Open Graph suggestion mechanism","title":"Og Suggestion Mechanism","type":"string"},"post_id":{"description":"The ID of the post to update","title":"Post Id","type":"string"}},"required":["post_id"],"title":"UpdatePostRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use FACEBOOK_CREATE_PHOTO_POST instead. Uploads a photo file directly to a Facebook Page. Supports local file upload up to 10MB.","name":"FACEBOOK_UPLOAD_PHOTO","parameters":{"properties":{"caption":{"description":"Caption for the photo","title":"Caption","type":"string"},"page_id":{"description":"The ID of the Facebook Page. Can be provided as a string or number. Must be a Page ID; personal profile/user timeline IDs are not valid.","title":"Page Id","type":"string"},"photo":{"description":"Photo file to upload (max 10MB). Alternative to 'url'. If a URL string is mistakenly passed here, it will be auto-converted to use the 'url' parameter.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"published":{"default":true,"description":"Whether to publish the photo immediately","title":"Published","type":"boolean"},"scheduled_publish_time":{"description":"Unix timestamp to schedule the post Requires `published=false`; value must be a future UTC epoch in seconds. Using `published=true` with this field causes validation errors.","title":"Scheduled Publish Time","type":"integer"},"tags":{"description":"List of user tags with format [{'tag_uid': 'USER_ID', 'x': 50, 'y': 50}]","items":{"additionalProperties":true,"type":"object"},"title":"Tags","type":"array"},"targeting":{"additionalProperties":true,"description":"Audience targeting specifications","title":"Targeting","type":"object"},"url":{"description":"Public URL of the photo (must be accessible by Facebook servers). Alternative to 'photo'. Use this for images hosted on external servers. Must be a direct HTTPS endpoint returning an image MIME type; redirects, HTML pages, and non-HTTPS URLs fail validation.","title":"Url","type":"string"}},"required":["page_id"],"title":"UploadPhotoRequest","type":"object"}},"type":"function"},{"function":{"description":"Uploads multiple photo files in batch to a Facebook Page or Album. Uses Facebook's batch API for efficient multi-photo upload. Maximum 50 photos per batch.","name":"FACEBOOK_UPLOAD_PHOTOS_BATCH","parameters":{"properties":{"album_id":{"description":"ID of album to add photos to. If not provided, photos will be uploaded to timeline","title":"Album Id","type":"string"},"page_id":{"description":"The ID of the Facebook Page","title":"Page Id","type":"string"},"photo_urls":{"description":"List of photo URLs to upload (alternative to 'photos') Must be direct, publicly accessible HTTPS URLs — no redirects, private URLs, or HTTP.","examples":[["https://.../a.jpg","https://.../b.png"]],"items":{"type":"string"},"title":"Photo Urls","type":"array"},"photos":{"description":"List of photo files to upload (max 50 photos)","items":{"file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"title":"Photos","type":"array"},"published":{"default":true,"description":"Whether to publish the photos immediately To schedule, set to false and include `scheduled_publish_time` as a Unix UTC epoch timestamp; mismatched combinations trigger 400 errors.","title":"Published","type":"boolean"}},"required":["page_id"],"title":"UploadPhotosBatchRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use CreateVideoPost instead. Uploads a video file directly to a Facebook Page. Supports local file upload. For large videos (>100MB), uses resumable upload. After upload completes, the video enters a processing/pending state; do not reference or schedule it until processing finishes.","name":"FACEBOOK_UPLOAD_VIDEO","parameters":{"properties":{"content_tags":{"description":"List of content tags","items":{"type":"string"},"title":"Content Tags","type":"array"},"custom_labels":{"description":"Custom labels for the video","items":{"type":"string"},"title":"Custom Labels","type":"array"},"description":{"description":"Description of the video","title":"Description","type":"string"},"file_url":{"description":"URL of a publicly accessible video file to upload. Either 'file_url' or 'video' must be provided. This is an alternative to uploading a local file.","title":"File Url","type":"string"},"page_id":{"description":"The ID of the Facebook Page","title":"Page Id","type":"string"},"published":{"default":true,"description":"Whether to publish immediately","title":"Published","type":"boolean"},"scheduled_publish_time":{"description":"Unix timestamp to schedule the video post Requires `published=false`; combining with `published=true` triggers a 400 validation error.","title":"Scheduled Publish Time","type":"integer"},"targeting":{"additionalProperties":true,"description":"Audience targeting specifications","title":"Targeting","type":"object"},"title":{"description":"Title of the video","title":"Title","type":"string"},"video":{"description":"Video file to upload (max 10GB, recommended under 1GB). Either 'video' or 'file_url' must be provided. Use MP4 with H.264 video and AAC audio to avoid upload failures.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"}},"required":["page_id"],"title":"UploadVideoRequest","type":"object"}},"type":"function"}]}}} \ No newline at end of file diff --git a/tests/fixtures/composio_github.json b/tests/fixtures/composio_github.json new file mode 100644 index 000000000..ffae00e29 --- /dev/null +++ b/tests/fixtures/composio_github.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"logs":["composio: 500 tool(s) listed"],"result":{"tools":[{"function":{"description":"Tool to abort a repository migration that is queued or in progress. Use when you need to cancel an ongoing migration operation.","name":"GITHUB_ABORT_REPOSITORY_MIGRATION","parameters":{"description":"Request parameters for aborting a repository migration.","properties":{"clientMutationId":{"description":"A unique identifier for the client performing the mutation. This can be used to track the mutation in logs or for idempotency purposes.","examples":["mutation-12345","abort-migration-xyz"],"title":"Client Mutation Id","type":"string"},"migrationId":{"description":"The ID of the repository migration to abort. This is the migration ID returned when a migration was queued (e.g., 'RM_kgDOABCDEF').","examples":["RM_kgDOABCDEF","RM_kgDOGw8pTA"],"title":"Migration Id","type":"string"}},"required":["migrationId"],"title":"AbortRepositoryMigrationRequest","type":"object"}},"type":"function"},{"function":{"description":"Accepts a PENDING repository invitation that has been issued to the authenticated user.","name":"GITHUB_ACCEPT_REPOSITORY_INVITATION","parameters":{"description":"Request schema for accepting a repository invitation.","properties":{"invitation_id":{"description":"Unique identifier of the repository invitation sent TO the authenticated user. Get this ID by listing your pending invitations using the 'List repository invitations for the authenticated user' action.","minimum":1,"title":"Invitation Id","type":"integer"}},"required":["invitation_id"],"title":"AcceptRepositoryInvitationRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds GitHub Apps to the list of apps allowed to push to a protected branch. The branch must already have protection rules with restrictions enabled. This endpoint only works for organization repositories, not personal repositories. Apps must be installed on the repository with 'contents' write permissions.","name":"GITHUB_ADD_APP_ACCESS_RESTRICTIONS","parameters":{"description":"Request schema defining the target repository and branch for applying app access restrictions.","properties":{"apps":{"description":"The list of GitHub App slugs with push access to grant. Apps must be installed on the repository and have 'contents' write permissions. The app slug is the URL-friendly name of the GitHub App (e.g., 'github-actions', 'dependabot').","examples":[["github-actions","dependabot"]],"items":{"type":"string"},"title":"Apps","type":"array"},"branch":{"description":"The name of the branch to which restrictions will be applied. Wildcard characters (e.g., '*') are not allowed in the branch name when using this REST API endpoint. For operations involving wildcard branch names, consult the GitHub GraphQL API.","examples":["main"],"title":"Branch","type":"string"},"owner":{"description":"The organization name that owns the repository. This field is not case-sensitive. Note: This endpoint only works for organization-owned repositories.","examples":["my-org"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo","branch","apps"],"title":"AddAppAccessRestrictionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a GitHub user as a repository collaborator, or updates their permission if already a collaborator; `permission` applies to organization-owned repositories (personal ones default to 'push' and ignore this field), and an invitation may be created or permissions updated directly.","name":"GITHUB_ADD_A_REPOSITORY_COLLABORATOR","parameters":{"description":"Request schema for adding a collaborator to a GitHub repository.","properties":{"owner":{"description":"The account owner of the repository. This name is not case sensitive.","title":"Owner","type":"string"},"permission":{"default":"push","description":"Permission level for the collaborator. For organization-owned repositories, valid values are `pull` (read-only), `triage` (manage issues/PRs), `push` (read/write), `maintain` (manage most settings), `admin` (full control), or a custom repository role name if defined by the owning organization. This parameter is ignored for personal repositories, which grant `push` access.","examples":["pull","triage","push","maintain","admin","custom_role_name"],"title":"Permission","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case sensitive.","title":"Repo","type":"string"},"username":{"description":"The GitHub handle for the user account to add as a collaborator. Cannot be the same as the repository owner, as owners are automatically collaborators.","title":"Username","type":"string"}},"required":["owner","repo","username"],"title":"AddARepositoryCollaboratorRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds assignees to a GitHub issue. This action only adds users - it does not remove existing assignees. Changes are silently ignored if the authenticated user lacks push access to the repository.","name":"GITHUB_ADD_ASSIGNEES_TO_AN_ISSUE","parameters":{"description":"Request model for adding assignees to a GitHub issue.","properties":{"assignees":{"description":"A list of GitHub usernames to add as assignees to the issue. Up to 10 assignees total can be on an issue. NOTE: This endpoint ADDS assignees - it does not replace existing ones. Users already assigned are kept. To remove assignees, use the 'remove_assignees_from_an_issue' action instead. The authenticated user must have push access to the repository; otherwise changes are silently ignored.","examples":[["octocat","hubot"],["dev-user1"]],"items":{"type":"string"},"title":"Assignees","type":"array"},"issue_number":{"description":"The unique number identifying the issue within the repository. Must be a positive integer (GitHub issue numbers start at 1).","examples":[123,42],"minimum":1,"title":"Issue Number","type":"integer"},"owner":{"description":"The username of the account or the organization name that owns the repository. This field is not case sensitive.","examples":["octocat","my-company"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case sensitive.","examples":["hello-world","my-internal-project"],"title":"Repo","type":"string"}},"required":["owner","repo","issue_number"],"title":"AddAssigneesToAnIssueRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds one or more email addresses (which will be initially unverified) to the authenticated user's GitHub account; use this to associate new emails, noting an email verified for another account will error, while an existing email for the current user is accepted.","name":"GITHUB_ADD_EMAIL_ADDRESS_FOR_AUTHENTICATED_USER","parameters":{"description":"Request model for GitHub POST /user/emails. Requires a JSON array of emails.","properties":{"emails":{"description":"Array of email addresses to add to the authenticated user account. Must contain at least one email address.","items":{"type":"string"},"minItems":1,"title":"Emails","type":"array"}},"required":["emails"],"title":"AddEmailAddressForAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to add a custom field to a user-owned GitHub Projects V2 project. Use when you need to add fields like status, priority, or custom data to organize project items.","name":"GITHUB_ADD_FIELD_TO_USER_PROJECT","parameters":{"properties":{"data_type":{"description":"The data type of the field. Use 'single_select' for dropdown fields, 'iteration' for sprint fields, or other types for simple fields.","enum":["text","single_select","number","date","iteration"],"title":"Data Type","type":"string"},"iteration_configuration":{"additionalProperties":false,"description":"Configuration for iteration fields.","properties":{"duration":{"description":"The duration of the iteration in days.","examples":[7,14],"minimum":1,"title":"Duration","type":"integer"},"start_day":{"description":"The day of the week when the iteration starts (1=Monday, 7=Sunday).","examples":[1,5],"maximum":7,"minimum":1,"title":"Start Day","type":"integer"}},"required":["duration","start_day"],"title":"IterationConfiguration","type":"object"},"name":{"description":"The name of the field to create.","examples":["Status","Priority","Sprint"],"title":"Name","type":"string"},"project_number":{"description":"The project's number.","examples":[1,22],"minimum":1,"title":"Project Number","type":"integer"},"single_select_options":{"description":"Options for single select fields. Required when data_type is 'single_select'.","items":{"description":"Option for single select field.","properties":{"color":{"description":"The color for the option (e.g., 'red', 'blue', 'green').","examples":["red","blue","green"],"title":"Color","type":"string"},"description":{"description":"A description for the option.","examples":["Tasks that are not started yet"],"title":"Description","type":"string"},"name":{"description":"The name of the option.","examples":["To Do","In Progress","Done"],"title":"Name","type":"string"}},"required":["name"],"title":"SingleSelectOption","type":"object"},"title":"Single Select Options","type":"array"},"username":{"description":"The handle for the GitHub user account.","examples":["octocat","composio-dev"],"title":"Username","type":"string"}},"required":["username","project_number","name","data_type"],"title":"AddFieldToUserProjectRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to add an issue or pull request to a user-owned GitHub project. Use when you need to add existing repository items to a project board.","name":"GITHUB_ADD_ITEM_TO_USER_PROJECT","parameters":{"properties":{"id":{"description":"The unique identifier of the issue or pull request to add to the project. Required if owner, repo, and number are not provided.","title":"Id","type":"integer"},"number":{"description":"The issue or pull request number. Required with owner and repo if id is not provided.","title":"Number","type":"integer"},"owner":{"description":"The repository owner login. Required with repo and number if id is not provided.","title":"Owner","type":"string"},"project_number":{"description":"The project's number.","examples":[1,22],"title":"Project Number","type":"integer"},"repo":{"description":"The repository name. Required with owner and number if id is not provided.","title":"Repo","type":"string"},"type":{"description":"The type of item to add to the project. Must be either Issue or PullRequest.","enum":["Issue","PullRequest"],"title":"Type","type":"string"},"username":{"description":"The handle for the GitHub user account.","examples":["octocat"],"title":"Username","type":"string"}},"required":["username","project_number","type"],"title":"AddItemToUserProjectRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds labels (provided in the request body) to a repository issue; labels that do not already exist are created.","name":"GITHUB_ADD_LABELS_TO_AN_ISSUE","parameters":{"description":"Specifies the repository issue to which labels will be added.","properties":{"issue_number":{"description":"Positive integer that uniquely identifies the issue within the repository. Must be >= 1.","examples":[42,101],"minimum":1,"title":"Issue Number","type":"integer"},"labels":{"description":"Array of label names to add to the issue. Labels that don't exist will be created automatically.","examples":[["bug","enhancement"],["documentation","help wanted"]],"items":{"type":"string"},"title":"Labels","type":"array"},"owner":{"description":"Username or organization name owning the repository (case-insensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"Repository name, without the `.git` extension (case-insensitive).","examples":["Spoon-Knife","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo","issue_number","labels"],"title":"AddLabelsToAnIssueRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds new custom labels to an existing self-hosted runner for an organization; existing labels are not removed, and duplicates are not added.","name":"GITHUB_ADD_ORG_RUNNER_LABELS","parameters":{"description":"Request schema for adding custom labels to a self-hosted runner for an organization.","properties":{"labels":{"description":"A list of custom label names to add to the self-hosted runner. Previously applied labels are not removed.","examples":[["new-label","gpu-runner"]],"items":{"type":"string"},"title":"Labels","type":"array"},"org":{"description":"The organization's name (case-insensitive).","examples":["my-org-name"],"title":"Org","type":"string"},"runner_id":{"description":"Unique identifier of the self-hosted runner.","examples":[12345],"title":"Runner Id","type":"integer"}},"required":["org","runner_id","labels"],"title":"AddOrgRunnerLabelsRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a GitHub user to a team or updates their role (member or maintainer), inviting them to the organization if not already a member; idempotent, returning current details if no change is made.","name":"GITHUB_ADD_OR_UPDATE_TEAM_MEMBERSHIP_FOR_USER","parameters":{"description":"Request schema for `AddOrUpdateTeamMembershipForUser`","properties":{"org":{"description":"The name of the GitHub organization. This name is not case-sensitive.","examples":["github-org","octo-corp"],"title":"Org","type":"string"},"role":{"default":"member","description":"The role to assign to the user within the team. A 'maintainer' has broader permissions than a 'member', such as managing team members and settings.","enum":["member","maintainer"],"examples":["member","maintainer"],"title":"Role","type":"string"},"team_slug":{"description":"The slug (URL-friendly version) of the team's name. Must be lowercase with hyphens instead of spaces (e.g., 'my-team' not 'My Team'). Spaces will be automatically converted to hyphens and text will be lowercased.","examples":["justice-league","developers","product-team"],"title":"Team Slug","type":"string"},"username":{"description":"The GitHub username of the user to add or whose membership to update.","examples":["octocat","mona-lisa-fixed"],"title":"Username","type":"string"}},"required":["org","team_slug","username"],"title":"AddOrUpdateTeamMembershipForUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a classic project to a team or updates the team's permission on it. This endpoint grants or updates permissions for a team on a specific classic project (not Projects V2). The authenticated user must have admin permissions for the project. Both the team and project must belong to the same organization. Requirements: - The project must be a classic project (not GitHub Projects V2) - The authenticated user must have admin permissions on the project - The team and project must be in the same organization - Requires 'admin:org' scope for the authentication token Returns HTTP 204 No Content on success, 403 if project is not an org project, or 404 if the organization, team, or project is not found.","name":"GITHUB_ADD_OR_UPDATE_TEAM_PROJECT_PERMISSIONS","parameters":{"description":"Grants or updates a team's permissions for a specific classic project (not Projects V2).\n\nNote: This endpoint works with GitHub's classic Projects feature. The project\nmust be a classic project (not Projects V2), and both the team and project must\nbelong to the same organization. The authenticated user needs admin permissions\non the project.","properties":{"org":{"description":"The organization name (login) that owns both the team and the classic project. Case-insensitive.","examples":["octo-org","my-company"],"title":"Org","type":"string"},"permission":{"description":"Permission level to grant the team: 'read' (view only), 'write' (view and edit), or 'admin' (full control including settings). If omitted, uses the team's default permission.","enum":["read","write","admin"],"examples":["read","write","admin"],"title":"PermissionEnm","type":"string"},"project_id":{"description":"The unique numeric ID of the classic project. This is NOT the project number displayed in the UI.","examples":[1002604,12345678],"title":"Project Id","type":"integer"},"team_slug":{"description":"The team's URL-friendly slug identifier within the organization. Found in the team's URL path.","examples":["justice-league","engineering","frontend-team"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","project_id"],"title":"AddOrUpdateTeamProjectPermissionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Sets or updates a team's permission level for a repository within an organization; the team must be a member of the organization.","name":"GITHUB_ADD_OR_UPDATE_TEAM_REPOSITORY_PERMISSIONS","parameters":{"description":"Request schema for `AddOrUpdateTeamRepositoryPermissions`","properties":{"org":{"description":"Organization name where the team exists (case-insensitive). This is the organization that owns the team, not necessarily the repository owner.","examples":["octo-org","github"],"title":"Org","type":"string"},"owner":{"description":"Account owner of the repository (case-insensitive). This is the user or organization that owns the repository. In most cases, this should match the 'org' parameter value.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"permission":{"anyOf":[{"enum":["pull","triage","push","maintain","admin"],"type":"string"},{"type":"string"}],"default":"push","description":"Permission level to grant the team. Valid values: 'pull' (read-only), 'triage' (manage issues/PRs), 'push' (read/write), 'maintain' (manage repo settings plus push), 'admin' (full control). Custom repository role names are also supported if defined by the organization.","examples":["admin","push","maintain","pull","triage"],"title":"Permission"},"repo":{"description":"Repository name, without the `.git` extension (case-insensitive).","examples":["hello-world","my-awesome-project"],"title":"Repo","type":"string"},"team_slug":{"description":"The team's slug (URL-friendly name).","examples":["justice-league","developers"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","owner","repo"],"title":"AddOrUpdateTeamRepositoryPermissionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a specified GitHub user as a collaborator to an existing organization project with a given permission level. Note: This endpoint is for organization projects (classic). You must be an organization owner or a project admin to add a collaborator. Classic projects are being deprecated in favor of the new Projects experience.","name":"GITHUB_ADD_PROJECT_COLLABORATOR","parameters":{"description":"Request to add a collaborator to an organization project.","properties":{"permission":{"default":"write","description":"Permission level for the collaborator on the project.","enum":["read","write","admin"],"examples":["read","write","admin"],"title":"Permission","type":"string"},"project_id":{"description":"The unique identifier of the organization project.","examples":["12345"],"title":"Project Id","type":"integer"},"username":{"description":"The GitHub username of the user to be added as a collaborator.","examples":["octocat"],"title":"Username","type":"string"}},"required":["project_id","username"],"title":"AddProjectCollaboratorRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a repository to a GitHub App installation, granting the app access; requires authenticated user to have admin rights for the repository and access to the installation.","name":"GITHUB_ADD_REPOSITORY_TO_APP_INSTALLATION","parameters":{"description":"Request to add a repository to a GitHub App installation for the authenticated user.","properties":{"installation_id":{"description":"The unique identifier of the GitHub App installation to which the repository will be added. This installation must be accessible to the authenticated user.","examples":["1234567","8765432"],"title":"Installation Id","type":"integer"},"repository_id":{"description":"The unique identifier of the repository to add to the installation. The authenticated user must have admin permissions for this repository.","examples":["9876543","2345678"],"title":"Repository Id","type":"integer"}},"required":["installation_id","repository_id"],"title":"AddRepositoryToAppInstallationRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a repository to an existing organization-level GitHub Actions secret that is configured for 'selected' repository access.","name":"GITHUB_ADD_REPO_TO_ORG_SECRET_WITH_SELECTED_ACCESS","parameters":{"description":"Request schema for adding a repository to an organization secret with 'selected' access type.","properties":{"org":{"description":"The name of the GitHub organization. This field is not case-sensitive.","examples":["MyOrganization","Octo-Org"],"title":"Org","type":"string"},"repository_id":{"description":"The unique identifier of the repository to be granted access to the organization secret.","examples":[123456789,987654321],"title":"Repository Id","type":"integer"},"secret_name":{"description":"The name of the organization secret to which the repository will be added.","examples":["MY_API_KEY","DATABASE_PASSWORD"],"title":"Secret Name","type":"string"}},"required":["org","secret_name","repository_id"],"title":"AddRepoToOrgSecretWithSelectedAccessRequest","type":"object"}},"type":"function"},{"function":{"description":"Grants an existing repository access to an existing organization-level Dependabot secret when the secret's visibility is set to 'selected'; the repository must belong to the organization, and the call succeeds without change if access already exists.","name":"GITHUB_ADD_REPO_TO_ORG_SECRET_WITH_SELECTED_VISIBILITY","parameters":{"description":"Request schema for assigning a repository to an organization's Dependabot secret.","properties":{"org":{"description":"The organization's unique handle/name (case-insensitive).","examples":["octo-org"],"title":"Org","type":"string"},"repository_id":{"description":"Unique ID of the repository to be granted access to the secret.","examples":[1296269],"title":"Repository Id","type":"integer"},"secret_name":{"description":"Name of the Dependabot secret; must be alphanumeric or underscore, no spaces (lowercase auto-converts to uppercase).","examples":["MY_SECRET_TOKEN","ARTIFACTORY_PASSWORD"],"title":"Secret Name","type":"string"}},"required":["org","secret_name","repository_id"],"title":"AddRepoToOrgSecretWithSelectedVisibilityRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds and appends custom labels to a self-hosted repository runner, which must be registered and active.","name":"GITHUB_ADD_RUNNER_LABELS","parameters":{"description":"Request schema for `AddCustomLabelsToASelfHostedRunnerForARepository`","properties":{"labels":{"description":"Custom label names to add. Appended to existing labels. Names are case-insensitive. Empty list means no changes.","examples":["prod","linux-x64","gpu-enabled"],"items":{"type":"string"},"title":"Labels","type":"array"},"owner":{"description":"Username or organization name of the repository owner. Case-insensitive.","examples":["octocat","MyOrganization"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension. Case-insensitive.","examples":["hello-world","my-awesome-project"],"title":"Repo","type":"string"},"runner_id":{"description":"Unique ID of the self-hosted runner.","examples":[123,456],"title":"Runner Id","type":"integer"}},"required":["owner","repo","runner_id","labels"],"title":"AddRunnerLabelsRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a repository to an organization secret's access list when the secret's visibility is 'selected'; this operation is idempotent.","name":"GITHUB_ADD_SELECTED_REPOSITORY_TO_ORGANIZATION_SECRET","parameters":{"description":"Request schema for `AddSelectedRepositoryToOrganizationSecret`","properties":{"org":{"description":"The name of the organization. This name is not case sensitive.","examples":["octo-org"],"title":"Org","type":"string"},"repository_id":{"description":"The unique identifier of the repository to add to the secret's access list.","examples":[1296269],"title":"Repository Id","type":"integer"},"secret_name":{"description":"The name of the secret. Secret names can only contain alphanumeric characters ([A-Z], [a-z], [0-9]) or underscores (_). Spaces are not allowed. Secret names cannot start with GITHUB_ and must be less than 255 characters.","examples":["MY_API_KEY"],"title":"Secret Name","type":"string"}},"required":["org","secret_name","repository_id"],"title":"AddSelectedRepositoryToOrganizationSecretRequest","type":"object"}},"type":"function"},{"function":{"description":"Grants a repository access to an organization-level GitHub Actions variable, if that variable's visibility is set to 'selected_repositories'.","name":"GITHUB_ADD_SELECTED_REPOSITORY_TO_ORGANIZATION_VARIABLE","parameters":{"description":"Input for adding a selected repository to an organization variable's access list.","properties":{"name":{"description":"Name of the existing organization-level GitHub Actions variable.","examples":["CI_DEPLOY_KEY","SHARED_SECRET_VALUE"],"title":"Name","type":"string"},"org":{"description":"Name of the GitHub organization (case-insensitive).","examples":["octo-org","my-company"],"title":"Org","type":"string"},"repository_id":{"description":"Unique identifier of the repository to grant access.","examples":["1296269","543210"],"title":"Repository Id","type":"integer"}},"required":["org","name","repository_id"],"title":"AddSelectedRepositoryToOrganizationVariableRequest","type":"object"}},"type":"function"},{"function":{"description":"Grants a specified repository access to an authenticated user's existing Codespaces secret, enabling Codespaces created for that repository to use the secret.","name":"GITHUB_ADD_SELECTED_REPOSITORY_TO_USER_SECRET","parameters":{"description":"Request schema for `AddSelectedRepositoryToUserSecret`","properties":{"repository_id":{"description":"The unique identifier of the repository to be granted access to the specified user-level Codespaces secret.","examples":[1296269,490940582],"title":"Repository Id","type":"integer"},"secret_name":{"description":"Name of the user-level Codespaces secret to which repository access is added; this secret must already exist for the authenticated user.","examples":["GH_TOKEN_MY_USER","PERSONAL_API_KEY"],"title":"Secret Name","type":"string"}},"required":["secret_name","repository_id"],"title":"AddSelectedRepositoryToUserSecretRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds one or more social media links (which must be valid, full URLs for platforms supported by GitHub) to the authenticated user's public GitHub profile.","name":"GITHUB_ADD_SOCIAL_ACCOUNTS_FOR_AUTHENTICATED_USER","parameters":{"description":"Specifies the social media accounts to add for the authenticated user.","properties":{"account_urls":{"description":"Full URLs for social media profiles to add to the user's GitHub profile; these will be displayed publicly.","examples":["https://twitter.com/github","https://www.linkedin.com/in/github/","https://mastodon.social/@github"],"items":{"type":"string"},"title":"Account Urls","type":"array"}},"required":["account_urls"],"title":"AddSocialAccountsForAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds status check contexts to a protected branch's required status checks. This action appends new status check contexts to the existing list of required status checks for a protected branch. The branch must already have branch protection enabled with status checks configured. Note: The 'contexts' parameter is deprecated by GitHub in favor of 'checks' array. For new implementations, consider using update_status_check_protection with the 'checks' parameter instead.","name":"GITHUB_ADD_STATUS_CHECK_CONTEXTS","parameters":{"description":"Request model for adding status check contexts to a protected branch.","properties":{"branch":{"description":"The name of the branch to which status check contexts will be added. Branch names cannot contain wildcard characters. To use wildcard characters in branch names, refer to the GraphQL API.","examples":["main","develop"],"title":"Branch","type":"string"},"contexts":{"description":"The status check contexts to add to the protected branch. These are the names of CI/CD jobs or other checks that must pass before merging. Can be provided as a single string or a list of strings. Examples: 'ci/test', 'linter', 'continuous-integration/travis-ci'.","examples":[["ci/test","linter"],["continuous-integration/travis-ci"]],"items":{"type":"string"},"title":"Contexts","type":"array"},"owner":{"description":"The account owner of the repository. This name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","branch","contexts"],"title":"AddStatusCheckContextsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to add a sub-issue to a parent GitHub issue using GraphQL. Use when you need to establish a parent-child relationship between issues. Requires the 'sub_issues' GraphQL feature to be enabled.","name":"GITHUB_ADD_SUB_ISSUE","parameters":{"description":"Request schema for adding a sub-issue to a parent issue","properties":{"client_mutation_id":{"description":"A unique identifier for the client performing the mutation. Used to ensure idempotency of mutations.","examples":["mutation-12345","add-sub-issue-abc"],"title":"Client Mutation Id","type":"string"},"issue_id":{"description":"The global node ID of the parent issue (e.g., 'I_kwDOABCDEFGH'). This is the GraphQL global identifier returned by GitHub's API.","examples":["I_kwDOABCDEFGH","I_kwDOA1B2C3D4"],"title":"Issue Id","type":"string"},"replace_parent":{"description":"If true, replaces the existing parent issue if the sub-issue already has one. If false or omitted, the mutation will fail if the sub-issue already has a parent.","title":"Replace Parent","type":"boolean"},"sub_issue_id":{"description":"The global node ID of the sub-issue to link to the parent issue. Either sub_issue_id or sub_issue_url must be provided.","examples":["I_kwDOIJKLMNOP","I_kwDOE5F6G7H8"],"title":"Sub Issue Id","type":"string"},"sub_issue_url":{"description":"The URL of the sub-issue to link to the parent issue. Either sub_issue_id or sub_issue_url must be provided.","examples":["https://github.com/owner/repo/issues/123"],"title":"Sub Issue Url","type":"string"}},"required":["issue_id"],"title":"AddSubIssueRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds teams to the list of teams with push access to a protected branch. This action grants additional teams push access to a protected branch. Unlike 'Set team access restrictions' (PUT), this action adds to the existing list rather than replacing it entirely. Prerequisites: - The repository must be owned by an organization (not a personal account) - The branch must have protection rules enabled - The branch protection must have restrictions configured - The teams must exist in the organization and have repository access","name":"GITHUB_ADD_TEAM_ACCESS_RESTRICTIONS","parameters":{"description":"Request schema for adding teams to a protected branch's access restrictions.\n\nNote: This action only works for organization-owned repositories. Team access\nrestrictions are not available for personal repositories.","properties":{"branch":{"description":"The name of the protected branch to add team restrictions to. The branch must already have branch protection enabled with restrictions configured. Wildcard characters are not supported. For wildcard branch protection, use the GitHub GraphQL API.","examples":["main","develop","release"],"title":"Branch","type":"string"},"owner":{"description":"The organization name that owns the repository. Team access restrictions only work for organization-owned repositories, not personal repositories. This value is not case-sensitive.","examples":["my-org","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This value is not case-sensitive.","examples":["my-project","Hello-World"],"title":"Repo","type":"string"},"teams":{"description":"The list of team slugs to add push access to the protected branch. A team slug is the URL-friendly version of the team name (lowercase, hyphens instead of spaces). The teams must already have access to the repository. This adds teams to the existing list (does not replace the entire list).","examples":[["developers"],["maintainers","release-team"],["core-team"]],"items":{"type":"string"},"title":"Teams","type":"array"}},"required":["owner","repo","branch","teams"],"title":"AddTeamAccessRestrictionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds users to the list of people allowed to push to a protected branch in an organization repository. Important notes: - This action only works on organization-owned repositories (not personal repos) - The branch must already have protection rules with restrictions enabled - Users must have write access to the repository to be added - The combined total of users, apps, and teams is limited to 100 items","name":"GITHUB_ADD_USER_ACCESS_RESTRICTIONS","parameters":{"description":"Request schema for adding user access restrictions to a protected branch.\nThis action is only available for organization-owned repositories.","properties":{"branch":{"description":"The name of the branch. Cannot contain wildcard characters. To use wildcard characters in branch names, refer to the GitHub GraphQL API documentation.","examples":["main","develop"],"title":"Branch","type":"string"},"owner":{"description":"The account owner of the repository (must be an organization for user restrictions). This name is not case-sensitive.","examples":["octocat-org","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Spoon-Knife","my-project"],"title":"Repo","type":"string"},"users":{"description":"The list of user logins to grant push access to the protected branch. Users must have write access to the repository. An empty list will remove all user restrictions.","examples":[["octocat","hubot"],["developer1"]],"items":{"type":"string"},"title":"Users","type":"array"}},"required":["owner","repo","branch","users"],"title":"AddUserAccessRestrictionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds organization members to the list of users granted Codespaces access billed to the organization. IMPORTANT: This endpoint requires the organization's Codespaces billing access to be set to 'selected_members' mode. If not already configured, use the GITHUB_MANAGE_ACCESS_CONTROL_FOR_ORGANIZATION_CODESPACES action first to set visibility to 'selected_members'.","name":"GITHUB_ADD_USERS_TO_CODESPACES_ACCESS_FOR_ORGANIZATION","parameters":{"description":"Request schema for `AddUsersToCodespacesAccessForOrganization`","properties":{"org":{"description":"Organization's name (case-insensitive).","examples":["github","my-organization"],"title":"Org","type":"string"},"selected_usernames":{"description":"Usernames of organization members to be granted Codespaces access billed to the organization. These users must be members of the specified organization.","examples":[["octocat","hubot"],["another-user","dev-user"]],"items":{"type":"string"},"title":"Selected Usernames","type":"array"}},"required":["org","selected_usernames"],"title":"AddUsersToCodespacesAccessForOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a map of all top-level GitHub REST API resource URLs and their templates.","name":"GITHUB_API_ROOT","parameters":{"description":"Request schema for retrieving the root endpoint details of the GitHub REST API.","properties":{},"title":"GithubApiRootRequest","type":"object"}},"type":"function"},{"function":{"description":"Approves a workflow run from a forked repository's pull request; call this when such a run requires manual approval due to workflow configuration.","name":"GITHUB_APPROVE_WORKFLOW_RUN_FOR_FORK_PULL_REQUEST","parameters":{"description":"Request schema for `ApproveWorkflowRunForForkPullRequest`","properties":{"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive. ","examples":["Hello-World"],"title":"Repo","type":"string"},"run_id":{"description":"The unique identifier of the workflow run requiring approval.","examples":[12345],"title":"Run Id","type":"integer"}},"required":["owner","repo","run_id"],"title":"ApproveWorkflowRunForForkPullRequestRequest","type":"object"}},"type":"function"},{"function":{"description":"Assigns an existing organization-level role (identified by `role_id`) to a team (identified by `team_slug`) within a GitHub organization (`org`), provided the organization, team, and role already exist.","name":"GITHUB_ASSIGN_ORGANIZATION_ROLE_TO_TEAM","parameters":{"description":"Request schema for `AssignOrganizationRoleToTeam`","properties":{"org":{"description":"The name of the GitHub organization. This field is case-insensitive.","examples":["octo-org"],"title":"Org","type":"string"},"role_id":{"description":"Unique identifier of the organization role to assign to the team (obtainable by listing organization roles).","examples":[123,456],"title":"Role Id","type":"integer"},"team_slug":{"description":"The slug (URL-friendly version) of the team's name.","examples":["justice-league"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","role_id"],"title":"AssignOrganizationRoleToTeamRequest","type":"object"}},"type":"function"},{"function":{"description":"Assigns a specific organization role to a user who is a member or an outside collaborator in a GitHub organization, using a valid role ID.","name":"GITHUB_ASSIGN_ORGANIZATION_ROLE_TO_USER","parameters":{"description":"Request schema for `AssignOrganizationRoleToUser`","properties":{"org":{"description":"The organization's name. This is not case-sensitive.","examples":["github","acme-corp"],"title":"Org","type":"string"},"role_id":{"description":"The unique integer identifier for the organization role. This ID can be obtained by listing the organization's roles.","examples":[1,42,101],"title":"Role Id","type":"integer"},"username":{"description":"The GitHub username of the user to whom the role will be assigned.","examples":["octocat","githubuser123"],"title":"Username","type":"string"}},"required":["org","username","role_id"],"title":"AssignOrganizationRoleToUserRequest","type":"object"}},"type":"function"},{"function":{"description":"List Docker packages with migration conflicts for the authenticated user. This endpoint lists all Docker packages owned by the authenticated user that encountered namespace conflicts during the Docker-to-GitHub Container Registry (GHCR) migration. Conflicts occur when a package with the same name exists in both the legacy Docker registry and GHCR. IMPORTANT: The Docker registry for GitHub Packages was deprecated on Feb 24, 2025. This endpoint may return a 400 error with message 'Package migration for docker is no longer supported' as the migration period has ended. In this case, the action returns an informative response instead of failing. Use case: Identifying packages that require manual migration to GHCR. Required scope: read:packages (for OAuth and personal access tokens).","name":"GITHUB_AUTH_USER_DOCKER_CONFLICT_PACKAGES_LIST","parameters":{"description":"Request model for listing Docker migration conflicting packages.\n\nNo parameters are required for this endpoint.","properties":{},"title":"AuthUserDockerConflictPackagesListRequest","type":"object"}},"type":"function"},{"function":{"description":"Blocks an existing individual GitHub user (not an organization or your own account), preventing them from interacting with your account and repositories.","name":"GITHUB_BLOCK_USER","parameters":{"description":"Identifies the GitHub user to block by their username.","properties":{"username":{"description":"The GitHub username (handle) of the user to block. Case-insensitive.","examples":["octocat","torvalds"],"title":"Username","type":"string"}},"required":["username"],"title":"BlockUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Blocks a GitHub user from an organization, preventing their contributions, collaboration, and forking of the organization's repositories. Requires admin or 'Blocking users' organization permission (write access).","name":"GITHUB_BLOCK_USER_FROM_ORGANIZATION","parameters":{"description":"Input data for blocking a user from an organization.","properties":{"org":{"description":"The organization name (case-insensitive). You must have admin or 'Blocking users' permission in this organization.","examples":["github","octo-org"],"title":"Org","type":"string"},"username":{"description":"The GitHub username (handle) of the account to block from the organization.","examples":["octocat","someuser"],"title":"Username","type":"string"}},"required":["org","username"],"title":"BlockUserFromOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Cancels an existing, ongoing or queued GitHub Pages deployment for a repository using its `pages_deployment_id`.","name":"GITHUB_CANCEL_GITHUB_PAGES_DEPLOYMENT","parameters":{"description":"Request schema for `CancelGithubPagesDeployment`","properties":{"owner":{"description":"Username or organization that owns the repository. Not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"pages_deployment_id":{"description":"Unique numerical ID of the GitHub Pages deployment (not the commit SHA).","examples":[123456789],"title":"Pages Deployment Id","type":"integer"},"repo":{"description":"Repository name, excluding the `.git` extension. Not case-sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","pages_deployment_id"],"title":"CancelGithubPagesDeploymentRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to cancel an active GitHub sponsorship using GraphQL. Use when you need to terminate a sponsorship relationship between a sponsor and a sponsorable entity. Either sponsor ID/login and sponsorable ID/login must be provided.","name":"GITHUB_CANCEL_SPONSORSHIP","parameters":{"description":"Request schema for canceling an active GitHub sponsorship","properties":{"client_mutation_id":{"description":"A unique identifier for the client performing the mutation. Used to ensure idempotency of mutations.","examples":["cancel-sponsorship-12345","mutation-abc"],"title":"Client Mutation Id","type":"string"},"sponsor_id":{"description":"The global node ID of the user or organization acting as sponsor (e.g., 'U_kgDOABCDEF'). Required if sponsor_login is not provided.","examples":["U_kgDOABCDEF","O_kgDOGHIJKL"],"title":"Sponsor Id","type":"string"},"sponsor_login":{"description":"The username of the sponsoring user or organization. Required if sponsor_id is not provided.","examples":["github","octocat"],"title":"Sponsor Login","type":"string"},"sponsorable_id":{"description":"The global node ID of the user or organization receiving the sponsorship (e.g., 'U_kgDOMNOPQR'). Required if sponsorable_login is not provided.","examples":["U_kgDOMNOPQR","O_kgDOSTUVWX"],"title":"Sponsorable Id","type":"string"},"sponsorable_login":{"description":"The username of the sponsored user or organization. Required if sponsorable_id is not provided.","examples":["octocat","rails"],"title":"Sponsorable Login","type":"string"}},"title":"CancelSponsorshipRequest","type":"object"}},"type":"function"},{"function":{"description":"Cancels a workflow run in a GitHub repository if it is in a cancellable state (e.g., 'in_progress' or 'queued'). Returns 202 Accepted on success.","name":"GITHUB_CANCEL_WORKFLOW_RUN","parameters":{"description":"Request schema for `CancelWorkflowRun`","properties":{"owner":{"description":"The account owner of the repository (not case-sensitive).","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension (not case-sensitive).","examples":["Hello-World","linguist"],"title":"Repo","type":"string"},"run_id":{"description":"Unique identifier of the workflow run.","examples":[123456789],"title":"Run Id","type":"integer"}},"required":["owner","repo","run_id"],"title":"CancelWorkflowRunRequest","type":"object"}},"type":"function"},{"function":{"description":"Checks if a gist is starred by the authenticated user. Returns `is_starred: true` if the gist is starred (HTTP 204), or `is_starred: false` if not starred (HTTP 404). Use this to verify star status before starring/unstarring a gist.","name":"GITHUB_CHECK_IF_GIST_IS_STARRED","parameters":{"description":"Request schema for `CheckIfGistIsStarred`","properties":{"gist_id":{"description":"The unique identifier (ID) of the gist to check. Can be found in the URL of the gist (e.g., 'https://gist.github.com/{user}/{gist_id}').","examples":["6104628abc0786a41abb273430ac0590","aa5a315d61ae9438b18d"],"title":"Gist Id","type":"string"}},"required":["gist_id"],"title":"CheckIfGistIsStarredRequest","type":"object"}},"type":"function"},{"function":{"description":"Checks if a specified GitHub pull request has been merged, indicated by a 204 HTTP status (merged) or 404 (not merged/found).","name":"GITHUB_CHECK_IF_PULL_REQUEST_HAS_BEEN_MERGED","parameters":{"description":"Request schema for `CheckIfPullRequestHasBeenMerged`","properties":{"owner":{"description":"The account owner of the repository (not case sensitive).","examples":["octocat"],"title":"Owner","type":"string"},"pull_number":{"description":"The number that identifies the pull request.","examples":["1347"],"title":"Pull Number","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension (not case sensitive).","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","pull_number"],"title":"CheckIfPullRequestHasBeenMergedRequest","type":"object"}},"type":"function"},{"function":{"description":"Verifies if a GitHub user can be assigned to issues in a repository; assignability is confirmed by an HTTP 204 (No Content) response, resulting in an empty 'data' field in the response.","name":"GITHUB_CHECK_IF_USER_CAN_BE_ASSIGNED","parameters":{"description":"Request schema for checking if a user can be assigned to issues in a repository.","properties":{"assignee":{"description":"The GitHub username of the user to check for assignability. This name is not case sensitive.","examples":["hubot","monalisa"],"title":"Assignee","type":"string"},"owner":{"description":"The account owner of the repository (e.g., a GitHub username or organization name). This name is not case sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case sensitive.","examples":["Spoon-Knife","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo","assignee"],"title":"CheckIfUserCanBeAssignedRequest","type":"object"}},"type":"function"},{"function":{"description":"Checks if a specified GitHub user can be assigned to a given issue within a repository.","name":"GITHUB_CHECK_IF_USER_CAN_BE_ASSIGNED_TO_ISSUE","parameters":{"description":"Request schema for `CheckIfUserCanBeAssignedToIssue`","properties":{"assignee":{"description":"The GitHub username of the user to check for assignment permissions.","examples":["hubot"],"title":"Assignee","type":"string"},"issue_number":{"description":"The unique number identifying the issue within the repository.","examples":["1347"],"title":"Issue Number","type":"integer"},"owner":{"description":"The username of the account owning the repository. This field is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","issue_number","assignee"],"title":"CheckIfUserCanBeAssignedToIssueRequest","type":"object"}},"type":"function"},{"function":{"description":"Checks if a GitHub user `username` follows `target_user`; returns a 204 HTTP status if true, 404 if not or if users are invalid.","name":"GITHUB_CHECK_IF_USER_FOLLOWS_ANOTHER_USER","parameters":{"description":"Request schema for checking if one GitHub user follows another.","properties":{"target_user":{"description":"The GitHub username of the user to verify if they are followed by the `username`.","examples":["mercury-tools-bot","github"],"title":"Target User","type":"string"},"username":{"description":"The GitHub username of the user to check.","examples":["octocat","torvalds"],"title":"Username","type":"string"}},"required":["username","target_user"],"title":"CheckIfUserFollowsAnotherUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Checks if the specified GitHub user is blocked by the authenticated user; a 204 No Content response indicates the user is blocked, while a 404 Not Found indicates they are not.","name":"GITHUB_CHECK_IF_USER_IS_BLOCKED_BY_AUTHENTICATED_USER","parameters":{"description":"Request to check if a user is blocked by the authenticated user.","properties":{"username":{"description":"The GitHub username (handle) of the user.","examples":["octocat","torvalds"],"title":"Username","type":"string"}},"required":["username"],"title":"CheckIfUserIsBlockedByAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Checks if a GitHub user is blocked by an organization. Returns is_blocked=True if the user is blocked (HTTP 204), or is_blocked=False if not blocked (HTTP 404). Requires 'Blocking users' organization permission (read access).","name":"GITHUB_CHECK_IF_USER_IS_BLOCKED_BY_ORGANIZATION","parameters":{"description":"Request schema for `CheckIfUserIsBlockedByOrganization`","properties":{"org":{"description":"The organization name (case-insensitive). Must be an organization where you have 'Blocking users' permission (read access).","examples":["github","octo-org"],"title":"Org","type":"string"},"username":{"description":"The GitHub username (handle) to check if blocked by the organization.","examples":["octocat","mona-lisa"],"title":"Username","type":"string"}},"required":["org","username"],"title":"CheckIfUserIsBlockedByOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Checks if a user is a collaborator on a specified GitHub repository, returning a 204 status if they are, or a 404 status if they are not or if the repository/user does not exist.","name":"GITHUB_CHECK_IF_USER_IS_REPOSITORY_COLLABORATOR","parameters":{"description":"Request schema for `CheckIfUserIsRepositoryCollaborator`","properties":{"owner":{"description":"The account owner of the repository, typically a GitHub username or an organization name. This name is not case sensitive.","examples":["octocat","my-github-org"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case sensitive.","examples":["Spoon-Knife","my-project-repo"],"title":"Repo","type":"string"},"username":{"description":"The GitHub username of the user whose collaborator status is being checked. This name is not case sensitive.","examples":["gh-user123","another-dev"],"title":"Username","type":"string"}},"required":["owner","repo","username"],"title":"CheckIfUserIsRepositoryCollaboratorRequest","type":"object"}},"type":"function"},{"function":{"description":"Checks if the authenticated GitHub user follows a target GitHub user. Returns a structured response with is_following=True when following (HTTP 204), or is_following=False when not following (HTTP 404).","name":"GITHUB_CHECK_PERSON_FOLLOWED_BY_AUTH_USER","parameters":{"description":"Input model for the action that checks if the authenticated user follows another GitHub user.","properties":{"username":{"description":"The GitHub username (e.g., 'octocat') of the person to check. This is the user's handle on GitHub.","examples":["octocat","torvalds"],"title":"Username","type":"string"}},"required":["username"],"title":"CheckPersonFollowedByAuthUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Checks if private vulnerability reporting is enabled for the specified repository.","name":"GITHUB_CHECK_PRIVATE_VULNERABILITY_REPORTING_STATUS","parameters":{"description":"Request schema for `CheckPrivateVulnerabilityReportingStatus`","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world","linguist"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"CheckPrivateVulnerabilityReportingStatusRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to check if a user is a public member of an organization. Use when you need to verify public organization membership status.","name":"GITHUB_CHECK_PUBLIC_ORGANIZATION_MEMBERSHIP_FOR_USER","parameters":{"description":"Request schema for checking public organization membership for a user.","properties":{"org":{"description":"The organization name. The name is not case sensitive.","examples":["github","octo-org"],"title":"Org","type":"string"},"username":{"description":"The handle for the GitHub user account.","examples":["octocat","aashah"],"title":"Username","type":"string"}},"required":["org","username"],"title":"CheckPublicOrgMembershipRequest","type":"object"}},"type":"function"},{"function":{"description":"Checks if a team has 'read', 'write', or 'admin' permissions for an organization's specific classic project, returning the project's details if access is confirmed.","name":"GITHUB_CHECK_TEAM_PERMISSIONS_FOR_A_PROJECT","parameters":{"description":"Request schema for `CheckTeamPermissionsForAProject`","properties":{"org":{"description":"The name of the organization. This is case-insensitive.","examples":["octo-org"],"title":"Org","type":"string"},"project_id":{"description":"The unique identifier of the project (classic).","examples":[1002604],"title":"Project Id","type":"integer"},"team_slug":{"description":"The slug (short name) of the team.","examples":["justice-league"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","project_id"],"title":"CheckTeamPermissionsForAProjectRequest","type":"object"}},"type":"function"},{"function":{"description":"Checks a team's permissions for a specific repository within an organization, including permissions inherited from parent teams.","name":"GITHUB_CHECK_TEAM_PERMISSIONS_FOR_A_REPOSITORY","parameters":{"description":"Defines the request parameters for checking a team's permissions for a repository.","properties":{"org":{"description":"The name of the organization. This field is not case-sensitive.","examples":["octo-org"],"title":"Org","type":"string"},"owner":{"description":"The organization that owns the repository. For this GitHub API endpoint, this value must be the same as the `org` parameter. This field is not case-sensitive.","examples":["octo-org"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world","octo-repo"],"title":"Repo","type":"string"},"team_slug":{"description":"The URL-friendly slug for the team name. It is unique within the organization and typically all lowercase with hyphens instead of spaces.","examples":["justice-league","awesome-developers"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","owner","repo"],"title":"CheckTeamPermissionsForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Checks if a GitHub App or OAuth access_token is valid for the specified client_id and retrieves its details, typically to verify its active status and grants. NOTE: This endpoint requires Basic Authentication using the OAuth App's client_id as username and client_secret as password. The access_token parameter must be an OAuth token issued by the specified OAuth App.","name":"GITHUB_CHECK_TOKEN","parameters":{"description":"Request schema for validating a GitHub App or OAuth token.","properties":{"access_token":{"description":"The OAuth access token issued by your OAuth App that you want to validate. Returns 404 if the token is invalid or not issued by this client_id.","examples":["gho_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0"],"title":"Access Token","type":"string"},"client_id":{"description":"The unique client ID of your GitHub OAuth App (must match the app that issued the token being checked).","examples":["Iv1.1234567890abcdef"],"title":"Client Id","type":"string"}},"required":["client_id","access_token"],"title":"CheckTokenRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to clear the value of a field for an item in a GitHub Project V2. Use when you need to remove or reset a field value (text, number, date, assignees, labels, single-select, iteration, or milestone fields).","name":"GITHUB_CLEAR_PROJECT_V2_ITEM_FIELD_VALUE","parameters":{"description":"Request parameters for clearing a field value in a GitHub Project V2 item.\n\nprojectId: The ID of the Project.\nitemId: The ID of the item to update.\nfieldId: The ID of the field to clear.","properties":{"fieldId":{"description":"The global node ID of the field to clear (e.g., 'PVTSSF_lAHOCNqc1s4BN3oqzg8vTnA'). Currently supports text, number, date, assignees, labels, single-select, iteration and milestone fields.","examples":["PVTSSF_lAHOCNqc1s4BN3oqzg8vTnA"],"title":"Field Id","type":"string"},"itemId":{"description":"The global node ID of the project item to update (e.g., 'PVTI_lAHOCNqc1s4BN3oqzgldG_w'). This identifies the specific item within the project whose field value will be cleared.","examples":["PVTI_lAHOCNqc1s4BN3oqzgldG_w"],"title":"Item Id","type":"string"},"projectId":{"description":"The global node ID of the Project (e.g., 'PVT_kwHOCNqc1s4BN3oq'). This identifies the project containing the item.","examples":["PVT_kwHOCNqc1s4BN3oq"],"title":"Project Id","type":"string"}},"required":["projectId","itemId","fieldId"],"title":"ClearProjectV2ItemFieldValueRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes GitHub Actions caches from a repository matching a specific `key` and an optional Git `ref`, used to manage storage or clear outdated/corrupted caches; the action succeeds even if no matching caches are found to delete.","name":"GITHUB_CLEAR_REPOSITORY_CACHE_BY_KEY","parameters":{"description":"Request schema for the `ClearRepositoryCacheByKey` action, defining parameters to identify and delete GitHub Actions caches.","properties":{"key":{"description":"The exact cache key used to identify specific caches for deletion. This key is often dynamically generated in workflows using expressions (e.g., `${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}`).","examples":["Linux-npm-6a99d79959699e7aa7597179767626e089597a38","Windows-pip-cache-mybranch-py39","macOS-gems-custom-key-v1"],"title":"Key","type":"string"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"ref":{"description":"The full Git reference for narrowing down the cache deletion. For example, to target caches for a specific branch, use `refs/heads/`. To target caches for a pull request, use `refs/pull//merge`. If omitted, caches matching the key across all refs are considered.","examples":["refs/heads/main","refs/pull/123/merge","refs/tags/v1.0.0"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["hello-world","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo","key"],"title":"ClearRepositoryCacheByKeyRequest","type":"object"}},"type":"function"},{"function":{"description":"Removes all custom labels from a self-hosted runner for an organization; default labels (e.g., 'self-hosted', 'linux', 'x64') will remain.","name":"GITHUB_CLEAR_SELF_HOSTED_RUNNER_ORG_LABELS","parameters":{"description":"Request schema for `ClearSelfHostedRunnerOrgLabels`","properties":{"org":{"description":"The name of the GitHub organization that owns the self-hosted runner (case-insensitive).","examples":["octo-org","my-company"],"title":"Org","type":"string"},"runner_id":{"description":"Unique numeric identifier of the self-hosted runner. Can be obtained from listing runners for the organization.","examples":[123,456],"title":"Runner Id","type":"integer"}},"required":["org","runner_id"],"title":"ClearSelfHostedRunnerOrgLabelsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to atomically create, update, or delete multiple files in a GitHub repository as a single commit. Uses Git Data APIs to avoid SHA mismatch conflicts that occur with the Contents API when multiple files are modified in parallel. Use when you need to make multi-file changes reliably. BRANCH CREATION: When committing to a new branch (e.g., 'fix/my-fix' or 'feature/new-feature'), you MUST provide 'base_branch' (typically 'main' or 'master') to create the branch from. If the branch already exists, base_branch is not needed. This action handles race conditions automatically: if the branch is updated by another commit between fetching the HEAD and updating the reference (resulting in a 422 'not a fast forward' error), the action will retry by refetching the HEAD and rebasing changes. Use max_retries to control this behavior.","name":"GITHUB_COMMIT_MULTIPLE_FILES","parameters":{"properties":{"author":{"additionalProperties":false,"description":"Git author or committer information.","properties":{"date":{"description":"ISO 8601 timestamp for the commit (optional, defaults to current time)","examples":["2024-01-15T10:30:00Z"],"title":"Date","type":"string"},"email":{"description":"Email address of the author or committer","examples":["john@example.com","jane@example.com"],"title":"Email","type":"string"},"name":{"description":"Name of the author or committer","examples":["John Doe","Jane Smith"],"title":"Name","type":"string"}},"required":["name","email"],"title":"AuthorCommitter","type":"object"},"base_branch":{"description":"REQUIRED when committing to a new branch that doesn't exist yet. Specifies the existing branch to create the new branch from (e.g., 'main' or 'master'). Not needed if 'branch' already exists in the repository.","examples":["main","master","develop"],"title":"Base Branch","type":"string"},"branch":{"description":"Target branch name to commit to. If this branch doesn't exist, you MUST provide 'base_branch' to create it. For new feature branches (e.g., 'fix/my-fix', 'feature/new-feature'), always set base_branch='main' (or your default branch).","examples":["main","develop","feature/new-feature"],"title":"Branch","type":"string"},"committer":{"additionalProperties":false,"description":"Git author or committer information.","properties":{"date":{"description":"ISO 8601 timestamp for the commit (optional, defaults to current time)","examples":["2024-01-15T10:30:00Z"],"title":"Date","type":"string"},"email":{"description":"Email address of the author or committer","examples":["john@example.com","jane@example.com"],"title":"Email","type":"string"},"name":{"description":"Name of the author or committer","examples":["John Doe","Jane Smith"],"title":"Name","type":"string"}},"required":["name","email"],"title":"AuthorCommitter","type":"object"},"deletes":{"description":"List of file paths to delete from the repository. Files must exist in the repository; attempting to delete non-existent files will result in an error. Ensure paths are exact with no leading/trailing whitespace.","examples":[["old-file.txt","deprecated/module.py"]],"items":{"type":"string"},"title":"Deletes","type":"array"},"force":{"default":false,"description":"Force update the branch reference. WARNING: Use with caution as this can overwrite commits. Only use this when you intentionally want to overwrite the branch history.","title":"Force","type":"boolean"},"max_retries":{"default":3,"description":"Maximum number of retries when encountering race conditions (422 'not a fast forward' errors). The action will refetch the HEAD and rebase changes on each retry. Set to 0 to disable retries.","maximum":10,"minimum":0,"title":"Max Retries","type":"integer"},"message":{"description":"Commit message describing the changes","examples":["Add new features","Update documentation","Fix bugs in authentication"],"title":"Message","type":"string"},"owner":{"description":"Repository owner (username or organization name)","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"Repository name (without .git extension)","examples":["hello-world","my-project"],"title":"Repo","type":"string"},"upserts":{"description":"List of files to create or update. Each entry requires path, content, and optional encoding (utf-8 or base64)","examples":[[{"content":"# Hello","encoding":"utf-8","path":"README.md"}]],"items":{"description":"Represents a file to create or update.","properties":{"content":{"description":"File content as a string","examples":["print('Hello, World!')","# My Project\n\nWelcome!"],"title":"Content","type":"string"},"encoding":{"default":"utf-8","description":"Content encoding: 'utf-8' for text files or 'base64' for binary files","enum":["utf-8","base64"],"examples":["utf-8","base64"],"title":"Encoding","type":"string"},"path":{"description":"File path in the repository (e.g., 'src/main.py' or 'docs/readme.md')","examples":["src/main.py","README.md","docs/guide.md"],"title":"Path","type":"string"}},"required":["path","content"],"title":"FileUpsert","type":"object"},"title":"Upserts","type":"array"}},"required":["owner","repo","branch","message"],"title":"CommitMultipleFilesRequest","type":"object"}},"type":"function"},{"function":{"description":"Compares two commit points (commits, branches, tags, or SHAs) within a repository or across forks, using `BASE...HEAD` or `OWNER:REF...OWNER:REF` format for the `basehead` parameter.","name":"GITHUB_COMPARE_TWO_COMMITS","parameters":{"description":"Request schema for `CompareTwoCommits` action. Specifies the repository and the two commit points (base and head) to compare.","properties":{"basehead":{"description":"A string specifying the base and head references to compare, in the format `BASE...HEAD`. `BASE` and `HEAD` can be branch names (e.g., `main...develop`), tag names (e.g., `v1.0.0...v1.1.0`), or commit SHAs (abbreviated or full 40-character format). Both abbreviated and full SHAs are accepted; full 40-character SHAs are recommended for reliability in large repositories. Both references must exist in the specified repository. To compare branches across forks in the same network, use the format `OWNER:REF...OWNER:REF` (e.g., `octocat:main...another-user:main`). Do NOT pass GitHub URLs - only plain reference strings like 'main...develop' are accepted.","examples":["main...develop","v1.0.0...v1.1.0","0e9c6b6...5f8d3a0","553c2077f0edc3d5dc5d17262f6aa498e69d6f8e...7fd1a60b01f91b314f59955a4e4d4e80d8edf11d","octocat:main...my-fork-user:main"],"title":"Basehead","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of the results to fetch, for pagination when the number of differences (commits or files) is large.","examples":["1","2"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results (e.g., files or commits) to return per page, with a maximum of 100, for pagination.","examples":["30","100"],"title":"Per Page","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","my-project"],"title":"Repo","type":"string"}},"required":["owner","repo","basehead"],"title":"CompareTwoCommitsRequest","type":"object"}},"type":"function"},{"function":{"description":"Generates a JIT configuration for a GitHub organization's new self-hosted runner to run a single job then unregister; requires admin:org scope and the runner_group_id must exist in the organization.","name":"GITHUB_CONFIGURE_JIT_RUNNER_FOR_ORG","parameters":{"description":"Parameters to generate a just-in-time (JIT) runner configuration for a GitHub organization.","properties":{"labels":{"description":"Custom labels to assign to the new self-hosted runner, used by GitHub Actions to route jobs. **Minimum items**: 1. **Maximum items**: 100.","examples":[["linux","x64","gpu"],["windows-latest","my-custom-label"]],"items":{"type":"string"},"maxItems":100,"minItems":1,"title":"Labels","type":"array"},"name":{"description":"Desired name for the new self-hosted runner, visible in the GitHub UI.","examples":["my-jit-runner-linux","temp-builder-1"],"title":"Name","type":"string"},"org":{"description":"Name of the GitHub organization (case-insensitive).","examples":["my-organization","github"],"title":"Org","type":"string"},"runner_group_id":{"description":"ID of the runner group to assign the new self-hosted runner. Must exist in the organization. You can get runner group IDs by calling the 'List self-hosted runner groups for an organization' endpoint (GET /orgs/{org}/actions/runner-groups).","examples":[1,42],"title":"Runner Group Id","type":"integer"},"work_folder":{"default":"_work","description":"Path to the working directory on the runner machine where jobs will execute, relative to the runner's installation directory.","examples":["_work","custom_work_dir"],"title":"Work Folder","type":"string"}},"required":["org","name","runner_group_id","labels"],"title":"ConfigureJitRunnerForOrgRequest","type":"object"}},"type":"function"},{"function":{"description":"Sets or updates the OIDC subject claim customization template for an existing GitHub organization by specifying which claims (e.g., 'repo', 'actor') form the OIDC token's subject (`sub`). This action customizes which claim keys are included in the OIDC subject claim for the specified organization. It allows for fine-tuning the content of the subject claim based on organizational needs.","name":"GITHUB_CONFIGURE_OIDC_SUBJECT_CLAIM_TEMPLATE","parameters":{"description":"Request schema for `ConfigureOidcSubjectClaimTemplate`.","properties":{"include_claim_keys":{"description":"Array of unique strings, each a valid claim key (e.g., 'repo', 'actor'; alphanumeric/underscores only), to include in the OIDC subject claim (`sub`).","examples":[["repo","context","actor"],["workflow","ref","repository_owner"]],"items":{"type":"string"},"title":"Include Claim Keys","type":"array"},"org":{"description":"The GitHub organization name (case-insensitive).","examples":["my-github-org"],"title":"Org","type":"string"}},"required":["org","include_claim_keys"],"title":"ConfigureOidcSubjectClaimTemplateRequest","type":"object"}},"type":"function"},{"function":{"description":"Converts an existing organization member, who is not an owner, to an outside collaborator, restricting their access to explicitly granted repositories.","name":"GITHUB_CONVERT_ORG_MEMBER_TO_OUTSIDE_COLLABORATOR","parameters":{"description":"Request schema for `ConvertOrgMemberToOutsideCollaborator`","properties":{"async":{"default":false,"description":"If true, performs the conversion asynchronously (API returns a 202 status when the job is successfully queued).","title":"Async","type":"boolean"},"org":{"description":"The organization name (case-insensitive).","examples":["octo-org","my-company-gh"],"title":"Org","type":"string"},"username":{"description":"The GitHub username of the member to convert.","examples":["octocat","user-to-convert"],"title":"Username","type":"string"}},"required":["org","username"],"title":"ConvertOrgMemberToOutsideCollaboratorRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a Git blob in a repository, requiring content and encoding ('utf-8' or 'base64'). Requires write access to the repository.","name":"GITHUB_CREATE_A_BLOB","parameters":{"description":"Defines the request parameters for creating a new Git blob.","properties":{"content":{"description":"The content to be stored in the new blob.","examples":["This is the raw content of the file.","SGVsbG8gV29ybGQ=\\n"],"title":"Content","type":"string"},"encoding":{"default":"utf-8","description":"The encoding for the 'content'; \"utf-8\" or \"base64\".","examples":["utf-8","base64"],"title":"Encoding","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive. You must have write access to the repository.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the '.git' extension. This field is not case-sensitive. The repository must exist and you must have write access to it.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","content"],"title":"CreateABlobRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new check run for a specific commit in a repository, used by external services to report status, detailed feedback, annotations, and images directly within the GitHub UI. NOTE: This endpoint requires GitHub App authentication - OAuth tokens and personal access tokens cannot create check runs.","name":"GITHUB_CREATE_A_CHECK_RUN","parameters":{"description":"Request schema to create a new check run on GitHub.","properties":{"actions":{"description":"A list of up to three action objects defining interactive buttons displayed on GitHub after the check run completes. Each object needs a `label` (button text), `identifier` (unique ID for the action), and `description` (tooltip). Clicking a button sends a `check_run.requested_action` webhook to your app.","items":{"additionalProperties":false,"description":"Model for a check run action.","properties":{"description":{"description":"A short explanation of what this action would do (max 40 characters).","maxLength":40,"title":"Description","type":"string"},"identifier":{"description":"A reference for the action on the integrator's system (max 20 characters).","maxLength":20,"title":"Identifier","type":"string"},"label":{"description":"The text to be displayed on a button in the web UI (max 20 characters).","maxLength":20,"title":"Label","type":"string"}},"required":["label","identifier","description"],"title":"CheckRunAction","type":"object"},"title":"Actions","type":"array"},"completed_at":{"description":"The ISO 8601 timestamp (YYYY-MM-DDTHH:MM:SSZ) indicating when the check run finished. **Required if `status` is `completed`**.","examples":["2018-05-04T01:14:52Z"],"format":"date-time","title":"Completed At","type":"string"},"conclusion":{"description":"**Required if `completed_at` is provided or if `status` is `completed`**. Specifies the final outcome of the check (e.g., 'success', 'failure'). Note: Setting `conclusion` automatically sets `status` to `completed`. GitHub alone can set a conclusion to `stale`.","enum":["action_required","cancelled","failure","neutral","success","skipped","stale","timed_out"],"title":"ConclusionEnm","type":"string"},"details_url":{"description":"The URL of the integrator's site providing full details of the check. If omitted, the GitHub App's homepage is used. This URL is available from the check's UI.","examples":["https://example.com/build/status"],"title":"Details Url","type":"string"},"external_id":{"description":"A unique identifier for the check run on the integrator's system. This helps in correlating check runs between GitHub and the external system.","examples":["42"],"title":"External Id","type":"string"},"head_sha":{"description":"The SHA of the commit for which the check run is created.","examples":["009b8392b1d19195ab1750317ce01ed503788888"],"title":"Head Sha","type":"string"},"name":{"description":"The name of the check to be displayed in the GitHub UI. For example, \"Code Coverage\" or \"Linter\".","examples":["mighty_linter"],"title":"Name","type":"string"},"output__annotations":{"description":"A list of annotation objects detailing issues at specific code locations. Annotations are visible in the 'Checks' and 'Files changed' tabs of a pull request. Each annotation object should specify `path`, `start_line`, `end_line`, `annotation_level` ('notice', 'warning', or 'failure'), and `message`. Optional fields include `start_column`, `end_column`, `title`, and `raw_details`. Up to 50 annotations per API request; for more, use subsequent 'Update a check run' calls. GitHub Actions limits are 10 warnings and 10 errors per step.","items":{"additionalProperties":false,"description":"Model for a check run annotation.","properties":{"annotation_level":{"description":"The level of the annotation (notice, warning, or failure).","enum":["notice","warning","failure"],"title":"Annotation Level","type":"string"},"end_column":{"description":"The end column of the annotation. Annotations only support start_column and end_column on the same line.","title":"End Column","type":"integer"},"end_line":{"description":"The end line of the annotation.","title":"End Line","type":"integer"},"message":{"description":"A short description of the feedback for these lines of code.","title":"Message","type":"string"},"path":{"description":"The path of the file to add an annotation to.","title":"Path","type":"string"},"raw_details":{"description":"Details about this annotation.","title":"Raw Details","type":"string"},"start_column":{"description":"The start column of the annotation. Annotations only support start_column and end_column on the same line.","title":"Start Column","type":"integer"},"start_line":{"description":"The start line of the annotation.","title":"Start Line","type":"integer"},"title":{"description":"The title that represents the annotation.","title":"Title","type":"string"}},"required":["path","start_line","end_line","annotation_level","message"],"title":"CheckRunAnnotation","type":"object"},"title":"Output Annotations","type":"array"},"output__images":{"description":"A list of image objects to display in the check run's output in the GitHub UI. Each object requires `alt` (alternative text), `image_url` (URL of the image), and an optional `caption`.","items":{"additionalProperties":false,"description":"Model for a check run image.","properties":{"alt":{"description":"The alternative text for the image.","title":"Alt","type":"string"},"caption":{"description":"A short image description.","title":"Caption","type":"string"},"image_url":{"description":"The full URL of the image.","title":"Image Url","type":"string"}},"required":["alt","image_url"],"title":"CheckRunImage","type":"object"},"title":"Output Images","type":"array"},"output__summary":{"description":"A summary of the check run's findings. Supports Markdown. **Maximum length**: 65,535 characters.","examples":["Found 2 critical issues and 5 warnings."],"title":"Output Summary","type":"string"},"output__text":{"description":"Detailed textual information about the check run's output. Supports Markdown. **Maximum length**: 65,535 characters.","title":"Output Text","type":"string"},"output__title":{"description":"A descriptive title for the output of the check run, displayed in the GitHub UI. For example, 'Linter Scan Summary'.","examples":["Linter Scan Summary"],"title":"Output Title","type":"string"},"owner":{"description":"The account owner of the repository. This name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"},"started_at":{"description":"The ISO 8601 timestamp (YYYY-MM-DDTHH:MM:SSZ) indicating when the check run began.","examples":["2018-05-04T01:14:52Z"],"format":"date-time","title":"Started At","type":"string"},"status":{"default":"queued","description":"The current status of the check run. Only GitHub Actions can set `status` to `waiting`, `pending`, or `requested`.","enum":["queued","in_progress","completed","waiting","requested","pending"],"title":"Status","type":"string"}},"required":["owner","repo","name","head_sha"],"title":"CreateACheckRunRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new check suite for a specific commit (`head_sha`) in an original repository (not a fork). IMPORTANT: This endpoint requires a GitHub App installation access token - OAuth tokens and classic personal access tokens cannot use this endpoint. GitHub dispatches a `check_suite` webhook event with the `requested` action upon success.","name":"GITHUB_CREATE_A_CHECK_SUITE","parameters":{"description":"Request schema for `CreateACheckSuite`","properties":{"head_sha":{"description":"SHA of the commit for which to create the check suite, typically the head commit of a branch.","examples":["7638417db6d59f3c431d3e1f261cc637155684cd"],"title":"Head Sha","type":"string"},"owner":{"description":"Account owner of the repository (case-insensitive).","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"Repository name, without the `.git` extension (case-insensitive).","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","head_sha"],"title":"CreateACheckSuiteRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a GitHub Codespace for the authenticated user, requiring a JSON request body with either `repository_id` (integer) or a `pull_request` object (containing `pull_request_number` (integer) and `repository_id` (integer)). This action allows users to set up a development environment quickly by creating a codespace from a specified repository or pull request.","name":"GITHUB_CREATE_A_CODESPACE_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Request body for POST /user/codespaces.\n\nProvide either:\n- repository_id (int) + ref (string branch/commit/PR ref), or\n- pull_request object with pull_request_number (int) and repository_id (int).\n\nOther optional fields supported by the API (machine, location, devcontainer_path, etc.) can be added later if needed.","properties":{"pull_request":{"additionalProperties":false,"properties":{"pull_request_number":{"description":"Pull request number.","title":"Pull Request Number","type":"integer"},"repository_id":{"description":"Repository ID for the pull request.","title":"Repository Id","type":"integer"}},"required":["pull_request_number","repository_id"],"title":"PullRequestPayload","type":"object"},"ref":{"description":"Git ref (branch, tag, or commit SHA) to use for the codespace.","examples":["main","refs/heads/main","a1b2c3d"],"title":"Ref","type":"string"},"repository_id":{"description":"ID of the repository to create the codespace from.","title":"Repository Id","type":"integer"}},"title":"CreateACodespaceForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a GitHub Codespace for an open pull request in a Codespaces-enabled repository, with options to customize its configuration.","name":"GITHUB_CREATE_A_CODESPACE_FROM_A_PULL_REQUEST","parameters":{"description":"Request to create a GitHub Codespace from a pull request, specifying its configuration.","properties":{"client_ip":{"description":"Client's public IP address for location auto-detection if proxied and `geo` or `location` are not specified.","examples":["192.0.2.1"],"title":"Client Ip","type":"string"},"devcontainer_path":{"description":"Path to a `devcontainer.json` file in the repository that defines the development environment.","examples":[".devcontainer/devcontainer.json","devcontainer.json"],"title":"Devcontainer Path","type":"string"},"display_name":{"description":"Custom name for the codespace.","examples":["My Feature Branch Codespace"],"title":"Display Name","type":"string"},"geo":{"description":"Geographic area for this codespace (e.g., `UsEast`, `EuropeWest`); supersedes `location`. If unspecified, typically IP-derived.","enum":["EuropeWest","SoutheastAsia","UsEast","UsWest"],"examples":["UsEast","EuropeWest","SoutheastAsia"],"title":"GeoEnm","type":"string"},"idle_timeout_minutes":{"description":"Minutes of inactivity after which the codespace is automatically stopped. A default timeout applies if unspecified.","examples":[30,60],"title":"Idle Timeout Minutes","type":"integer"},"location":{"description":"Requested geographic location (e.g., `EastUs`, `WestEurope`). This parameter is deprecated; use `geo`. If unspecified, location may be IP-derived.","examples":["EastUs","WestEurope"],"title":"Location","type":"string"},"machine":{"description":"Machine type for this codespace (e.g., `standardLinux`). Varies by CPU, RAM, storage. Uses default if unspecified.","examples":["standardLinux","standardLinux8gb","standardLinux16gb","standardLinux32gb"],"title":"Machine","type":"string"},"multi_repo_permissions_opt_out":{"description":"Set to `true` to prevent GitHub from requesting additional repository permissions defined in `devcontainer.json`. Defaults to `false` (permissions will be requested).","title":"Multi Repo Permissions Opt Out","type":"boolean"},"owner":{"description":"The username of the account that owns the repository. This is case-insensitive.","examples":["octocat"],"title":"Owner","type":"string"},"pull_number":{"description":"The unique number identifying the pull request.","examples":[1347],"title":"Pull Number","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This is case-insensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"},"retention_period_minutes":{"description":"Retention period in minutes (0-43200, i.e., up to 30 days) for a stopped codespace. 0 means immediate deletion.","examples":[1440,43200],"title":"Retention Period Minutes","type":"integer"},"working_directory":{"description":"Working directory for the codespace upon opening. Defaults to the repository root if unspecified.","examples":["/workspaces/my-project/src"],"title":"Working Directory","type":"string"}},"required":["owner","repo","pull_number"],"title":"CreateACodespaceFromAPullRequestRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a GitHub Codespace for the authenticated user in a specified repository, which must be accessible and use a valid `devcontainer.json` if `devcontainer_path` is specified.","name":"GITHUB_CREATE_A_CODESPACE_IN_A_REPOSITORY","parameters":{"description":"Request schema for `CreateACodespaceInARepository`","properties":{"client_ip":{"description":"IP address to infer preferred region if `location` and `geo` are unspecified; useful for proxied requests.","examples":["192.168.1.100"],"title":"Client Ip","type":"string"},"devcontainer_path":{"description":"Path to a `devcontainer.json` in the repository; uses `.devcontainer/devcontainer.json` or `devcontainer.json` at root if not specified.","examples":[".devcontainer/my-custom-devcontainer.json"],"title":"Devcontainer Path","type":"string"},"display_name":{"description":"Custom display name for the codespace; a default name is generated if not provided.","examples":["My Development Codespace"],"title":"Display Name","type":"string"},"geo":{"description":"Geographic area for the codespace, replacing `location`; determined by user IP if not specified.","enum":["EuropeWest","SoutheastAsia","UsEast","UsWest"],"examples":["EuropeWest","SoutheastAsia","UsEast","UsWest"],"title":"GeoEnm","type":"string"},"idle_timeout_minutes":{"description":"Minutes of inactivity before codespace auto-stops; uses a default timeout if not specified.","examples":[30,60],"title":"Idle Timeout Minutes","type":"integer"},"location":{"description":"Requested AWS region (best-effort, may differ); determined by user IP if not provided. Deprecated: use `geo`.","examples":["EastUs","WestUs","WestEurope","SoutheastAsia"],"title":"Location","type":"string"},"machine":{"description":"Machine type (CPU, RAM, storage). See 'List available machine types for a repository' action for options; uses a default type if not specified.","examples":["standardLinux","premiumLinux"],"title":"Machine","type":"string"},"multi_repo_permissions_opt_out":{"description":"If `true`, opts out of granting multi-repository permissions from `devcontainer.json`. If unspecified or `false`, permissions are granted if requested.","examples":[true,false],"title":"Multi Repo Permissions Opt Out","type":"boolean"},"owner":{"description":"Username or organization name owning the repository; not case-sensitive.","examples":["octocat","Microsoft"],"title":"Owner","type":"string"},"ref":{"description":"Git reference (e.g., branch name) for the codespace; uses repository's default branch if not provided.","examples":["main","feature-branch-name"],"title":"Ref","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension; not case-sensitive.","examples":["Spoon-Knife","vscode"],"title":"Repo","type":"string"},"retention_period_minutes":{"description":"Minutes an idle (stopped) codespace is retained before auto-deletion (0-43200, i.e., up to 30 days); uses a default period if not specified.","examples":[1440,43200],"title":"Retention Period Minutes","type":"integer"},"working_directory":{"description":"Directory to use as default when codespace opens; uses repository root if not specified.","examples":["/projects/my-app"],"title":"Working Directory","type":"string"}},"required":["owner","repo"],"title":"CreateACodespaceInARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new commit in a GitHub repository; the `tree` SHA and any `parents` SHAs must already exist in the repository.","name":"GITHUB_CREATE_A_COMMIT","parameters":{"description":"Defines the parameters to create a new commit in a GitHub repository.","properties":{"author__date":{"description":"Timestamp (ISO 8601: `YYYY-MM-DDTHH:MM:SSZ`) when the commit was authored.","examples":["2024-01-15T10:30:00Z"],"format":"date-time","title":"Author Date","type":"string"},"author__email":{"description":"Email of the commit's author. Defaults to authenticated user if not provided.","examples":["mona@example.com"],"title":"Author Email","type":"string"},"author__name":{"description":"Name of the commit's author. Defaults to authenticated user if not provided.","examples":["Mona Lisa Octocat"],"title":"Author Name","type":"string"},"committer__date":{"description":"Timestamp (ISO 8601: `YYYY-MM-DDTHH:MM:SSZ`) when the commit was committed. Defaults to `author_date` or current time.","examples":["2024-01-15T10:35:00Z"],"format":"date-time","title":"Committer Date","type":"string"},"committer__email":{"description":"Email of the committer. Defaults to author's email or authenticated user if not provided.","examples":["octocat@example.com"],"title":"Committer Email","type":"string"},"committer__name":{"description":"Name of the committer. Defaults to author's name or authenticated user if not provided.","examples":["The Octocat"],"title":"Committer Name","type":"string"},"message":{"description":"The commit message.","examples":["feat: implement user authentication endpoint"],"title":"Message","type":"string"},"owner":{"description":"Account owner of the repository (case-insensitive).","examples":["octocat"],"title":"Owner","type":"string"},"parents":{"description":"SHAs of parent commits; all must exist in the repository. Omit or provide an empty list for a root commit.","examples":["[\"1a2b3c4d5e6f7g8h9i0jabcdef1234567890\"]","[\"parent_sha_main\", \"parent_sha_feature_branch\"]"],"items":{"type":"string"},"title":"Parents","type":"array"},"repo":{"description":"Name of the repository, without the `.git` extension (case-insensitive).","examples":["Spoon-Knife"],"title":"Repo","type":"string"},"signature":{"description":"ASCII-armored detached PGP signature over the commit data. GitHub adds this to the `gpgsig` header if provided.","examples":["-----BEGIN PGP SIGNATURE-----\\n...\\n-----END PGP SIGNATURE-----"],"title":"Signature","type":"string"},"tree":{"description":"SHA of the tree object for this commit; must exist in the repository.","examples":["9c1a209e10072fe99393945673ace821a4827669"],"title":"Tree","type":"string"}},"required":["owner","repo","message","tree"],"title":"CreateACommitRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a comment on a specific commit, or on a specific line if `path` and `position` are provided.","name":"GITHUB_CREATE_A_COMMIT_COMMENT","parameters":{"description":"Request to create a comment on a specific commit or a line within a file's diff in a commit.","properties":{"body":{"description":"The text content of the comment.","examples":["This is a great commit!","LGTM :+1:"],"title":"Body","type":"string"},"commit_sha":{"description":"The SHA identifier of the commit to comment on.","examples":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"],"title":"Commit Sha","type":"string"},"line":{"description":"**Deprecated:** Use `position` instead. Line number in the file to comment on. `position` takes precedence if both are provided.","examples":["5","23"],"title":"Line","type":"integer"},"owner":{"description":"The username or organization name that owns the repository.","examples":["octocat","github"],"title":"Owner","type":"string"},"path":{"description":"Relative path of the file to comment on. If specified, `position` is also required.","examples":["src/main.py","docs/README.md"],"title":"Path","type":"string"},"position":{"description":"Line number in the diff's patch to comment on, relative to the commit's changes. Required if `path` is specified.","examples":["1","15"],"title":"Position","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension.","examples":["Spoon-Knife","my-project"],"title":"Repo","type":"string"}},"required":["owner","repo","commit_sha","body"],"title":"CreateACommitCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Sets a commit's status (e.g., error, failure, pending, success from CI/CD) for a given SHA; max 1000 statuses per SHA/context.","name":"GITHUB_CREATE_A_COMMIT_STATUS","parameters":{"description":"Request schema for `CreateACommitStatus`","properties":{"context":{"default":"default","description":"Label to differentiate this status from other systems (e.g., 'ci/jenkins'); case-insensitive.","examples":["ci/jenkins","linter/eslint","default"],"title":"Context","type":"string"},"description":{"description":"Human-readable description of the status, displayed in GitHub UI.","examples":["Build successful","Tests passed with 0 failures","Deployment to staging failed"],"title":"Description","type":"string"},"owner":{"description":"Username or organization name of the repository owner (case-insensitive).","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"Repository name, without the `.git` extension (case-insensitive).","examples":["Hello-World","Spoon-Knife"],"title":"Repo","type":"string"},"sha":{"description":"SHA hash of the commit.","examples":["c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc","6dcb09b5b57875f334f61aebed695e2e4193db5e"],"title":"Sha","type":"string"},"state":{"description":"State of the commit status, indicating check outcome or phase.","enum":["error","failure","pending","success"],"examples":["error","failure","pending","success"],"title":"State","type":"string"},"target_url":{"description":"URL linking to the source of the status (e.g., CI build log), displayed in GitHub UI.","examples":["http://ci.example.com/user/repo/build/sha","https://example.com/deployment/status/123"],"title":"Target Url","type":"string"}},"required":["owner","repo","sha","state"],"title":"CreateACommitStatusRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a custom role with defined permissions within a GitHub organization.","name":"GITHUB_CREATE_A_CUSTOM_ORGANIZATION_ROLE","parameters":{"description":"Request to create a custom organization role.","properties":{"description":{"description":"Optional short description of the custom role's purpose or permissions.","examples":["Grants read-only access to organization settings and member audit logs.","Allows managing repository security advisories."],"title":"Description","type":"string"},"name":{"description":"Unique name for the custom role.","examples":["Triage Access","Security Auditor","Release Manager"],"title":"Name","type":"string"},"org":{"description":"Name of the GitHub organization (case-insensitive) where the custom role will be created.","examples":["github","my-company-org"],"title":"Org","type":"string"},"permissions":{"description":"List of fine-grained permission strings defining actions granted by this role. Use the List Organization Fine-Grained Permissions action to get available permissions for your organization.","examples":["write_organization_custom_org_role","read_organization_custom_org_role","write_organization_custom_repo_role","read_organization_custom_repo_role","read_organization_audit_log"],"items":{"type":"string"},"title":"Permissions","type":"array"}},"required":["org","name","permissions"],"title":"CreateACustomOrganizationRoleRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a deploy key for a repository; the repository must exist and be accessible, and the provided key must be a valid public SSH key.","name":"GITHUB_CREATE_A_DEPLOY_KEY","parameters":{"description":"Request schema for creating a deploy key, which is an SSH key granting access to a single repository.","properties":{"key":{"description":"The full public SSH key. Ensure this is the public key, not the private key.","examples":["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC... user@example.com"],"title":"Key","type":"string"},"owner":{"description":"The username of the account that owns the repository. This is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"read_only":{"description":"If `true`, the deploy key will only have read access. If `false` (default), the key will have read and write access. Write access grants significant privileges.","examples":[true,false],"title":"Read Only","type":"boolean"},"repo":{"description":"The name of the repository, without the `.git` extension. This is not case sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"},"title":{"description":"A descriptive name for the new deploy key. If not provided, a default name will be generated.","examples":["Staging Server Key"],"title":"Title","type":"string"}},"required":["owner","repo","key"],"title":"CreateADeployKeyRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a GitHub deployment for an existing repository, targeting a specific ref (branch, tag, or SHA) that must also exist within the repository.","name":"GITHUB_CREATE_A_DEPLOYMENT","parameters":{"description":"Request schema for `CreateADeployment`","properties":{"auto_merge":{"default":true,"description":"Attempts to automatically merge the default branch into the requested ref if the ref is behind the default branch. Set to `false` to disable.","title":"Auto Merge","type":"boolean"},"description":{"description":"A short description of the deployment. Maximum length of 1000 characters.","examples":["Deploying new feature X to staging.","Hotfix for critical bug #123."],"title":"Description","type":"string"},"environment":{"default":"production","description":"Name for the target deployment environment (e.g., `production`, `staging`, `qa`).","examples":["production","staging","develop","qa"],"title":"Environment","type":"string"},"owner":{"description":"The account owner of the repository. This name is not case-sensitive. The repository must exist and the authenticated user must have access to it.","title":"Owner","type":"string"},"payload":{"description":"A JSON string payload providing additional information that a deployment system might need, customizable based on the deployment process.","examples":["'''{\"deploy_tool\": \"custom_script\", \"target_environment\": \"server_alpha\"}'''","'''{\"user_initiating\": \"admin_user\"}'''"],"title":"Payload","type":"string"},"production_environment":{"description":"Specifies if the given environment is one that end-users directly interact with.","title":"Production Environment","type":"boolean"},"ref":{"description":"The ref to deploy. This can be a branch name, a tag name, or a commit SHA.","examples":["main","v1.2.3","c0ff335h4c0d3f0r3x4mpl3"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive. The repository must exist and the authenticated user must have write access to it.","title":"Repo","type":"string"},"required_contexts":{"description":"A list of status check contexts to verify against commit status checks before creating the deployment. If omitted or `null`, GitHub verifies all unique contexts. Pass an empty list `[]` to bypass all checks.","examples":[["continuous-integration/jenkins","security/snyk"],[]],"items":{"type":"string"},"title":"Required Contexts","type":"array"},"task":{"default":"deploy","description":"Specifies a task to execute, e.g., `deploy` or `deploy:migrations`.","examples":["deploy","deploy:migrations","build_and_deploy"],"title":"Task","type":"string"},"transient_environment":{"default":false,"description":"Specifies if the given environment is specific to this deployment and will no longer exist at some point in the future (e.g., a staging environment for a pull request). Set to `true` if the environment is temporary.","title":"Transient Environment","type":"boolean"}},"required":["owner","repo","ref"],"title":"CreateADeploymentRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a deployment branch or tag policy for an existing environment in a GitHub repository, using a Ruby File.fnmatch pattern (where `*` doesn't match `/`) to specify which branches or tags are deployable.","name":"GITHUB_CREATE_A_DEPLOYMENT_BRANCH_POLICY","parameters":{"description":"Request schema for `CreateADeploymentBranchPolicy`","properties":{"environment_name":{"description":"Name of the target environment; URL-encode special characters (e.g., `/` as `%2F`).","examples":["production","staging%2Ffrontend","development_v2"],"title":"Environment Name","type":"string"},"name":{"description":"Name pattern for deployable branches/tags (Ruby File.fnmatch syntax; `*` won't match `/`, e.g., `release/*/*` for `release/feature/login`). Refer to [Ruby File.fnmatch documentation](https://ruby-doc.org/core-2.5.1/File.html#method-c-fnmatch).","examples":["main","releases/*","feature/user-*","v*.*.*"],"title":"Name","type":"string"},"owner":{"description":"Account owner of the repository (not case sensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (not case sensitive).","examples":["hello-world","my-app-repository"],"title":"Repo","type":"string"},"type":{"description":"Whether the policy targets a Git branch or a tag.","enum":["branch","tag"],"examples":["branch","tag"],"title":"TypeEnm","type":"string"}},"required":["owner","repo","environment_name","name"],"title":"CreateADeploymentBranchPolicyRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a status for an existing deployment, updating its operational state, associated URLs, and description.","name":"GITHUB_CREATE_A_DEPLOYMENT_STATUS","parameters":{"description":"Request schema for `CreateADeploymentStatus`","properties":{"auto_inactive":{"description":"If true, sets prior successful, non-transient, non-production deployments in the same repository and environment to `inactive`.","examples":["true","false"],"title":"Auto Inactive","type":"boolean"},"deployment_id":{"description":"The unique identifier of the deployment for which to create a status.","examples":[12345],"title":"Deployment Id","type":"integer"},"description":{"description":"Short description of the status (max 140 characters).","examples":["Deployment to staging completed successfully."],"title":"Description","type":"string"},"environment":{"description":"Name for the target deployment environment (e.g., `production`, `staging`). If unset, uses environment from previous status or deployment.","examples":["production","staging"],"title":"Environment","type":"string"},"environment_url":{"description":"URL for accessing the target deployment environment.","examples":["https://myapp-staging.example.com"],"title":"Environment Url","type":"string"},"log_url":{"description":"URL for deployment output. Preferred over `target_url`; setting this also sets `target_url` to the same value.","examples":["https://ci.example.com/job/my-app/15/console"],"title":"Log Url","type":"string"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["hello-world"],"title":"Repo","type":"string"},"state":{"description":"State of the status. Setting a transient deployment to `inactive` shows it as `destroyed` in GitHub.","enum":["error","failure","inactive","in_progress","queued","pending","success"],"examples":["success","pending","failure"],"title":"State","type":"string"},"target_url":{"description":"URL for deployment status updates or output. `log_url` is generally preferred.","examples":["https://example.com/deployment/output/123"],"title":"Target Url","type":"string"}},"required":["owner","repo","deployment_id","state"],"title":"CreateADeploymentStatusRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new discussion post on a specific team's page within an organization.","name":"GITHUB_CREATE_A_DISCUSSION","parameters":{"description":"Parameters to create a new discussion post on a team's page.","properties":{"body":{"description":"Main content of the discussion post, typically in markdown.","examples":["Let's brainstorm ideas for the upcoming hackathon.","Please review the attached document regarding the new API."],"title":"Body","type":"string"},"org":{"description":"Name of the organization (not case-sensitive).","examples":["my-github-org"],"title":"Org","type":"string"},"private":{"default":false,"description":"If `true`, post is private (visible only to team members, org owners, and team maintainers); `false` makes it public to all organization members.","examples":["true","false"],"title":"Private","type":"boolean"},"team_slug":{"description":"URL-friendly version of the team name (slug).","examples":["engineering-team","marketing-mavens"],"title":"Team Slug","type":"string"},"title":{"description":"Title of the discussion post.","examples":["New Q3 Project Proposals","Team Offsite Ideas"],"title":"Title","type":"string"}},"required":["org","team_slug","title","body"],"title":"CreateADiscussionRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new comment on an existing team discussion within a GitHub organization.","name":"GITHUB_CREATE_A_DISCUSSION_COMMENT","parameters":{"description":"Request schema for `CreateADiscussionComment`","properties":{"body":{"description":"The content of the discussion comment. Supports GitHub Flavored Markdown.","examples":["Great point! I agree with this approach."],"title":"Body","type":"string"},"discussion_number":{"description":"The unique number identifying the discussion within the team.","examples":["42"],"title":"Discussion Number","type":"integer"},"org":{"description":"The name of the organization. This name is not case-sensitive.","examples":["octo-org"],"title":"Org","type":"string"},"team_slug":{"description":"The slug (URL-friendly version) of the team name.","examples":["justice-league"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","discussion_number","body"],"title":"CreateADiscussionCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a fork of an accessible repository, optionally into a specific organization, with a new name, or copying only the default branch.","name":"GITHUB_CREATE_A_FORK","parameters":{"description":"Request schema for `CreateAFork` to create a new fork of a repository.","properties":{"default_branch_only":{"description":"Specifies whether to fork only the default branch of the repository. If `True`, only the default branch is copied. If `False` or not specified, all branches are copied.","examples":[true],"title":"Default Branch Only","type":"boolean"},"name":{"description":"The desired name for the newly created fork. If not provided, the new fork will have the same name as the original repository.","examples":["my-awesome-fork"],"title":"Name","type":"string"},"organization":{"description":"The GitHub organization name to fork the repository into. If not specified, the fork will be created in the authenticated user's account.","examples":["my-github-org"],"title":"Organization","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"CreateAForkRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new gist on GitHub with provided files, an optional description, and public/secret visibility.","name":"GITHUB_CREATE_A_GIST","parameters":{"description":"Request schema for `CreateAGist`","properties":{"description":{"description":"Optional description for the gist.","examples":["My new Python utility functions","Example of API usage"],"title":"Description","type":"string"},"files":{"description":"JSON string representing content for the gist's files. Dictionary where keys are filenames and values are objects, each having a `content` key with the file's raw string data.","examples":["{\"hello_world.txt\": {\"content\": \"Hello, Universe!\"}}","{\"main.py\": {\"content\": \"def main():\\n print(\\\"Executed\\\")\\nif __name__ == \\\"__main__\\\":\\n main()\"}, \"README.md\": {\"content\": \"# My Gist\\nThis is a test gist.\"}}"],"title":"Files","type":"string"},"public":{"default":false,"description":"Indicates if the gist is public (`true`) or secret (`false`).","examples":["true","false"],"title":"Public","type":"boolean"}},"required":["files"],"title":"CreateAGistRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new comment on a specified GitHub gist.","name":"GITHUB_CREATE_A_GIST_COMMENT","parameters":{"description":"Request schema for `CreateAGistComment`","properties":{"body":{"description":"The text of the comment to be posted on the gist.","examples":["This is a great Gist!","Thanks for sharing this code snippet."],"title":"Body","type":"string"},"gist_id":{"description":"The unique identifier of the gist.","examples":["29388372","61e6f882424a427cb27205a22cd758e9"],"title":"Gist Id","type":"string"}},"required":["gist_id","body"],"title":"CreateAGistCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Use this action to complete the GitHub App Manifest flow (step 3 of 3) by exchanging the temporary authorization `code` for the app's full configuration, including credentials and private key. The code is provided via redirect URL after creating the app through GitHub's web interface and must be used within 1 hour.","name":"GITHUB_CREATE_A_GITHUB_APP_FROM_A_MANIFEST","parameters":{"description":"Request schema for `CreateAGithubAppFromAManifest`","properties":{"code":{"description":"The temporary authorization code provided by GitHub during the app manifest flow (received as a query parameter in the redirect URL). This single-use code must be exchanged within 1 hour of generation to retrieve the app's configuration including credentials and private key.","examples":["ghu_1A2b3C4d5E6f7G8h9I0j","ghu_aSdFgHjKlQwErTyUiOp"],"title":"Code","type":"string"}},"required":["code"],"title":"CreateAGithubAppFromAManifestRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a GitHub Pages deployment for a repository using a specified artifact and OIDC token, provided GitHub Pages is enabled and the artifact (containing static assets) is accessible.","name":"GITHUB_CREATE_A_GITHUB_PAGES_DEPLOYMENT","parameters":{"description":"Request schema for creating a GitHub Pages deployment.","properties":{"artifact_id":{"description":"Identifier of a GitHub Actions artifact (e.g., .zip or .tar) with static assets for deployment. Artifact must belong to the repository. Either this or `artifact_url` is required.","examples":[123456789],"title":"Artifact Id","type":"integer"},"artifact_url":{"description":"URL of a GitHub Actions artifact (e.g., .zip or .tar) with static assets for deployment. Artifact must belong to the repository. Either this or `artifact_id` is required.","examples":["https://pipelines.actions.githubusercontent.com/example/artifact_url"],"title":"Artifact Url","type":"string"},"environment":{"default":"github-pages","description":"Target environment for this GitHub Pages deployment. Defaults to `github-pages`.","examples":["github-pages","production"],"title":"Environment","type":"string"},"oidc_token":{"description":"OIDC token from GitHub Actions for deployment authorization, typically from `secrets.GITHUB_TOKEN` with `id-token: write` permission.","title":"Oidc Token","type":"string"},"owner":{"description":"The account owner of the repository (e.g., a GitHub username or organization name). This field is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"pages_build_version":{"default":"GITHUB_SHA","description":"Unique string identifying the build version for this deployment, typically the Git commit SHA. Defaults to `GITHUB_SHA`.","examples":["GITHUB_SHA","abc123def456ghi789"],"title":"Pages Build Version","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","oidc_token"],"title":"CreateAGithubPagesDeploymentRequest","type":"object"}},"type":"function"},{"function":{"description":"Configures or updates GitHub Pages for a repository, setting build type and source; ensure a Pages workflow exists for 'workflow' `build_type`, or `source_branch` exists for 'legacy' or unspecified `build_type`. This action allows users to effectively manage their GitHub Pages site settings, specifying how the site is built and where the source files are located.","name":"GITHUB_CREATE_A_GITHUB_PAGES_SITE","parameters":{"description":"Request model for creating or updating a GitHub Pages site configuration.","properties":{"build_type":{"description":"Build process for the Pages site: 'legacy' (traditional GitHub Pages build) or 'workflow' (GitHub Actions). If omitted and `source_branch` is provided, defaults to 'legacy'. When 'workflow', `source_branch` and `source_path` are ignored.","enum":["legacy","workflow"],"examples":["legacy","workflow"],"title":"BuildTypeEnm","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is case-insensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the '.git' extension. This field is case-insensitive.","examples":["Spoon-Knife","my-docs-site"],"title":"Repo","type":"string"},"source__branch":{"description":"The branch for GitHub Pages source (e.g., 'main', 'gh-pages'). Required if `build_type` is 'legacy' or not specified. It is ignored if `build_type` is 'workflow'.","examples":["main","gh-pages","docs"],"title":"Source Branch","type":"string"},"source__path":{"description":"Directory within `source_branch` for site source files (e.g., '/' for root, '/docs'). Ignored if `build_type` is 'workflow'.","enum":["/","/docs"],"examples":["/","/docs"],"title":"PathEnm","type":"string"}},"required":["owner","repo"],"title":"CreateAGithubPagesSiteRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new label in a specified GitHub repository, provided the repository exists and the user has write permissions.","name":"GITHUB_CREATE_A_LABEL","parameters":{"description":"Request schema for creating a new label in a GitHub repository.","properties":{"color":{"description":"The hexadecimal color code for the label (e.g., `f29513`), without the leading `#`. Required parameter.","examples":["d73a4a","0075ca","cfd3d7"],"title":"Color","type":"string"},"description":{"description":"A short description of the label. Maximum 100 characters.","examples":["An issue with a bug.","A new feature or request.","Improvements or additions to documentation."],"title":"Description","type":"string"},"name":{"description":"The name of the label. Emoji can be added to label names, using either native emoji or colon-style markup. For example, typing `:strawberry:` will render the emoji ![:strawberry:](https://github.githubassets.com/images/icons/emoji/unicode/1f353.png \":strawberry:\"). For a full list of available emoji and codes, see the \"[Emoji cheat sheet](https://github.com/ikatyang/emoji-cheat-sheet).\"","examples":["bug","enhancement","documentation :memo:"],"title":"Name","type":"string"},"owner":{"description":"The username of the account that owns the repository. This is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This is not case sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","name","color"],"title":"CreateALabelRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a milestone in a GitHub repository for tracking progress on issues or pull requests; requires repository existence and user write permissions.","name":"GITHUB_CREATE_A_MILESTONE","parameters":{"description":"Request to create a milestone in a GitHub repository.","properties":{"description":{"description":"Detailed description of the milestone.","examples":["Tracking all issues and PRs for the upcoming v1.0 release.","Tasks for the third quarter sprint."],"title":"Description","type":"string"},"due_on":{"description":"Due date for the milestone (ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`).","examples":["2024-12-31T23:59:59Z","2025-03-15T18:30:00Z"],"format":"date-time","title":"Due On","type":"string"},"owner":{"description":"Username of the repository owner (case-insensitive).","examples":["octocat","github-username"],"title":"Owner","type":"string"},"repo":{"description":"Repository name, without the `.git` extension (case-insensitive).","examples":["hello-world","my-repository-name"],"title":"Repo","type":"string"},"state":{"default":"open","description":"State of the milestone.","enum":["open","closed"],"examples":["open","closed"],"title":"State","type":"string"},"title":{"description":"Title for the new milestone.","examples":["v1.0 Release","Q3 Sprint Goals"],"title":"Title","type":"string"}},"required":["owner","repo","title"],"title":"CreateAMilestoneRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a repository autolink to automatically convert text references (e.g., 'TICKET-123') into hyperlinks, using a unique `key_prefix` and a `url_template` that includes ``.","name":"GITHUB_CREATE_AN_AUTOLINK_REFERENCE_FOR_A_REPOSITORY","parameters":{"description":"Request schema for creating an autolink reference in a repository.","properties":{"is_alphanumeric":{"default":true,"description":"Specifies if the `` placeholder in `url_template` matches alphanumeric characters (`A-Z` (case-insensitive), `0-9`, and `-`) or only numeric characters (`0-9`).","examples":[true,false],"title":"Is Alphanumeric","type":"boolean"},"key_prefix":{"description":"Prefix that triggers the autolink (e.g., 'JIRA-'). When followed by an identifier, it's converted into a link. Must be non-empty and not contain spaces.","examples":["JIRA-","TICKET-","DOC-"],"title":"Key Prefix","type":"string"},"owner":{"description":"The account owner of the repository. This can be a username or an organization name. The name is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. The name is not case-sensitive.","examples":["Spoon-Knife","my-project"],"title":"Repo","type":"string"},"url_template":{"description":"URL template for the autolink, using `` as a placeholder for the reference identifier (e.g., 'https://example.atlassian.net/browse/'). Behavior of `` is determined by `is_alphanumeric`.","examples":["https://example.atlassian.net/browse/","https://tracker.example.com/issues?id="],"title":"Url Template","type":"string"}},"required":["owner","repo","key_prefix","url_template"],"title":"CreateAnAutolinkReferenceForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates an encrypted environment variable for a pre-existing environment within a GitHub repository; will fail if the variable name already exists.","name":"GITHUB_CREATE_AN_ENVIRONMENT_VARIABLE","parameters":{"description":"Request schema for creating a new environment variable in a repository's environment.","properties":{"environment_name":{"description":"The name of the environment for which to create the variable. The name must be URL encoded if it contains special characters (e.g., slashes `/` must be replaced with `%2F`).","examples":["production","staging%2Ffeature-branch"],"title":"Environment Name","type":"string"},"name":{"description":"The name of the environment variable to create (e.g., `API_KEY`).","examples":["CI_TOKEN","DATABASE_URL"],"title":"Name","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world"],"title":"Repo","type":"string"},"value":{"description":"The value of the environment variable (e.g., `your_secret_token`). This value will be encrypted.","examples":["s3cr3t_v4lu3","postgres://user:secret@localhost:5432/mydb"],"title":"Value","type":"string"}},"required":["owner","repo","environment_name","name","value"],"title":"CreateAnEnvironmentVariableRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new issue in a GitHub repository, requiring the repository to exist and have issues enabled; specific fields like assignees, milestone, or labels may require push access.","name":"GITHUB_CREATE_AN_ISSUE","parameters":{"description":"Request schema for creating a new issue in a GitHub repository.","properties":{"assignee":{"description":"Login for the user to whom this issue should be assigned. NOTE: Only users with push access can set the assignee; it is silently dropped otherwise. **This field is deprecated in favor of `assignees`.**","examples":["octocat","monalisa"],"title":"Assignee","type":"string"},"assignees":{"description":"GitHub login names for users to assign to this issue. NOTE: Only users with push access can set assignees; they are silently dropped otherwise.","examples":[["octocat"],["monalisa","hubot"]],"items":{"type":"string"},"title":"Assignees","type":"array"},"body":{"description":"The detailed textual contents of the new issue.","examples":["Detailed description of the bug with steps to reproduce.","I think adding a dark mode would improve user experience..."],"title":"Body","type":"string"},"labels":{"description":"Array of label names to associate with this issue (generally case-insensitive). NOTE: Only users with push access can set labels; they are silently dropped otherwise. Pass an empty list to clear all labels.","examples":[["bug","critical"],["enhancement","ui"],["documentation"]],"items":{"type":"string"},"title":"Labels","type":"array"},"milestone":{"description":"The ID of the milestone to associate this issue with (e.g., \"5\"). NOTE: Only users with push access can set the milestone; it is silently dropped otherwise.","examples":["1","5"],"title":"Milestone","type":"string"},"owner":{"description":"The GitHub account owner of the repository (case-insensitive). The repository must exist and be accessible to the authenticated user.","examples":["octocat","torvalds"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension (case-insensitive). The repository must exist, be accessible, and have issues enabled.","examples":["Spoon-Knife","linux"],"title":"Repo","type":"string"},"title":{"description":"The title for the new issue.","examples":["Found a critical bug","Feature request: Add dark mode"],"title":"Title","type":"string"}},"required":["owner","repo","title"],"title":"CreateAnIssueRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new comment on an existing GitHub issue or pull request within the specified repository.","name":"GITHUB_CREATE_AN_ISSUE_COMMENT","parameters":{"description":"Parameters to create a comment on a GitHub issue or pull request.","properties":{"body":{"description":"Comment content in GitHub Flavored Markdown.","examples":["This is a **bold** comment!","Thanks for the update :+1:","Fixes #123"],"title":"Body","type":"string"},"issue_number":{"description":"Number identifying the issue or pull request for the comment.","examples":[42,101],"title":"Issue Number","type":"integer"},"owner":{"description":"Account owner of the repository (username or organization); not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository (without `.git` extension); not case-sensitive.","examples":["Spoon-Knife","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo","issue_number","body"],"title":"CreateAnIssueCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new classic project board within a specified GitHub organization. Note: This action uses GitHub's Projects (classic) REST API. The classic projects feature may be disabled in some organizations, and GitHub recommends migrating to Projects V2 (accessible via GraphQL API) for new projects. Requirements: - The authenticated user must be an organization member with project creation permissions - Classic projects must be enabled for the organization - Requires 'repo' and 'admin:org' or 'write:org' scopes","name":"GITHUB_CREATE_AN_ORGANIZATION_PROJECT","parameters":{"description":"Request to create a new classic project board in an organization.","properties":{"body":{"description":"Body or description for the new project.","examples":["Tasks and milestones for the Q1 roadmap.","Detailed plan and discussion for the website redesign project."],"title":"Body","type":"string"},"name":{"description":"Name for the new project.","examples":["Q1 Roadmap","Website Redesign"],"title":"Name","type":"string"},"org":{"description":"Name of the organization (not case-sensitive).","examples":["octocat","github"],"title":"Org","type":"string"}},"required":["org","name"],"title":"CreateAnOrganizationProjectRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new repository within a specified GitHub organization, with options for detailed configuration including visibility, features, merge strategies, initial commit, and templates.","name":"GITHUB_CREATE_AN_ORGANIZATION_REPOSITORY","parameters":{"description":"Request schema for creating a new repository in a GitHub organization.","properties":{"allow_auto_merge":{"default":false,"description":"Allow auto-merge on pull requests.","title":"Allow Auto Merge","type":"boolean"},"allow_merge_commit":{"default":true,"description":"Allow merging pull requests with a merge commit.","title":"Allow Merge Commit","type":"boolean"},"allow_rebase_merge":{"default":true,"description":"Allow rebase-merging pull requests.","title":"Allow Rebase Merge","type":"boolean"},"allow_squash_merge":{"default":true,"description":"Allow squash-merging pull requests.","title":"Allow Squash Merge","type":"boolean"},"auto_init":{"default":false,"description":"Create an initial commit with an empty README.","title":"Auto Init","type":"boolean"},"custom_properties":{"description":"JSON string containing custom properties for the repository as a key-value object. Example: '{\"project_lead\": \"octocat\", \"status\": \"alpha\"}'","examples":["{\"project_lead\": \"octocat\", \"status\": \"alpha\"}"],"title":"Custom Properties","type":"string"},"delete_branch_on_merge":{"default":false,"description":"Automatically delete head branches when pull requests are merged. Requires organization owner privileges if true.","title":"Delete Branch On Merge","type":"boolean"},"description":{"description":"Short description of the repository.","examples":["A project to demonstrate awesome capabilities."],"title":"Description","type":"string"},"gitignore_template":{"description":"Name of the .gitignore template to apply (e.g., \"Python\", \"Node\"). Refer to the [GitHub gitignore template list](https://github.com/github/gitignore).","examples":["Python"],"title":"Gitignore Template","type":"string"},"has_downloads":{"default":true,"description":"Enable downloads for this repository (deprecated).","title":"Has Downloads","type":"boolean"},"has_issues":{"default":true,"description":"Enable issues for this repository.","title":"Has Issues","type":"boolean"},"has_projects":{"default":true,"description":"Enable projects for this repository. Fails if organization has disabled repository projects and this is true.","title":"Has Projects","type":"boolean"},"has_wiki":{"default":true,"description":"Enable wiki for this repository.","title":"Has Wiki","type":"boolean"},"homepage":{"description":"URL for the repository's homepage.","examples":["https://example.com/my-awesome-project"],"title":"Homepage","type":"string"},"is_template":{"default":false,"description":"Make this repository a template repository.","title":"Is Template","type":"boolean"},"license_template":{"description":"License template keyword (e.g., \"mit\", \"apache-2.0\"). See [GitHub license documentation](https://docs.github.com/articles/licensing-a-repository/#searching-github-by-license-type) for options.","examples":["mit"],"title":"License Template","type":"string"},"merge_commit_message":{"description":"Default message for merge commits: 'PR_TITLE', 'PR_BODY', or 'BLANK'.","enum":["PR_BODY","PR_TITLE","BLANK"],"examples":["PR_BODY"],"title":"MergeCommitMessageEnm","type":"string"},"merge_commit_title":{"description":"Default title for merge commits: 'PR_TITLE' or 'MERGE_MESSAGE'.","enum":["PR_TITLE","MERGE_MESSAGE"],"examples":["MERGE_MESSAGE"],"title":"MergeCommitTitleEnm","type":"string"},"name":{"description":"Name of the new repository.","examples":["new-awesome-project"],"title":"Name","type":"string"},"org":{"description":"Name of the organization where the repository will be created (case-insensitive).","examples":["MyGitHubOrg"],"title":"Org","type":"string"},"private":{"default":false,"description":"Whether the repository is private. `visibility` takes precedence if both are set.","title":"Private","type":"boolean"},"squash_merge_commit_message":{"description":"Default message for squash merge commits: 'PR_BODY', 'COMMIT_MESSAGES', or 'BLANK'.","enum":["PR_BODY","COMMIT_MESSAGES","BLANK"],"examples":["PR_BODY"],"title":"SquashMergeCommitMessageEnm","type":"string"},"squash_merge_commit_title":{"description":"Default title for squash merge commits: 'PR_TITLE' or 'COMMIT_OR_PR_TITLE'.","enum":["PR_TITLE","COMMIT_OR_PR_TITLE"],"examples":["PR_TITLE"],"title":"SquashMergeCommitTitleEnm","type":"string"},"team_id":{"description":"ID of the team to grant access to this repository within the organization.","examples":[12345],"title":"Team Id","type":"integer"},"use_squash_pr_title_as_default":{"default":false,"description":"DEPRECATED: Use `squash_merge_commit_title`. Default to pull request title for squash-merge commits.","title":"Use Squash Pr Title As Default","type":"boolean"},"visibility":{"description":"Repository visibility: 'public' (visible to everyone) or 'private' (visible to collaborators).","enum":["public","private"],"examples":["public"],"title":"VisibilityEnm","type":"string"}},"required":["org","name"],"title":"CreateAnOrganizationRepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new, uniquely named GitHub Actions variable for an organization, with configurable repository access visibility (all, private, or selected).","name":"GITHUB_CREATE_AN_ORGANIZATION_VARIABLE","parameters":{"description":"Request schema for `CreateAnOrganizationVariable`","properties":{"name":{"description":"The name of the organization variable. Must be unique at the organization level.","examples":["CI_TOKEN","DEPLOY_SERVER_URL"],"title":"Name","type":"string"},"org":{"description":"The name of the GitHub organization. This name is not case-sensitive.","examples":["github","my-organization"],"title":"Org","type":"string"},"selected_repository_ids":{"description":"A list of repository integer IDs that can access this organization variable. This field is required and only applicable when `visibility` is set to 'selected'.","examples":["[1296269, 1296270]","[98765]"],"items":{"type":"integer"},"title":"Selected Repository Ids","type":"array"},"value":{"description":"The value of the organization variable.","examples":["your_secret_token_value","https://api.staging.example.com"],"title":"Value","type":"string"},"visibility":{"description":"Controls which repositories in the organization can access the variable. Accepted values are 'all' (all repositories), 'private' (only private repositories), or 'selected' (specific repositories designated by `selected_repository_ids`).","enum":["all","private","selected"],"examples":["all","private","selected"],"title":"Visibility","type":"string"}},"required":["org","name","value","visibility"],"title":"CreateAnOrganizationVariableRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a webhook for a GitHub organization to deliver event notifications to a configured URL.","name":"GITHUB_CREATE_AN_ORGANIZATION_WEBHOOK","parameters":{"description":"Request schema for `CreateAnOrganizationWebhook`","properties":{"active":{"default":true,"description":"Boolean indicating if the webhook is active. `true` sends notifications, `false` does not. Defaults to `true`.","title":"Active","type":"boolean"},"config__content__type":{"description":"The media type for serializing webhook payloads. Supported: `json`, `form`. GitHub API defaults to `form` if this field is not set or is `None`.","examples":["json","form"],"title":"Config Content Type","type":"string"},"config__insecure__ssl":{"description":"Controls SSL certificate verification for `config_url`. '1' disables verification (not recommended), '0' enables. GitHub API defaults to '0' (verification enabled) if this field is not set or is `None`.","examples":["0","1"],"title":"Config Insecure Ssl","type":"string"},"config__password":{"description":"Password for basic authentication if the webhook endpoint (`config_url`) requires it, corresponding to `config_username`.","examples":["p@$$wOrd","securePassword123"],"title":"Config Password","type":"string"},"config__secret":{"description":"Optional secret for generating an HMAC hex digest for payload verification (X-Hub-Signature-256 header). If provided, this is used as the key.","examples":["s3cr3tT0k3n","mySup3rS3cur3K3y"],"title":"Config Secret","type":"string"},"config__url":{"description":"Required. The target URL for webhook payload delivery. This URL is a mandatory part of the webhook's `config` object and will receive POST requests for subscribed events.","examples":["https://example.com/webhook","https://my-service.com/github-events"],"title":"Config Url","type":"string"},"config__username":{"description":"Username for basic authentication if the webhook endpoint (`config_url`) requires it. Use only if your endpoint is protected by basic auth.","examples":["webhook-user","admin"],"title":"Config Username","type":"string"},"events":{"default":["push"],"description":"List of event names to trigger the webhook. Use `['*']` for all events. Defaults to `['push']` if not specified. See GitHub docs for event types.","examples":[["push","issues"],["*"],["release"],["check_run"]],"items":{"type":"string"},"title":"Events","type":"array"},"name":{"default":"web","description":"The name of the webhook. Must be \"web\" for organization webhooks. Defaults to \"web\".","title":"Name","type":"string"},"org":{"description":"The name of the GitHub organization. This name is not case-sensitive.","examples":["my-cool-org","GitHub"],"title":"Org","type":"string"}},"required":["org","config__url"],"title":"CreateAnOrganizationWebhookRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a project card in a GitHub project column (classic projects only). DEPRECATION NOTICE: GitHub Projects (classic) was sunset on August 23, 2024. This API only works with existing classic project columns. New classic projects cannot be created. Consider using GitHub Projects V2 (GraphQL API) instead. The request body must contain either: - `note`: A text note for the card - OR `content_id` AND `content_type`: To associate an issue or pull request","name":"GITHUB_CREATE_A_PROJECT_CARD","parameters":{"description":"Request schema for creating a GitHub project card (classic projects).\n\nYou must provide EITHER:\n- `note`: A text note for the card\nOR\n- `content_id` AND `content_type`: To associate an issue or pull request with the card\n\nNOTE: GitHub Projects (classic) has been deprecated. This API only works with\nexisting classic project columns that were created before August 23, 2024.","properties":{"column_id":{"description":"The unique identifier of the project column where the card will be created. This value is used as a path parameter in the API request URL (e.g., `/projects/columns/{column_id}/cards`).","examples":[1234567],"title":"Column Id","type":"integer"},"content_id":{"description":"The unique identifier of the issue or pull request to associate with this card. Required when content_type is specified. Get this from the issue/PR details (it's the numeric ID, not the issue number).","examples":[1,42,12345],"title":"Content Id","type":"integer"},"content_type":{"description":"Type of content to associate with the card.","enum":["Issue","PullRequest"],"examples":["Issue","PullRequest"],"title":"ContentTypeEnum","type":"string"},"note":{"description":"The text content for the card. Use this to create a note-only card. Either 'note' OR both 'content_id' and 'content_type' must be provided.","examples":["Review pending tasks","TODO: Update documentation"],"title":"Note","type":"string"}},"required":["column_id"],"title":"CreateAProjectCardRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new column in a GitHub project (classic). DEPRECATION NOTICE: GitHub Classic Projects (V1) and its REST API were sunset on April 1, 2025. This action will return a 404 error on GitHub.com. For new projects, use GitHub Projects V2 which uses the GraphQL API instead. See: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/","name":"GITHUB_CREATE_A_PROJECT_COLUMN","parameters":{"description":"Request schema for `CreateAProjectColumn`","properties":{"name":{"description":"The name for the new project column.","examples":["To Do","In Progress","Done"],"title":"Name","type":"string"},"project_id":{"description":"The unique identifier of the target GitHub project (classic) where the new column will be created.","title":"Project Id","type":"integer"}},"required":["project_id","name"],"title":"CreateAProjectColumnRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a pull request in a GitHub repository, requiring existing `base` and `head` branches; `title` or `issue` must be provided.","name":"GITHUB_CREATE_A_PULL_REQUEST","parameters":{"description":"Request schema for `CreateAPullRequest`","properties":{"base":{"description":"The name of the branch you want the changes pulled into. This must be an existing branch on the current (target) repository. You cannot submit a pull request to one repository that requests a merge to a base branch of another repository. ","examples":["main","develop"],"title":"Base","type":"string"},"body":{"description":"The detailed description or contents of the pull request.","examples":["This PR introduces a new feature that does X, Y, and Z.","Fixes #42 by addressing the off-by-one error."],"title":"Body","type":"string"},"draft":{"description":"Indicates whether the pull request should be created as a draft. Draft pull requests cannot be merged until marked as ready for review.","examples":[true,false],"title":"Draft","type":"boolean"},"head":{"description":"The name of the branch where your changes are implemented. IMPORTANT: This branch must already exist in the repository (or fork) before calling this action. You must first create the branch and push commits to it (using git or the 'Create a reference' action), then create the PR. For cross-repository pull requests, namespace `head` with the source owner and branch, like `username:branch`.","examples":["feature-branch","octocat:my-feature-branch"],"title":"Head","type":"string"},"head_repo":{"description":"The name of the repository (e.g., 'octocat/Hello-World') where the changes in the pull request were made. This field is required for cross-repository pull requests if both the source and target repositories are owned by the same organization but are different repositories.","examples":["octocat/my-forked-repo"],"format":"repo.nwo","title":"Head Repo","type":"string"},"issue":{"description":"The number of an existing issue in the repository to convert into a pull request. If provided, the issue's title and body may be used for the pull request. Required if `title` is not specified.","examples":["123","456"],"title":"Issue","type":"integer"},"maintainer_can_modify":{"description":"Indicates whether maintainers of the upstream repository can modify the pull request. This is primarily relevant for pull requests originating from forks.","examples":[true,false],"title":"Maintainer Can Modify","type":"boolean"},"owner":{"description":"The account owner of the repository. This name is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"},"title":{"description":"The title of the new pull request. Required unless `issue` is specified.","examples":["Amazing new feature","Fix for critical bug #123"],"title":"Title","type":"string"}},"required":["owner","repo","head","base"],"title":"CreateAPullRequestRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a NEW Git reference (branch or tag) in a repository. IMPORTANT: This action ONLY creates NEW references - if the reference already exists, it will fail with a 422 'Reference already exists' error. To update an existing reference, use the 'Update a reference' (GITHUB_UPDATE_A_REFERENCE) action instead. The repository must not be empty prior to this operation.","name":"GITHUB_CREATE_A_REFERENCE","parameters":{"description":"Request schema for `CreateAReference`","properties":{"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"ref":{"description":"Fully qualified reference to create (e.g., `refs/heads/master`, `refs/tags/v1.0.0`). Must start with `refs/` and contain at least two slashes.","examples":["refs/heads/new-feature-branch","refs/tags/v1.2.3"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"},"sha":{"description":"SHA-1 hash of an existing commit in the repository that the new reference will point to.","examples":["aa218f56b14c9653891f9e74264a383fa43fefbd","1234567890abcdef1234567890abcdef12345678"],"title":"Sha","type":"string"}},"required":["owner","repo","ref","sha"],"title":"CreateAReferenceRequest","type":"object"}},"type":"function"},{"function":{"description":"Generates a temporary (one-hour) registration token to add a new self-hosted runner to an organization for GitHub Actions.","name":"GITHUB_CREATE_A_REGISTRATION_TOKEN_FOR_AN_ORGANIZATION","parameters":{"description":"Request schema for `CreateARegistrationTokenForAnOrganization`","properties":{"org":{"description":"The name of the organization. This name is not case-sensitive.","examples":["octo-org","github"],"title":"Org","type":"string"}},"required":["org"],"title":"CreateARegistrationTokenForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Generates a time-limited token required to register a new self-hosted runner with a specific repository.","name":"GITHUB_CREATE_A_REGISTRATION_TOKEN_FOR_A_REPOSITORY","parameters":{"description":"Request schema for `CreateARegistrationTokenForARepository`","properties":{"owner":{"description":"The username of the account or the organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world","linguist"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"CreateARegistrationTokenForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a release in a GitHub repository for a specified tag; the tag must be unique for published releases, and if a `discussion_category_name` is given, it must already exist.","name":"GITHUB_CREATE_A_RELEASE","parameters":{"properties":{"body":{"description":"A detailed description of the release. Markdown formatting is supported.","examples":["This release includes new features X, Y, and bug fixes for Z.","# New Features\n- Feature A\n- Feature B"],"title":"Body","type":"string"},"discussion_category_name":{"description":"If specified, a new discussion will be created in this category and linked to the release. The category must already exist in the repository's discussions.","examples":["Announcements","General"],"title":"Discussion Category Name","type":"string"},"draft":{"default":false,"description":"Set to `true` to create an unpublished (draft) release. Defaults to `false`.","title":"Draft","type":"boolean"},"generate_release_notes":{"default":false,"description":"Set to `true` to automatically generate the release title (`name`) and description (`body`) from the commit history since the last release. Defaults to `false`.","title":"Generate Release Notes","type":"boolean"},"make_latest":{"default":"true","description":"Specifies if this release should be marked as the latest for the repository. Draft releases and prereleases cannot be set as 'latest'.","enum":["true","false","legacy"],"examples":["true","false","legacy"],"title":"Make Latest","type":"string"},"name":{"description":"The title of the release. If omitted and `generate_release_notes` is false, it defaults to the `tag_name`.","examples":["Version 1.0.0","My Awesome Release"],"title":"Name","type":"string"},"owner":{"description":"The account owner of the repository (username or organization name). This field is not case-sensitive.","examples":["octocat","my-company"],"title":"Owner","type":"string"},"prerelease":{"default":false,"description":"Set to `true` to identify this release as a pre-release. Defaults to `false`.","title":"Prerelease","type":"boolean"},"repo":{"description":"The name of the repository, without the .git extension. This field is not case-sensitive.","examples":["Spoon-Knife","our-awesome-project"],"title":"Repo","type":"string"},"tag_name":{"description":"The name of the tag for this release. This tag must be unique for published releases.","examples":["v1.0.0","v1.0.1-alpha"],"title":"Tag Name","type":"string"},"target_commitish":{"description":"Specifies the commitish value (e.g., branch name, tag name, or commit SHA) from which the Git tag is created. Defaults to the repository's default branch if the tag specified in `tag_name` doesn't exist yet.","examples":["main","develop","c1f67a4f091588259dd3f8a27378e170d40c8472"],"title":"Target Commitish","type":"string"}},"required":["owner","repo","tag_name"],"title":"CreateReleaseRequest","type":"object"}},"type":"function"},{"function":{"description":"Generates a token, valid for one hour, to authenticate removing a self-hosted runner from an organization.","name":"GITHUB_CREATE_A_REMOVE_TOKEN_FOR_AN_ORGANIZATION","parameters":{"description":"Request schema for generating a token to remove a self-hosted runner from an organization.","properties":{"org":{"description":"The unique identifier or name of the GitHub organization. This name is not case-sensitive. For example, if your organization's URL is github.com/my-org, 'my-org' is the value.","examples":["my-github-org"],"title":"Org","type":"string"}},"required":["org"],"title":"CreateARemoveTokenForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Generates a temporary (one-hour validity) token required to unregister and remove a self-hosted runner from a repository.","name":"GITHUB_CREATE_A_REMOVE_TOKEN_FOR_A_REPOSITORY","parameters":{"description":"Request schema for generating a token to remove a self-hosted runner from a repository.","properties":{"owner":{"description":"Username of the account owning the repository (not case-sensitive).","examples":["octo-org"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (not case-sensitive).","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"CreateARemoveTokenForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Posts a reply to a specific review comment on a GitHub pull request, requiring the repository, pull request, and original comment to exist, and a non-empty reply body.","name":"GITHUB_CREATE_A_REPLY_FOR_A_REVIEW_COMMENT","parameters":{"additionalProperties":false,"description":"Request schema for `CreateAReplyForAReviewComment`","properties":{"body":{"description":"The text of the reply to the review comment.","examples":["Thanks for the clarification!"],"title":"Body","type":"string"},"comment_id":{"description":"The unique identifier of the top-level review comment to which the reply is being made. This must be the ID of a top-level review comment, not a reply to that comment. Replies to replies are not supported.","examples":["10233"],"title":"Comment Id","type":"integer"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"pull_number":{"description":"The number that identifies the pull request.","examples":["1347"],"title":"Pull Number","type":"integer"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","pull_number","comment_id","body"],"title":"CreateAReplyForAReviewCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Triggers a GitHub Actions workflow or a webhook on a repository by creating a repository dispatch event, allowing programmatic triggering of workflows based on events outside of GitHub.","name":"GITHUB_CREATE_A_REPOSITORY_DISPATCH_EVENT","parameters":{"description":"Request schema for `CreateARepositoryDispatchEvent`","properties":{"client_payload":{"description":"JSON string containing extra information for the webhook event (max 10 top-level properties), passed to the triggered workflow or action. Example: '{\"ref\": \"main\", \"sha\": \"abc123\"}'","examples":["{\"ref\": \"main\", \"sha\": \"0123456789abcdef\", \"actor\": \"monalisa\"}","{\"custom_data\": \"value1\", \"user_id\": 123, \"trigger_reason\": \"manual_dispatch\"}"],"title":"Client Payload","type":"string"},"event_type":{"description":"Custom webhook event name (100 characters or fewer).","examples":["deploy_staging","run_integration_tests","custom_event_1"],"title":"Event Type","type":"string"},"owner":{"description":"The account owner of the repository (not case-sensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension (not case-sensitive).","examples":["hello-world","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo","event_type"],"title":"CreateARepositoryDispatchEventRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new repository for the authenticated user, optionally within an organization if `team_id` is specified.","name":"GITHUB_CREATE_A_REPOSITORY_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema for `CreateARepositoryForTheAuthenticatedUser`","properties":{"allow_auto_merge":{"default":false,"description":"Whether to allow auto-merge on pull requests.","title":"Allow Auto Merge","type":"boolean"},"allow_merge_commit":{"default":true,"description":"Whether to allow merging pull requests with a merge commit.","title":"Allow Merge Commit","type":"boolean"},"allow_rebase_merge":{"default":true,"description":"Whether to allow rebase-merging pull requests.","title":"Allow Rebase Merge","type":"boolean"},"allow_squash_merge":{"default":true,"description":"Whether to allow squash-merging pull requests.","title":"Allow Squash Merge","type":"boolean"},"auto_init":{"default":false,"description":"Whether to initialize the repository with a README.","title":"Auto Init","type":"boolean"},"delete_branch_on_merge":{"default":false,"description":"Whether to automatically delete head branches when pull requests are merged.","title":"Delete Branch On Merge","type":"boolean"},"description":{"description":"A short description of the repository.","examples":["This is a project about X.","My personal blog."],"title":"Description","type":"string"},"gitignore_template":{"description":"Desired .gitignore template (e.g., 'Python', 'Node').","examples":["Python","Node","Ruby"],"title":"Gitignore Template","type":"string"},"has_discussions":{"default":false,"description":"Whether discussions are enabled.","title":"Has Discussions","type":"boolean"},"has_downloads":{"default":true,"description":"Whether downloads are enabled (deprecated by GitHub and may not be configurable).","title":"Has Downloads","type":"boolean"},"has_issues":{"default":true,"description":"Whether issues are enabled.","title":"Has Issues","type":"boolean"},"has_projects":{"default":true,"description":"Whether projects are enabled.","title":"Has Projects","type":"boolean"},"has_wiki":{"default":true,"description":"Whether the wiki is enabled.","title":"Has Wiki","type":"boolean"},"homepage":{"description":"A URL with more information about the repository.","examples":["https://example.com/my-new-repo"],"title":"Homepage","type":"string"},"is_template":{"default":false,"description":"Whether this repository is a template repository.","title":"Is Template","type":"boolean"},"license_template":{"description":"SPDX license key identifier (lowercase). Examples: 'mit', 'apache-2.0', 'gpl-3.0'. Must be one of the GitHub-supported licenses.","examples":["mit","apache-2.0","gpl-3.0"],"title":"License Template","type":"string"},"merge_commit_message":{"description":"The default message for a merge commit. `PR_BODY` uses the pull request's body. `PR_TITLE` uses the pull request's title. `BLANK` results in a blank commit message. Valid combinations with merge_commit_title: (PR_TITLE, PR_BODY), (PR_TITLE, BLANK), (MERGE_MESSAGE, PR_TITLE).","enum":["PR_BODY","PR_TITLE","BLANK"],"examples":["PR_BODY","PR_TITLE","BLANK"],"title":"MergeCommitMessageEnm","type":"string"},"merge_commit_title":{"description":"The default title for a merge commit. `PR_TITLE` uses the pull request's title. `MERGE_MESSAGE` uses a classic title like 'Merge pull request #123 from branch-name'. Required when `merge_commit_message` is set. Valid combinations: (PR_TITLE, PR_BODY), (PR_TITLE, BLANK), (MERGE_MESSAGE, PR_TITLE).","enum":["PR_TITLE","MERGE_MESSAGE"],"examples":["PR_TITLE","MERGE_MESSAGE"],"title":"MergeCommitTitleEnm","type":"string"},"name":{"description":"The name of the repository. Must be unique within your account. Will be used in the repository URL (github.com/username/repo-name). Can only contain alphanumeric characters, hyphens, underscores, and periods.","examples":["my-new-repo","hello-world"],"title":"Name","type":"string"},"private":{"default":false,"description":"Whether the repository is private (true) or public (false).","title":"Private","type":"boolean"},"squash_merge_commit_message":{"description":"The default message for a squash merge commit. `PR_BODY` uses the pull request's body. `COMMIT_MESSAGES` uses the branch's commit messages. `BLANK` results in a blank commit message.","enum":["PR_BODY","COMMIT_MESSAGES","BLANK"],"examples":["PR_BODY","COMMIT_MESSAGES","BLANK"],"title":"SquashMergeCommitMessageEnm","type":"string"},"squash_merge_commit_title":{"description":"The default title for a squash merge commit. `PR_TITLE` uses the pull request's title. `COMMIT_OR_PR_TITLE` uses the commit's title (if only one commit) or the pull request's title (if multiple commits).","enum":["PR_TITLE","COMMIT_OR_PR_TITLE"],"examples":["PR_TITLE","COMMIT_OR_PR_TITLE"],"title":"SquashMergeCommitTitleEnm","type":"string"},"team_id":{"description":"The ID of the team to be granted access. Only valid if creating in an organization.","examples":[12345],"title":"Team Id","type":"integer"}},"required":["name"],"title":"CreateARepositoryForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Publishes the specified codespace to a new repository, using the codespace's current state as the initial commit.","name":"GITHUB_CREATE_A_REPOSITORY_FROM_AN_UNPUBLISHED_CODESPACE","parameters":{"description":"Request schema for `CreateARepositoryFromAnUnpublishedCodespace`","properties":{"codespace_name":{"description":"The unique name of the codespace to be published as a new repository. This codespace must exist, be unpublished, and belong to the authenticated user.","examples":["monalisa-glorious-space-machine-vrg5779x7p92r7w"],"title":"Codespace Name","type":"string"},"name":{"description":"The desired name for the new repository to be created from the codespace. If omitted, GitHub might generate a name (e.g., based on the codespace name).","examples":["my-new-project","codespace-to-repo-conversion"],"title":"Name","type":"string"},"private":{"default":false,"description":"Specifies the visibility of the new repository. Set to `true` for a private repository, or `false` for a public one. Defaults to `false` (public).","title":"Private","type":"boolean"}},"required":["codespace_name"],"title":"CreateARepositoryFromAnUnpublishedCodespaceRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new GitHub Projects V2 project board linked to a specified repository. Note: This action uses GitHub's Projects V2 GraphQL API. The legacy Projects V1 REST API has been sunset by GitHub. The project is owned by the repository owner (user or organization) and linked to the specified repository.","name":"GITHUB_CREATE_A_REPOSITORY_PROJECT","parameters":{"description":"Request schema for `CreateARepositoryProject`","properties":{"body":{"description":"An optional detailed description for the project board. Note: GitHub Projects V2 does not support a body/description field during creation, so this field is accepted but not used.","examples":["Tasks and milestones for the upcoming website redesign.","Product features and initiatives for the fourth quarter."],"title":"Body","type":"string"},"name":{"description":"The name of the project board to be created.","examples":["New Website Launch Plan","Q4 Roadmap"],"title":"Name","type":"string"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","title":"Repo","type":"string"}},"required":["owner","repo","name"],"title":"CreateARepositoryProjectRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a uniquely named ruleset for a repository, defining rules for branches or tags with specified enforcement, conditions, and bypass actors.","name":"GITHUB_CREATE_A_REPOSITORY_RULESET","parameters":{"description":"Request schema for `CreateARepositoryRuleset`","properties":{"bypass_actors":{"description":"Actors that can bypass rules in this ruleset as a JSON string. Each actor object requires `actor_id`, `actor_type` (e.g., 'Team', 'Integration'), and `bypass_mode` (e.g., 'always'). Example: '[{\"actor_id\": 1, \"actor_type\": \"Team\", \"bypass_mode\": \"always\"}]'","examples":["[{\"actor_id\": 1, \"actor_type\": \"Team\", \"bypass_mode\": \"always\"}, {\"actor_id\": 5, \"actor_type\": \"RepositoryRole\", \"bypass_mode\": \"pull_request\"}]"],"title":"Bypass Actors","type":"string"},"conditions__ref__name__exclude":{"description":"Ref names or patterns to exclude. Condition fails if any pattern matches the ref name.","examples":[["refs/heads/release/*","refs/heads/experimental-*"]],"items":{"type":"string"},"title":"Conditions Ref Name Exclude","type":"array"},"conditions__ref__name__include":{"description":"Ref names/patterns to include. Condition passes if one pattern matches the ref name. Use `~DEFAULT_BRANCH` for default branch, `~ALL` for all branches.","examples":[["refs/heads/main","~DEFAULT_BRANCH","refs/heads/feature-*"]],"items":{"type":"string"},"title":"Conditions Ref Name Include","type":"array"},"enforcement":{"description":"Enforcement level: `disabled` (ruleset is not enforced), `active` (ruleset is enforced), or `evaluate` (test rules before enforcing; GitHub Enterprise only).","enum":["disabled","active","evaluate"],"examples":["disabled","active","evaluate"],"title":"Enforcement","type":"string"},"name":{"description":"Unique name for the ruleset.","examples":["My branch protection ruleset"],"title":"Name","type":"string"},"owner":{"description":"Account owner of the repository (not case-sensitive).","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (not case-sensitive).","examples":["Hello-World"],"title":"Repo","type":"string"},"rules":{"description":"Array of rule objects as a JSON string to be enforced. Each must have `type` and may have `parameters`. Refer to GitHub API docs for available rule types and parameters. Example: '[{\"type\": \"creation\"}, {\"type\": \"deletion\"}]'","examples":["[{\"type\": \"creation\"}, {\"type\": \"deletion\"}, {\"type\": \"required_linear_history\"}]"],"title":"Rules","type":"string"},"target":{"description":"The target of the ruleset, whether it applies to branches or tags.","enum":["branch","tag"],"examples":["branch","tag"],"title":"TargetEnm","type":"string"}},"required":["owner","repo","name","enforcement"],"title":"CreateARepositoryRulesetRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new repository from an existing template repository; the authenticated user must have access to the template and, if creating in an organization, repository creation permissions within it.","name":"GITHUB_CREATE_A_REPOSITORY_USING_A_TEMPLATE","parameters":{"description":"Request schema for `CreateARepositoryUsingATemplate`","properties":{"description":{"description":"A brief summary or description for the new repository.","examples":["A new microservice for processing widgets."],"title":"Description","type":"string"},"include_all_branches":{"default":false,"description":"Set to `true` to copy the directory structure and files from all branches of the template repository, not just the default branch.","examples":[true,false],"title":"Include All Branches","type":"boolean"},"name":{"description":"The desired name for the new repository to be created.","examples":["my-new-service"],"title":"Name","type":"string"},"owner":{"description":"The username or organization name that will own the new repository. Defaults to the authenticated user if not provided.","examples":["my-github-username","my-cool-org"],"title":"Owner","type":"string"},"private":{"default":false,"description":"Set to `true` to create a private repository, or `false` to create a public repository.","examples":[true,false],"title":"Private","type":"boolean"},"template_owner":{"description":"The username or organization name that owns the template repository. This field is not case-sensitive.","examples":["octo-org"],"title":"Template Owner","type":"string"},"template_repo":{"description":"The name of the template repository, without the `.git` extension. This field is not case-sensitive.","examples":["template-for-projects"],"title":"Template Repo","type":"string"}},"required":["template_owner","template_repo","name"],"title":"CreateARepositoryUsingATemplateRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new, unencrypted variable in a repository for GitHub Actions workflows; fails if a variable with the same name already exists.","name":"GITHUB_CREATE_A_REPOSITORY_VARIABLE","parameters":{"description":"Request schema for creating a variable within a specific repository.","properties":{"name":{"description":"The name of the variable to create. Variable names are case-sensitive and can only contain alphanumeric characters ([a-z], [A-Z], [0-9]) or underscores (_). They cannot start with the `GITHUB_` prefix, and spaces are not allowed.","examples":["DEPLOY_SERVER_URL","BUILD_VERSION"],"title":"Name","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is not case sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case sensitive.","examples":["hello-world","my-app-repository"],"title":"Repo","type":"string"},"value":{"description":"The value of the variable. This will be stored as a string.","examples":["https://prod.example.com","1.2.3"],"title":"Value","type":"string"}},"required":["owner","repo","name","value"],"title":"CreateARepositoryVariableRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a webhook for a specified repository; requires admin permissions on the repository.","name":"GITHUB_CREATE_A_REPOSITORY_WEBHOOK","parameters":{"description":"Request schema for creating a repository webhook.","properties":{"active":{"default":true,"description":"Determines if notifications are sent when the webhook is triggered. `true` sends notifications (active), `false` disables them (inactive).","examples":[true,false],"title":"Active","type":"boolean"},"config__content__type":{"description":"Media type for serializing payloads: `json` or `form`. Defaults to `form` if not specified. `json` delivers JSON, `form` delivers URL-encoded data.","examples":["json","form"],"title":"Config Content Type","type":"string"},"config__insecure__ssl":{"description":"Determines SSL certificate verification for the payload URL: \"0\" to verify SSL (recommended), or \"1\" to skip. Defaults to \"0\" (verify SSL) if not provided.","examples":["0","1"],"title":"Config Insecure Ssl","type":"string"},"config__secret":{"description":"Optional secret string for HMAC hex digest in delivery signature headers, enhancing security. See GitHub's 'delivery signature headers' documentation for details.","examples":["mysecrettoken"],"title":"Config Secret","type":"string"},"config__url":{"description":"The URL to which webhook payloads will be delivered via POST for subscribed events.","examples":["https://example.com/webhook"],"title":"Config Url","type":"string"},"events":{"default":["push"],"description":"List of events to trigger the webhook (e.g., `['push']`, `['issues']`). See GitHub documentation for 'webhook event payloads'.","examples":[["push"],["issues","pull_request"],["*"]],"items":{"type":"string"},"title":"Events","type":"array"},"name":{"description":"Name of the webhook. Use `web`. This parameter currently only accepts `web` and defaults to `web` if not provided.","examples":["web"],"title":"Name","type":"string"},"owner":{"description":"The account owner of the repository. This name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. This name is not case sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"CreateARepositoryWebhookRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a review comment on a pull request's diff, targeting a specific line, range of lines, an entire file, or replying to an existing comment.","name":"GITHUB_CREATE_A_REVIEW_COMMENT_FOR_A_PULL_REQUEST","parameters":{"description":"Request schema for `CreateAReviewCommentForAPullRequest`","properties":{"body":{"description":"Text content of the review comment.","examples":["This looks great!","Could you clarify this section?"],"title":"Body","type":"string"},"commit_id":{"description":"SHA of the commit for the comment. Using an outdated `commit_id` can misplace the comment if lines change.","examples":["c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc"],"title":"Commit Id","type":"string"},"in_reply_to":{"description":"**[REPLY MODE]** ID of an existing review comment to reply to. When using reply mode, do not provide position, line, side, start_line, or start_side parameters as they will be ignored.","examples":["8663694"],"title":"In Reply To","type":"integer"},"line":{"description":"**[LINE-BASED MODE]** Line number in the diff for the comment. Required when using line-based mode (must be used with `side`). For multi-line comments, this is the last line of the range. Do not use with position or in_reply_to parameters.","examples":["25"],"title":"Line","type":"integer"},"owner":{"description":"Account owner of the repository (not case sensitive).","examples":["octocat"],"title":"Owner","type":"string"},"path":{"description":"Relative path of the file for the comment.","examples":["file1.txt","src/main.py"],"title":"Path","type":"string"},"position":{"description":"**[DEPRECATED - Use line-based mode instead]** Position in the diff hunk for the comment. When using position mode, do not provide line, side, start_line, start_side, or in_reply_to parameters.","title":"Position","type":"integer"},"pull_number":{"description":"Identifier of the pull request.","examples":["1347"],"title":"Pull Number","type":"integer"},"repo":{"description":"Repository name without the `.git` extension (not case sensitive).","examples":["Spoon-Knife"],"title":"Repo","type":"string"},"side":{"description":"**[LINE-BASED MODE]** Side of the diff (`LEFT` or `RIGHT`) for the comment. Required when using line-based mode with the `line` parameter. For multi-line comments, refers to the last line of the range. Do not use with position or in_reply_to parameters. **IMPORTANT:** Use `LEFT` only for deletions that appear in red in the diff. Use `RIGHT` for additions (green) or unchanged context lines (white). Attempting to comment on LEFT side lines that are not visible deletions in the diff will result in a 'could not be resolved' error.","enum":["LEFT","RIGHT"],"title":"SideEnm","type":"string"},"start_line":{"description":"**[LINE-BASED MODE - MULTI-LINE]** First line in the diff for a multi-line comment. Required when creating a multi-line comment (must be used with `start_side`, `line`, and `side`). Do not use with position or in_reply_to parameters.","examples":["20"],"title":"Start Line","type":"integer"},"start_side":{"description":"**[LINE-BASED MODE - MULTI-LINE]** Starting side of the diff (`LEFT` or `RIGHT`) for a multi-line comment. Required when creating a multi-line comment (must be used with `start_line`, `line`, and `side`). Do not use with position or in_reply_to parameters. **IMPORTANT:** Use `LEFT` only for deletions that appear in red in the diff. Use `RIGHT` for additions (green) or unchanged context lines (white). Attempting to use LEFT for lines that are not visible deletions will result in a 'could not be resolved' error.","enum":["LEFT","RIGHT","side"],"title":"StartSideEnm","type":"string"}},"required":["owner","repo","pull_number","body","commit_id","path"],"title":"CreateAReviewCommentForAPullRequestRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a pull request review, allowing approval, change requests, or comments; `body` is required if `event` is `REQUEST_CHANGES` or `COMMENT`, and omitting `event` makes the review `PENDING`.","name":"GITHUB_CREATE_A_REVIEW_FOR_A_PULL_REQUEST","parameters":{"description":"Request schema for `CreateAReviewForAPullRequest`","properties":{"body":{"description":"Review's main body text; required if `event` is `REQUEST_CHANGES` or `COMMENT`.","examples":["This looks great overall!","Please address the comments below."],"title":"Body","type":"string"},"comments":{"description":"Inline draft review comments. Each object requires `path` (relative file path) and `body` (comment text). Optionally, specify `line` (or `start_line` for multi-line), and `side` (or `start_side`) for diff location. `position` is deprecated; use `line`. Example: `[{'path': 'file.py', 'line': 10, 'body': 'Refactor this.'}]`","examples":["[{\"path\": \"README.md\", \"line\": 5, \"body\": \"Needs more detail here.\"}]","[{\"path\": \"src/main.py\", \"start_line\": 10, \"line\": 12, \"side\": \"RIGHT\", \"body\": \"This logic can be simplified.\"}]"],"items":{"description":"Schema for individual review comments","properties":{"body":{"description":"The text of the comment","title":"Body","type":"string"},"line":{"description":"The line number in the diff to comment on (required for single-line comments)","title":"Line","type":"integer"},"path":{"description":"The relative path to the file being commented on","title":"Path","type":"string"},"side":{"description":"Which side of the diff to place the comment on. Use 'LEFT' for deleted lines (red in diff) or unchanged context on the old version. Use 'RIGHT' for added/changed lines (green in diff) or unchanged context on the new version. Defaults to 'RIGHT' if not specified.","enum":["LEFT","RIGHT"],"title":"SideEnm","type":"string"},"start_line":{"description":"The start line number for multi-line comments","title":"Start Line","type":"integer"},"start_side":{"description":"Which side of the diff to start a multi-line comment on. Use 'LEFT' for deleted lines or unchanged context on the old version. Use 'RIGHT' for added/changed lines or unchanged context on the new version. Defaults to 'RIGHT' if not specified.","enum":["LEFT","RIGHT"],"title":"SideEnm","type":"string"}},"required":["path","body"],"title":"ReviewComment","type":"object"},"title":"Comments","type":"array"},"commit_id":{"description":"SHA of the commit to review; defaults to the latest pull request commit. Outdated SHAs may lead to stale comments.","examples":["c4d3a6f8a0c2b0e8e2b8f3c9e8b4b0e5b0b0e0e0"],"title":"Commit Id","type":"string"},"event":{"description":"Review action type (`APPROVE`, `REQUEST_CHANGES`, `COMMENT`); if omitted, review is `PENDING` and requires later submission.","enum":["APPROVE","REQUEST_CHANGES","COMMENT"],"examples":["APPROVE","REQUEST_CHANGES","COMMENT"],"title":"EventEnm","type":"string"},"owner":{"description":"Username of the account owning the repository (case-insensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"pull_number":{"description":"Identifying number of the pull request.","examples":[1,123],"title":"Pull Number","type":"integer"},"repo":{"description":"Repository name, without the `.git` extension (case-insensitive).","examples":["Hello-World","my-private-repo"],"title":"Repo","type":"string"}},"required":["owner","repo","pull_number"],"title":"CreateAReviewForAPullRequestRequest","type":"object"}},"type":"function"},{"function":{"description":"Exchanges a user-to-server token for a new, fine-grained scoped access token for a GitHub App, requiring `client_id`, `access_token`, either `target` or `target_id`, and at least one permission; for repository-specific scoping, provide either `repositories` (names) or `repository_ids` (IDs), but not both.","name":"GITHUB_CREATE_A_SCOPED_ACCESS_TOKEN","parameters":{"description":"Request schema for creating a new scoped access token for a GitHub App.","properties":{"access_token":{"description":"User-to-server access token to be exchanged for a new scoped token.","examples":["ghu_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"],"title":"Access Token","type":"string"},"client_id":{"description":"Client ID of the GitHub App.","examples":["iv1.1234567890abcdef"],"title":"Client Id","type":"string"},"permissions__actions":{"description":"Permission for GitHub Actions workflows, workflow runs, and artifacts. Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"ActionsEnm","type":"string"},"permissions__administration":{"description":"Permission for repository administration (settings, teams, collaborators). Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"AdministrationEnm","type":"string"},"permissions__checks":{"description":"Permission for checks on code (e.g., CI statuses). Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"ChecksEnm","type":"string"},"permissions__codespaces":{"description":"Permission for Codespaces. Applies to target user/organization if repositories are not specified, otherwise to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"CodespacesEnm","type":"string"},"permissions__contents":{"description":"Permission for repository contents, commits, branches, downloads, releases, and merges. Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"ContentsEnm","type":"string"},"permissions__dependabot__secrets":{"description":"Permission for Dependabot secrets for targeted repositories.","enum":["read","write"],"examples":["read","write"],"title":"DependabotSecretsEnm","type":"string"},"permissions__deployments":{"description":"Permission for deployments and deployment statuses. Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"DeploymentsEnm","type":"string"},"permissions__email__addresses":{"description":"Permission to manage email addresses for the user account. Applies to target user.","enum":["read","write"],"examples":["read","write"],"title":"EmailAddressesEnm","type":"string"},"permissions__environments":{"description":"Permission for repository environments. Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"EnvironmentsEnm","type":"string"},"permissions__followers":{"description":"Permission to manage followers for the user account. Applies to target user.","enum":["read","write"],"examples":["read","write"],"title":"FollowersEnm","type":"string"},"permissions__git__ssh__keys":{"description":"Permission to manage Git SSH keys for the user account. Applies to target user.","enum":["read","write"],"examples":["read","write"],"title":"GitSshKeysEnm","type":"string"},"permissions__gpg__keys":{"description":"Permission to view and manage GPG keys for the user account. Applies to target user.","enum":["read","write"],"examples":["read","write"],"title":"GpgKeysEnm","type":"string"},"permissions__interaction__limits":{"description":"Permission to view and manage interaction limits on a repository. Applies to target repositories or organization.","enum":["read","write"],"examples":["read","write"],"title":"InteractionLimitsEnm","type":"string"},"permissions__issues":{"description":"Permission for issues, comments, assignees, labels, and milestones. Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"IssuesEnm","type":"string"},"permissions__members":{"description":"Permission for organization members and teams. Applies to target organization.","enum":["read","write"],"examples":["read","write"],"title":"MembersEnm","type":"string"},"permissions__metadata":{"description":"Read-only permission for repository metadata, search, and collaborator listing. Applies to target repositories.","enum":["read","write"],"examples":["read"],"title":"MetadataEnm","type":"string"},"permissions__organization__administration":{"description":"Permission for administrative settings of an organization. Applies to target organization.","enum":["read","write"],"examples":["read","write"],"title":"OrganizationAdministrationEnm","type":"string"},"permissions__organization__announcement__banners":{"description":"Permission to view and manage organization announcement banners. Applies to target organization.","enum":["read","write"],"examples":["read","write"],"title":"OrganizationAnnouncementBannersEnm","type":"string"},"permissions__organization__copilot__seat__management":{"description":"Permission for GitHub Copilot seat assignments for organization members (beta). Applies to target organization.","enum":["write"],"examples":["write"],"title":"OrganizationCopilotSeatManagementEnm","type":"string"},"permissions__organization__custom__org__roles":{"description":"Permission for custom organization roles. Applies to target organization.","enum":["read","write"],"examples":["read","write"],"title":"OrganizationCustomOrgRolesEnm","type":"string"},"permissions__organization__custom__properties":{"description":"Permission for custom properties for an organization. Applies to target organization.","enum":["read","write","admin"],"examples":["read","write","admin"],"title":"OrganizationCustomPropertiesEnm","type":"string"},"permissions__organization__custom__roles":{"description":"Permission for custom repository roles within an organization. Applies to target organization.","enum":["read","write"],"examples":["read","write"],"title":"OrganizationCustomRolesEnm","type":"string"},"permissions__organization__events":{"description":"Read-only permission to view organization audit log events. Applies to target organization.","enum":["read"],"examples":["read"],"title":"OrganizationEventsEnm","type":"string"},"permissions__organization__hooks":{"description":"Permission for organization webhooks. Applies to target organization.","enum":["read","write"],"examples":["read","write"],"title":"OrganizationHooksEnm","type":"string"},"permissions__organization__packages":{"description":"Permission for organization-level GitHub Packages. Applies to target organization.","enum":["read","write"],"examples":["read","write"],"title":"OrganizationPackagesEnm","type":"string"},"permissions__organization__personal__access__token__requests":{"description":"Permission for requests for fine-grained personal access tokens within an organization. Applies to target organization.","enum":["read","write"],"examples":["read","write"],"title":"OrganizationPersonalAccessTokenRequestsEnm","type":"string"},"permissions__organization__personal__access__tokens":{"description":"Permission for fine-grained personal access tokens requested by organization members. Applies to target organization.","enum":["read","write"],"examples":["read","write"],"title":"OrganizationPersonalAccessTokensEnm","type":"string"},"permissions__organization__plan":{"description":"Read-only permission for viewing an organization's billing plan. Applies to target organization.","enum":["read"],"examples":["read"],"title":"OrganizationPlanEnm","type":"string"},"permissions__organization__projects":{"description":"Permission for organization projects and projects beta (if available). Applies to target organization.","enum":["read","write","admin"],"examples":["read","write","admin"],"title":"OrganizationProjectsEnm","type":"string"},"permissions__organization__secrets":{"description":"Permission for organization-level secrets (e.g., Actions secrets). Applies to target organization.","enum":["read","write"],"examples":["read","write"],"title":"OrganizationSecretsEnm","type":"string"},"permissions__organization__self__hosted__runners":{"description":"Permission for GitHub Actions self-hosted runners for an organization. Applies to target organization.","enum":["read","write"],"examples":["read","write"],"title":"OrganizationSelfHostedRunnersEnm","type":"string"},"permissions__organization__user__blocking":{"description":"Permission for viewing and managing users blocked by the organization. Applies to target organization.","enum":["read","write"],"examples":["read","write"],"title":"OrganizationUserBlockingEnm","type":"string"},"permissions__packages":{"description":"Permission for packages in GitHub Packages. Applies to target repositories or organization.","enum":["read","write"],"examples":["read","write"],"title":"PackagesEnm","type":"string"},"permissions__pages":{"description":"Permission for GitHub Pages settings, statuses, configurations, builds, and creating new builds. Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"PagesEnm","type":"string"},"permissions__profile":{"description":"Permission to manage profile settings for the user account. Applies to target user.","enum":["write"],"examples":["write"],"title":"ProfileEnm","type":"string"},"permissions__pull__requests":{"description":"Permission for pull requests, comments, assignees, labels, milestones, and merges. Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"PullRequestsEnm","type":"string"},"permissions__repository__custom__properties":{"description":"Permission to view and edit repository custom properties, if allowed by property definition. Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"RepositoryCustomPropertiesEnm","type":"string"},"permissions__repository__hooks":{"description":"Permission for repository webhooks. Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"RepositoryHooksEnm","type":"string"},"permissions__repository__projects":{"description":"Permission for repository projects, columns, and cards. Applies to target repositories.","enum":["read","write","admin"],"examples":["read","write","admin"],"title":"RepositoryProjectsEnm","type":"string"},"permissions__secret__scanning__alerts":{"description":"Permission for secret scanning alerts. Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"SecretScanningAlertsEnm","type":"string"},"permissions__secrets":{"description":"Permission for repository secrets (e.g., Actions secrets). Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"SecretsEnm","type":"string"},"permissions__security__events":{"description":"Permission for security events (e.g., code scanning alerts). Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"SecurityEventsEnm","type":"string"},"permissions__single__file":{"description":"Permission to access specific files in targeted repositories. The file paths must be configured in the GitHub App settings.","enum":["read","write"],"examples":["read","write"],"title":"SingleFileEnm","type":"string"},"permissions__starring":{"description":"Permission to list and manage repositories a user is starring. Applies to target user.","enum":["read","write"],"examples":["read","write"],"title":"StarringEnm","type":"string"},"permissions__statuses":{"description":"Permission for commit statuses. Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"StatusesEnm","type":"string"},"permissions__team__discussions":{"description":"Permission for team discussions and related comments. Applies to target organization.","enum":["read","write"],"examples":["read","write"],"title":"TeamDiscussionsEnm","type":"string"},"permissions__vulnerability__alerts":{"description":"Permission for Dependabot alerts. Applies to target repositories.","enum":["read","write"],"examples":["read","write"],"title":"VulnerabilityAlertsEnm","type":"string"},"permissions__workflows":{"description":"Permission for updating GitHub Actions workflow files. Requires `contents: write`. Applies to target repositories.","enum":["write"],"examples":["write"],"title":"WorkflowsEnm","type":"string"},"repositories":{"description":"Repository names to scope the new token to. Cannot be used if `repository_ids` is specified.","examples":[["my-repo","another-repo"]],"items":{"type":"string"},"title":"Repositories","type":"array"},"repository_ids":{"description":"Repository IDs to scope the new token to. Cannot be used if `repositories` is specified.","examples":[[1234567,7654321]],"items":{"type":"integer"},"title":"Repository Ids","type":"array"},"target":{"description":"Username or organization name for scoping the new token. Required if `target_id` is not provided.","examples":["octocat","github-org"],"title":"Target","type":"string"},"target_id":{"description":"ID of the user or organization for scoping the new token. Required if `target` is not provided.","examples":[12345,67890],"title":"Target Id","type":"integer"}},"required":["client_id","access_token"],"title":"CreateAScopedAccessTokenRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a snapshot of a repository's dependencies to populate the GitHub dependency graph and enable security alerts; `sha` must be a 40-character commit ID, `ref` a fully qualified Git reference (e.g., `refs/heads/main`), and `scanned` an ISO 8601 timestamp.","name":"GITHUB_CREATE_A_SNAPSHOT_OF_DEPENDENCIES_FOR_A_REPOSITORY","parameters":{"description":"Input for creating a dependency snapshot, capturing the repository's dependency state at a specific commit.","properties":{"detector__name":{"description":"Optional name of the tool used to detect dependencies.","examples":["dependency-check"],"title":"Detector Name","type":"string"},"detector__url":{"description":"Optional URL of the detector tool used.","examples":["https://jeremylong.github.io/DependencyCheck/"],"title":"Detector Url","type":"string"},"detector__version":{"description":"Optional version of the detector tool used.","examples":["7.0.0"],"title":"Detector Version","type":"string"},"job__correlator":{"description":"Optional string to group snapshots. For a given `job.correlator` and `detector.name`, only the 'latest' snapshot is current. Useful to distinguish detection runs (e.g., concatenating GITHUB_WORKFLOW and GITHUB_JOB).","examples":["my-workflow-job-123"],"title":"Job Correlator","type":"string"},"job__html__url":{"description":"Optional URL for the job that generated this snapshot.","examples":["https://github.com/octocat/hello-world/actions/runs/123"],"title":"Job Html Url","type":"string"},"job__id":{"description":"Optional external ID of the job that generated this snapshot.","title":"Job Id","type":"string"},"manifests":{"description":"Optional collection of package manifests as a JSON string (e.g., package-lock.json, pom.xml). Keys are manifest file names; values detail dependencies. Example: '{\"package-lock.json\": {\"name\": \"...\", \"resolved\": {...}}}'","title":"Manifests","type":"string"},"metadata":{"description":"Optional user-defined metadata as a JSON string for domain-specific information. Limited to 8 keys with scalar values (e.g., string, number, boolean). Example: '{\"key1\": \"value1\", \"key2\": 123}'","title":"Metadata","type":"string"},"owner":{"description":"Account owner of the repository (name is not case-sensitive).","examples":["octocat"],"title":"Owner","type":"string"},"ref":{"description":"Git reference (fully qualified, e.g., `refs/heads/main`) of the repository branch/tag that triggered this snapshot.","examples":["refs/heads/main","refs/tags/v1.0"],"pattern":"^refs/","title":"Ref","type":"string"},"repo":{"description":"Repository name, without `.git` extension (name is not case-sensitive).","examples":["hello-world"],"title":"Repo","type":"string"},"scanned":{"description":"UTC timestamp (ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ) when the snapshot was taken.","examples":["2023-10-26T14:30:00Z"],"format":"date-time","title":"Scanned","type":"string"},"sha":{"description":"Commit SHA (maximum 40 characters) associated with this dependency snapshot.","examples":["ddc90423135c402f345907a6032d9054137dd9ee"],"title":"Sha","type":"string"},"version":{"description":"Version of the dependency snapshot submission, typically of the manifest or lock file format.","title":"Version","type":"integer"}},"required":["owner","repo","version","sha","ref","scanned"],"title":"CreateASnapshotOfDependenciesForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates an annotated Git tag object in a repository, pointing to an existing Git object (commit, tree, or blob) defined by its SHA and ensuring the `type` field correctly specifies the object's type.","name":"GITHUB_CREATE_A_TAG_OBJECT","parameters":{"description":"Request schema for `CreateATagObject` action.","properties":{"message":{"description":"The message associated with the tag.","examples":["Initial release v1.0.0"],"title":"Message","type":"string"},"object":{"description":"The SHA of the Git object (commit, tree, or blob) that this tag is pointing to.","examples":["c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c"],"title":"Object","type":"string"},"owner":{"description":"The account owner of the repository. This name is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"},"tag":{"description":"The name of the tag, typically a version identifier (e.g., \"v0.0.1\").","examples":["v1.0.0"],"title":"Tag","type":"string"},"tagger__date":{"description":"The timestamp for when this object was tagged. This should be in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`.","examples":["2014-11-07T22:01:45Z"],"format":"date-time","title":"Tagger Date","type":"string"},"tagger__email":{"description":"The email address of the person creating the tag.","examples":["monalisa.octocat@example.com"],"title":"Tagger Email","type":"string"},"tagger__name":{"description":"The name of the person creating the tag.","examples":["Monalisa Octocat"],"title":"Tagger Name","type":"string"},"type":{"description":"The type of the Git object being tagged.","enum":["commit","tree","blob"],"examples":["commit"],"title":"Type","type":"string"}},"required":["owner","repo","tag","message","object","type"],"title":"CreateATagObjectRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: This API was sunset on August 30, 2024. Use GITHUB_CREATE_A_REPOSITORY_RULESET instead to create tag protection rules via repository rulesets.","name":"GITHUB_CREATE_A_TAG_PROTECTION_STATE_FOR_A_REPOSITORY","parameters":{"description":"Request schema for `CreateATagProtectionStateForARepository`","properties":{"owner":{"description":"The account owner of the repository (username or organization name). Not case sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"pattern":{"description":"Glob pattern to protect tags. Examples: `v1.*` (protects tags starting with `v1.`), `*` (protects all tags).","examples":["v1.*","releases/stable/*","*"],"title":"Pattern","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. Not case sensitive.","examples":["Hello-World","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo","pattern"],"title":"CreateATagProtectionStateForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new team in an organization, optionally with maintainers, repositories, specific privacy, notification settings, or a parent team; if `parent_team_id` is given, `privacy` must be 'closed'.","name":"GITHUB_CREATE_A_TEAM","parameters":{"description":"Request schema for creating a new team in a GitHub organization.","properties":{"description":{"description":"Team's purpose or focus.","examples":["A team for frontend development projects."],"title":"Description","type":"string"},"maintainers":{"description":"GitHub user handles of organization members to be team maintainers; users must be organization members.","examples":[["octocat","gh-user123"]],"items":{"type":"string"},"title":"Maintainers","type":"array"},"name":{"description":"Name of the new team.","examples":["The A-Team","Developers"],"title":"Name","type":"string"},"notification_setting":{"description":"Notification settings for @mentions: 'notifications_enabled' (members notified) or 'notifications_disabled' (no one notified). Default: 'notifications_enabled'.","enum":["notifications_enabled","notifications_disabled"],"examples":["notifications_enabled","notifications_disabled"],"title":"NotificationSettingEnm","type":"string"},"org":{"description":"Organization name where the team will be created (not case-sensitive).","examples":["my-github-org"],"title":"Org","type":"string"},"parent_team_id":{"description":"ID of an existing team to be the parent, creating a nested team. If provided, new team `privacy` must be 'closed'.","examples":[123,456],"title":"Parent Team Id","type":"integer"},"permission":{"default":"pull","description":"**Deprecated**. Default repository permission ('pull' for read access, 'push' for write access) for the team.","enum":["pull","push"],"examples":["pull","push"],"title":"Permission","type":"string"},"privacy":{"description":"Team privacy: 'secret' (visible to owners and members) or 'closed' (visible to all org members). Defaults to 'secret' for non-nested teams; must be 'closed' if `parent_team_id` is set.","enum":["secret","closed"],"examples":["secret","closed"],"title":"PrivacyEnm","type":"string"},"repo_names":{"description":"Repository full names (e.g., \"org-name/repo-name\") for team access; repositories must exist and be accessible to the organization.","examples":[["my-github-org/internal-project","my-github-org/another-repo"]],"items":{"type":"string"},"title":"Repo Names","type":"array"}},"required":["org","name"],"title":"CreateATeamRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a temporary private fork of the specified repository to address a security vulnerability, linking the fork to a GHSA ID that must be specifically associated with this repository; the fork may take up to 5 minutes to become accessible.","name":"GITHUB_CREATE_A_TEMPORARY_PRIVATE_FORK","parameters":{"description":"Request schema for `CreateATemporaryPrivateFork`","properties":{"ghsa_id":{"description":"Identifier for the GitHub Security Advisory (e.g., GHSA-rfv9-x7w6-39px) that the fork will address.","examples":["GHSA-rfv9-x7w6-39px","GHSA- কাদের-abc1-2def"],"title":"Ghsa Id","type":"string"},"owner":{"description":"Account owner (username or organization) of the repository; not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension; not case-sensitive.","examples":["linguist","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","ghsa_id"],"title":"CreateATemporaryPrivateForkRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new Git tree object in a repository, defining file/directory structure by specifying tree entries, optionally building on a `base_tree` SHA; all provided SHAs must be valid.","name":"GITHUB_CREATE_A_TREE","parameters":{"description":"Request schema for `CreateATree`","properties":{"base_tree":{"description":"SHA1 of an existing Git tree object to use as a base. If provided, its entries are combined with `tree` entries, where `tree` entries overwrite those from `base_tree` with the same path. Typically the SHA1 of the latest commit's tree for new branch changes. If omitted, the new tree is built from `tree` entries; files from the parent commit's tree not in `tree` are treated as deleted.","title":"Base Tree","type":"string"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive. ","title":"Repo","type":"string"},"tree":{"description":"Array of objects defining the tree structure. Each object (node) requires `path` (string), `mode` (string; e.g., '100644' file, '100755' executable, '040000' subdirectory/tree, '160000' submodule, '120000' symlink), and `type` (string: 'blob', 'tree', or 'commit'). For new/updated blobs, provide `content` (UTF-8 string). For existing objects or `tree`/`commit` types, provide `sha` (string). To delete, specify `path`, `mode`, `type`, and set `sha` to `null`.","examples":[[{"content":"Hello World!","mode":"100644","path":"new_file.txt","type":"blob"},{"content":"# Markdown Content","mode":"100644","path":"subdir/another_file.md","type":"blob"}]],"items":{"additionalProperties":true,"type":"object"},"title":"Tree","type":"array"}},"required":["owner","repo","tree"],"title":"CreateATreeRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new GitHub Projects V2 project board for the authenticated user to organize and track issues, pull requests, and notes. Note: This action uses GitHub's Projects V2 GraphQL API. The legacy Projects V1 REST API has been sunset by GitHub.","name":"GITHUB_CREATE_A_USER_PROJECT","parameters":{"description":"Request schema for `CreateAUserProject`","properties":{"body":{"description":"Optional description for the new project. Note: GitHub Projects V2 does not support a body/description field during creation, so this field is accepted but not used.","examples":["A project to track Q3 deliverables.","Planning for the next product launch.","Collection of ideas and tasks for the website redesign."],"title":"Body","type":"string"},"name":{"description":"Name/title for the new project. This will be displayed as the project board title.","examples":["My New Project","Q3 Roadmap","Website Redesign Ideas"],"title":"Name","type":"string"}},"required":["name"],"title":"CreateAUserProjectRequest","type":"object"}},"type":"function"},{"function":{"description":"Manually triggers a GitHub Actions workflow identified by `workflow_id` at a given `ref`, if the workflow is configured to accept `workflow_dispatch` events.","name":"GITHUB_CREATE_A_WORKFLOW_DISPATCH_EVENT","parameters":{"description":"Request schema for initiating a GitHub Actions workflow dispatch event.","properties":{"inputs":{"description":"JSON string containing key-value inputs for the workflow, matching `on.workflow_dispatch.inputs` definitions (max 10); uses workflow defaults if omitted. Example: '{\"actor\": \"mona\", \"environment\": \"production\"}'","examples":["{\"actor\": \"mona\", \"environment\": \"production\"}","{\"version\": \"1.2.3\", \"skip_tests\": false, \"deploy_group\": \"canary\"}"],"title":"Inputs","type":"string"},"owner":{"description":"Owner of the repository (username or organization, case-insensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"ref":{"description":"Git reference (branch or tag) for the workflow.","examples":["main","refs/heads/feature-branch","refs/tags/v1.2.0"],"title":"Ref","type":"string"},"repo":{"description":"Repository name, excluding the `.git` extension (case-insensitive).","examples":["hello-world","my-app-repository"],"title":"Repo","type":"string"},"workflow_id":{"anyOf":[{"type":"integer"},{"type":"string"}],"description":"Identifier of the workflow: numeric ID or just the filename (e.g., 'main.yml'). If a full path like '.github/workflows/main.yml' is provided, the prefix is automatically stripped.","examples":[1234567,"build-and-deploy.yml"],"title":"Workflow Id"}},"required":["owner","repo","workflow_id","ref"],"title":"CreateAWorkflowDispatchEventRequest","type":"object"}},"type":"function"},{"function":{"description":"Enables commit signature protection for a specified branch, requiring all new commits to be signed.","name":"GITHUB_CREATE_COMMIT_SIGNATURE_PROTECTION","parameters":{"description":"Request schema for `CreateCommitSignatureProtection`","properties":{"branch":{"description":"The name of the branch. Cannot contain wildcard characters. To use wildcard characters in branch names, use [the GraphQL API](https://docs.github.com/graphql).","examples":["main","develop","feature/new-login"],"title":"Branch","type":"string"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["Hello-World","linguist"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"CreateCommitSignatureProtectionRequest","type":"object"}},"type":"function"},{"function":{"description":"Enables a custom deployment protection rule for an existing environment in a repository by linking a configured GitHub App (via `integration_id`) to control deployments.","name":"GITHUB_CREATE_DEPLOYMENT_PROTECTION_RULE","parameters":{"description":"Request to enable a custom deployment protection rule on an environment.","properties":{"environment_name":{"description":"The name of the environment to which the protection rule will be applied. This name must be URL-encoded if it contains special characters (e.g., slashes `/` should be replaced with `%2F`).","examples":["production","staging%2Fuser-testing"],"title":"Environment Name","type":"string"},"integration_id":{"description":"The unique identifier of the GitHub App that provides the custom deployment protection rule. This app must be installed and configured for the repository. Required - use GITHUB_LIST_ENVIRONMENT_CUSTOM_DEPLOYMENT_RULES to find available integration IDs for your environment.","title":"Integration Id","type":"integer"},"owner":{"description":"The GitHub username or organization name that owns the repository. This name is not case sensitive.","examples":["octocat","MyOrganization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository where the environment exists. Do not include the `.git` extension. This name is not case sensitive.","examples":["my-awesome-app","BackendService"],"title":"Repo","type":"string"}},"required":["environment_name","repo","owner"],"title":"CreateACustomDeploymentProtectionRuleOnAnEnvironmentRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a draft issue item in a user-owned GitHub ProjectsV2. Use when you need to add a new draft item to track ideas or tasks in a user's project.","name":"GITHUB_CREATE_DRAFT_ITEM_FOR_USER_PROJECT","parameters":{"description":"Request schema for creating a draft item in a user-owned GitHub ProjectV2.","properties":{"body":{"description":"The body content of the draft issue item to create in the project.","examples":["This is a test draft item created via API to verify endpoint functionality","Detailed description of the draft item"],"title":"Body","type":"string"},"project_number":{"description":"The project's number.","examples":[22,1],"title":"Project Number","type":"integer"},"title":{"description":"The title of the draft issue item to create in the project.","examples":["Test Draft Item","New feature idea"],"title":"Title","type":"string"},"username":{"description":"The handle for the GitHub user account.","examples":["octocat"],"title":"Username","type":"string"}},"required":["username","project_number","title"],"title":"CreateDraftItemForUserProjectRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create chat completions using GitHub Models inference API. Use when you need to generate AI-powered text responses using models like GPT-4, Claude, or Llama through GitHub's inference endpoint.","name":"GITHUB_CREATE_INFERENCE_CHAT_COMPLETIONS","parameters":{"description":"Request model for creating chat completions using GitHub Models.","properties":{"frequency_penalty":{"description":"Influences probability of generated tokens appearing based on their cumulative frequency in the text so far. Range: [-2.0, 2.0]. Positive values decrease likelihood of repetition.","maximum":2,"minimum":-2,"title":"Frequency Penalty","type":"number"},"max_tokens":{"description":"Maximum number of tokens to generate in the completion. The total length of input tokens and generated tokens is limited by the model's context length.","exclusiveMinimum":0,"title":"Max Tokens","type":"integer"},"messages":{"description":"The collection of context messages associated with this chat completion request. Each message must have a role (assistant, developer, system, or user) and content.","items":{"description":"A single message in the chat conversation.","properties":{"content":{"description":"The text content of the message.","examples":["Say hello","Hello! How can I help you today?"],"title":"Content","type":"string"},"role":{"description":"Role of the message sender.","enum":["assistant","developer","system","user"],"examples":["user","assistant","system"],"title":"Role","type":"string"}},"required":["role","content"],"title":"ChatMessage","type":"object"},"minItems":1,"title":"Messages","type":"array"},"modalities":{"description":"List of supported modalities for this request. Supported values: text, audio.","examples":[["text"],["text","audio"]],"items":{"type":"string"},"title":"Modalities","type":"array"},"model":{"description":"ID of the specific model to use for the request. Format: {publisher}/{model_name}, e.g., openai/gpt-4o, anthropic/claude-3.5-sonnet.","examples":["openai/gpt-4o","anthropic/claude-3.5-sonnet","meta/llama-3.1-405b-instruct"],"title":"Model","type":"string"},"presence_penalty":{"description":"Influences probability of generated tokens appearing based on whether they appear in the text so far. Range: [-2.0, 2.0]. Positive values increase likelihood of new topics.","maximum":2,"minimum":-2,"title":"Presence Penalty","type":"number"},"response_format":{"additionalProperties":false,"description":"Specifies the format of the model's output.","properties":{"type":{"description":"The type of response format.","enum":["text","json_object","json_schema"],"examples":["text","json_object"],"title":"Type","type":"string"}},"required":["type"],"title":"ResponseFormat","type":"object"},"seed":{"description":"If specified, the system will make a best effort to sample deterministically, such that repeated requests with the same seed and parameters should return the same result.","title":"Seed","type":"integer"},"stop":{"description":"Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.","items":{"type":"string"},"maxItems":4,"title":"Stop","type":"array"},"stream":{"default":false,"description":"If true, partial message deltas will be sent as data-only server-sent events as they become available.","title":"Stream","type":"boolean"},"stream_options":{"additionalProperties":false,"description":"Options for streaming responses.","properties":{"include_usage":{"default":false,"description":"If true, usage information will be included in the streaming response.","title":"Include Usage","type":"boolean"}},"title":"StreamOptions","type":"object"},"temperature":{"description":"Controls the apparent creativity of generated completions. Range: [0.0, 1.0]. Lower values make output more deterministic, higher values more random.","maximum":1,"minimum":0,"title":"Temperature","type":"number"},"tool_choice":{"description":"Controls which (if any) tool is called by the model.","enum":["auto","required","none"],"examples":["auto","required","none"],"title":"Tool Choice","type":"string"},"tools":{"description":"A list of tools (functions) the model may call. The model will choose when and how to call these functions based on the conversation context.","items":{"description":"Definition of a function the model can call.","properties":{"description":{"description":"A description of what the function does.","title":"Description","type":"string"},"name":{"description":"The name of the function to be called.","examples":["get_weather","search_database"],"title":"Name","type":"string"},"parameters":{"additionalProperties":false,"description":"Schema defining function parameters.","properties":{"properties":{"additionalProperties":{"description":"Schema definition for a single property.","properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Description of the property.","title":"Description"},"items":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"description":"For array types, defines the schema of array items.","title":"Items"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The type of the property (e.g., string, number, boolean, array, object).","title":"Type"}},"title":"PropertySchema","type":"object"},"description":"Dictionary defining each parameter's schema.","title":"Properties","type":"object"},"required":{"description":"List of required parameter names.","items":{"type":"string"},"title":"Required","type":"array"},"type":{"description":"The type of the parameters object, typically 'object'.","examples":["object"],"title":"Type","type":"string"}},"required":["type","properties"],"title":"FunctionParameters","type":"object"},"type":{"const":"function","default":"function","description":"The type of tool.","title":"Type","type":"string"}},"required":["name"],"title":"FunctionDefinition","type":"object"},"title":"Tools","type":"array"},"top_p":{"description":"An alternative to temperature called nucleus sampling. Range: [0.0, 1.0]. The model considers tokens with top_p probability mass.","maximum":1,"minimum":0,"title":"Top P","type":"number"}},"required":["model","messages"],"title":"CreateInferenceChatCompletionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create inference embeddings using GitHub's AI models. Use when you need to convert text into vector representations for similarity search, clustering, or other ML tasks.","name":"GITHUB_CREATE_INFERENCE_EMBEDDINGS","parameters":{"properties":{"dimensions":{"description":"The number of dimensions the resulting output embeddings should have. Must be supported by the model (max 2048).","examples":[512,1024,1536],"title":"Dimensions","type":"integer"},"encoding_format":{"description":"Format for embeddings: 'float' (default) or 'base64'. Float returns arrays of numbers, base64 returns encoded strings.","examples":["float","base64"],"title":"Encoding Format","type":"string"},"input":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}],"description":"Input text to embed, encoded as a string or array of strings. Each string will be converted to an embedding vector.","examples":["Test text for embedding",["First text","Second text","Third text"]],"title":"Input"},"model":{"description":"ID of the specific model to use for the request. Format: {publisher}/{model_name}","examples":["openai/text-embedding-3-small","openai/text-embedding-ada-002"],"title":"Model","type":"string"},"user":{"description":"A unique identifier representing your end-user, which can help monitor and detect abuse.","examples":["user-123"],"title":"User","type":"string"}},"required":["model","input"],"title":"CreateInferenceEmbeddingsRequest","type":"object"}},"type":"function"},{"function":{"description":"Create a new issue type for a GitHub organization. Requires the authenticated user to be an organization administrator. OAuth tokens need admin:org scope.","name":"GITHUB_CREATE_ISSUE_TYPE","parameters":{"description":"Request schema for creating an issue type.","properties":{"color":{"description":"The color of the issue type.","enum":["gray","blue","green","yellow","orange","red","pink","purple"],"examples":["red","blue","green"],"title":"Color","type":"string"},"description":{"description":"A short description of the issue type.","examples":["Track bugs and issues"],"title":"Description","type":"string"},"is_enabled":{"description":"Whether the issue type is enabled at the organization level.","examples":[true,false],"title":"Is Enabled","type":"boolean"},"name":{"description":"The name of the issue type.","examples":["Bug","Feature","Task"],"title":"Name","type":"string"},"org":{"description":"The organization name (case-insensitive).","examples":["octocat"],"title":"Org","type":"string"}},"required":["org","name","is_enabled"],"title":"GITHUB_CREATE_ISSUE_TYPE_Request","type":"object"}},"type":"function"},{"function":{"description":"Generates a temporary Just-In-Time (JIT) configuration for a new self-hosted GitHub Actions runner for a repository; any specified non-default `runner_group_id` must be an existing runner group accessible by the repository.","name":"GITHUB_CREATE_JIT_RUNNER_CONFIG","parameters":{"description":"Request schema to generate a Just-In-Time (JIT) runner configuration for a repository, used by the runner for registration.","properties":{"labels":{"description":"A list of custom labels to assign to the runner. These labels help in targeting specific runners for jobs. Minimum items: 1. Maximum items: 100.","examples":[["self-hosted","linux","x64"]],"items":{"type":"string"},"title":"Labels","type":"array"},"name":{"description":"The desired name for the new self-hosted runner.","examples":["my-jit-runner-1"],"title":"Name","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the '.git' extension. This field is not case-sensitive.","examples":["hello-world"],"title":"Repo","type":"string"},"runner_group_id":{"description":"The unique identifier of the runner group to which the new runner will be assigned. Use 0 for the default group or the ID of a specific runner group.","examples":[1,0],"title":"Runner Group Id","type":"integer"},"work_folder":{"default":"_work","description":"The working directory for the runner, relative to its installation path. This is where job execution will take place.","examples":["_work_custom"],"title":"Work Folder","type":"string"}},"required":["owner","repo","name","runner_group_id","labels"],"title":"CreateJitRunnerConfigRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new environment or updates an existing one in a GitHub repository, allowing configuration of deployment protection rules such as wait timers and reviewers; ensure `environment_name` is URL-encoded if it contains special characters.","name":"GITHUB_CREATE_OR_UPDATE_AN_ENVIRONMENT","parameters":{"description":"Request schema for `CreateOrUpdateAnEnvironment`","properties":{"deployment__branch__policy__custom__branch__policies":{"description":"If true, deployment is restricted to branches matching custom name patterns; `deployment_branch_policy_protected_branches` must then be false.","examples":["true","false"],"title":"Deployment Branch Policy Custom Branch Policies","type":"boolean"},"deployment__branch__policy__protected__branches":{"description":"If true, only branches with existing protection rules can deploy; `deployment_branch_policy_custom_branch_policies` must then be false.","examples":["true","false"],"title":"Deployment Branch Policy Protected Branches","type":"boolean"},"environment_name":{"description":"Name of the environment. URL-encode if it contains special characters (e.g., '/' becomes '%2F').","examples":["production","staging%2Ffrontend","dev-test"],"title":"Environment Name","type":"string"},"owner":{"description":"The username or organization name of the repository owner (not case-sensitive).","examples":["octocat","github"],"title":"Owner","type":"string"},"prevent_self_review":{"description":"If true, prevents the user who triggered deployment from approving their own job.","examples":["true","false"],"title":"Prevent Self Review","type":"boolean"},"repo":{"description":"Name of the repository, without the `.git` extension (not case-sensitive).","examples":["hello-world","dotfiles"],"title":"Repo","type":"string"},"reviewers":{"description":"JSON string containing up to 6 users or teams allowed to review deployments. Reviewers need at least read access; one approval suffices. Each reviewer object requires `id` and `type` ('User' or 'Team'). Example: '[{\"id\": 4532, \"type\": \"User\"}]'","examples":["[{\"id\": 4532, \"type\": \"User\"}]","[{\"id\": 123, \"type\": \"Team\"}, {\"id\": 9876, \"type\": \"User\"}]"],"title":"Reviewers","type":"string"},"wait_timer":{"description":"Time in minutes to delay a job after it's triggered (0-43,200, i.e., up to 30 days).","examples":["0","30","1440"],"title":"Wait Timer","type":"integer"}},"required":["owner","repo","environment_name"],"title":"CreateOrUpdateAnEnvironmentRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates or updates an environment secret with an `encrypted_value` that was encrypted using the public key identified by `key_id` for the specified environment.","name":"GITHUB_CREATE_OR_UPDATE_AN_ENVIRONMENT_SECRET","parameters":{"description":"Request schema for `CreateOrUpdateAnEnvironmentSecret`","properties":{"encrypted_value":{"description":"Value of the secret, encrypted with LibSodium using the public key obtained from the 'Get an environment public key' GitHub API endpoint for the target environment.","examples":["yourBase64EncodedEncryptedSecretValue"],"title":"Encrypted Value","type":"string"},"environment_name":{"description":"Name of the environment. Case-sensitive; URL-encode special characters (e.g., `/` becomes `%2F`).","examples":["production","staging%2Ffeature-branch","development_env"],"title":"Environment Name","type":"string"},"key_id":{"description":"ID of the public key used for encryption, obtained from the 'Get an environment public key' GitHub API endpoint.","examples":["publicKeyIdentifierString12345"],"title":"Key Id","type":"string"},"owner":{"description":"The account owner of the repository. Not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository. Not case-sensitive.","examples":["hello-world","my-app-repository"],"title":"Repo","type":"string"},"secret_name":{"description":"Name of the secret. Case-sensitive.","examples":["DATABASE_PASSWORD","API_TOKEN","DEPLOYMENT_KEY"],"title":"Secret Name","type":"string"}},"required":["owner","repo","environment_name","secret_name","encrypted_value","key_id"],"title":"CreateOrUpdateAnEnvironmentSecretRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates or updates an organization secret for GitHub Actions, requiring its value to be pre-encrypted via LibSodium using the organization's public key.","name":"GITHUB_CREATE_OR_UPDATE_AN_ORGANIZATION_SECRET","parameters":{"description":"Request schema for creating or updating an organization secret.","properties":{"encrypted_value":{"description":"Value for the secret, pre-encrypted using LibSodium with the organization's public key (obtained from 'Get an organization public key' endpoint). This is required for both creating and updating secrets.","examples":["VGhpcyBpcyBhbiBleGFtcGxlIG9mIGFuIGVuY3J5cHRlZCB2YWx1ZQ=="],"title":"Encrypted Value","type":"string"},"key_id":{"description":"ID of the public key (from 'Get an organization public key' endpoint) used for encryption. This is required for both creating and updating secrets.","examples":["key_identifier_from_github_12345"],"title":"Key Id","type":"string"},"org":{"description":"The organization name. The name is not case sensitive.","examples":["my-github-organization"],"title":"Org","type":"string"},"secret_name":{"description":"The name of the secret.","examples":["ORGANIZATION_API_KEY"],"title":"Secret Name","type":"string"},"selected_repository_ids":{"description":"List of repository IDs that can access this secret. Required and only applicable when `visibility` is 'selected'.","examples":[[12345,67890,98761]],"items":{"type":"integer"},"title":"Selected Repository Ids","type":"array"},"visibility":{"description":"Controls which repositories can access the secret. If 'selected', `selected_repository_ids` must be provided.","enum":["all","private","selected"],"examples":["all","private","selected"],"title":"Visibility","type":"string"}},"required":["org","secret_name","encrypted_value","key_id","visibility"],"title":"CreateOrUpdateAnOrganizationSecretRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates or updates a GitHub Actions secret within a specific repository; use `encrypted_value` and `key_id` to set or change its value.","name":"GITHUB_CREATE_OR_UPDATE_A_REPOSITORY_SECRET","parameters":{"description":"Request schema for `CreateOrUpdateARepositorySecret`","properties":{"encrypted_value":{"description":"Value for the secret, pre-encrypted with the repository's public key using LibSodium (public key is obtained via 'Get a repository public key' endpoint).","examples":["ENCRYPTED_STRING_OBTAINED_VIA_LIBSODIUM..."],"title":"Encrypted Value","type":"string"},"key_id":{"description":"ID of the public key used to encrypt `encrypted_value` (obtained with the public key). Required if `encrypted_value` is provided.","examples":["1234567890ABCDEF"],"title":"Key Id","type":"string"},"owner":{"description":"The repository owner's username or organization name (case-insensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The repository name, without the `.git` extension (case-insensitive).","examples":["hello-world","my-action-repo"],"title":"Repo","type":"string"},"secret_name":{"description":"The name for the secret being created or updated. Must not start with 'GITHUB_' prefix (reserved for GitHub internal secrets).","examples":["GH_TOKEN","AWS_SECRET_KEY","NPM_TOKEN"],"title":"Secret Name","type":"string"}},"required":["owner","repo","secret_name"],"title":"CreateOrUpdateARepositorySecretRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates or updates a Codespaces secret for the authenticated user; `encrypted_value` must be encrypted with the public key (ID: `key_id`) from GitHub's 'Get public key for the authenticated user' endpoint.","name":"GITHUB_CREATE_OR_UPDATE_A_SECRET_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema for creating or updating a Codespaces secret for the authenticated user.","properties":{"encrypted_value":{"description":"Secret's value, encrypted using [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages) with the public key (see `key_id`) obtained from GitHub's 'Get public key for the authenticated user' endpoint.","title":"Encrypted Value","type":"string"},"key_id":{"description":"ID of the public key (from GitHub's 'Get public key for the authenticated user' endpoint) used to encrypt `encrypted_value`. If not provided, it will be fetched automatically.","examples":["key_id_12345"],"title":"Key Id","type":"string"},"secret_name":{"description":"The name of the secret. This name must be unique among the user's Codespaces secrets.","examples":["MY_API_KEY","DATABASE_PASSWORD"],"title":"Secret Name","type":"string"},"secret_value":{"description":"The plaintext value for your secret. This will be automatically encrypted using the user's Codespaces public key before being sent to GitHub. If you already have an encrypted value, use the encrypted_value parameter instead.","examples":["my-secret-api-key-12345"],"title":"Secret Value","type":"string"},"selected_repository_ids":{"description":"Repository IDs that can access this secret. If omitted or empty, accessible to all user's Codespaces-enabled repositories.","examples":[[12345,67890]],"items":{"type":"integer"},"title":"Selected Repository Ids","type":"array"}},"required":["secret_name"],"title":"CreateOrUpdateASecretForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates new custom property schemas or updates existing ones in bulk for a specified organization; each property definition must include `property_name` and `value_type`.","name":"GITHUB_CREATE_OR_UPDATE_CUSTOM_PROPERTIES_FOR_AN_ORG","parameters":{"description":"Request schema for `GithubCreateOrUpdateCustomPropertiesForAnOrg`","properties":{"org":{"description":"The case-insensitive organization name.","examples":["my-organization","github"],"title":"Org","type":"string"},"properties":{"description":"Definitions for custom properties as a JSON string. Each must include a unique `property_name` (max 75 chars, no spaces) and `value_type`. Optional: `description`, `required`, `default_value`, `allowed_values` (for 'single_select' type).","examples":["[{\"property_name\": \"project-priority\", \"value_type\": \"single_select\", \"description\": \"Priority of the project\", \"required\": true, \"allowed_values\": [\"High\", \"Medium\", \"Low\"]}, {\"property_name\": \"environment\", \"value_type\": \"string\", \"description\": \"Deployment environment\"}]"],"title":"Properties","type":"string"}},"required":["org","properties"],"title":"CreateOrUpdateCustomPropertiesForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new custom property (name must be unique for creation) or updates an existing one for an organization to define metadata for its repositories.","name":"GITHUB_CREATE_OR_UPDATE_CUSTOM_PROPERTY_ORG","parameters":{"description":"Request to create or update a custom metadata property for an organization's repositories.","properties":{"allowed_values":{"description":"Ordered list of allowed values (up to 200). Required and non-empty if `value_type` is `single_select` or `multi_select`.","examples":[["pending","active","completed","archived"]],"items":{"type":"string"},"title":"Allowed Values","type":"array"},"custom_property_name":{"description":"Name of the custom property (case-sensitive).","examples":["project-status"],"title":"Custom Property Name","type":"string"},"default_value":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}],"description":"Default value if property isn't set. For `single_select` type, must be one of `allowed_values`. Can be a string for single values or an array for multi_select.","examples":["pending","active"],"title":"Default Value"},"description":{"description":"Explanation of the custom property's purpose.","examples":["Tracks the current status of a project."],"title":"Description","type":"string"},"org":{"description":"The organization's unique identifier (case-insensitive).","examples":["my-org-name"],"title":"Org","type":"string"},"required":{"description":"If true, property must be set for all repositories and `default_value` is mandatory.","title":"Required","type":"boolean"},"value_type":{"description":"Data type of the custom property. Can be 'string' (free text), 'single_select' (single choice from list), 'multi_select' (multiple choices from list), 'true_false' (boolean), or 'url' (URL format).","enum":["string","single_select","multi_select","true_false","url"],"examples":["string","single_select","multi_select","true_false","url"],"title":"Value Type","type":"string"},"values_editable_by":{"description":"Who can edit the values of the property. Can be 'org_actors' (organization actors only) or 'org_and_repo_actors' (organization and repository actors).","enum":["org_actors","org_and_repo_actors"],"examples":["org_actors","org_and_repo_actors"],"title":"ValuesEditableByEnm","type":"string"}},"required":["org","custom_property_name","value_type"],"title":"CreateOrUpdateCustomPropertyOrgRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new file or updates an existing file in a GitHub repository; SHA can be provided to validate file updates, automatically fetched if not provided.","name":"GITHUB_CREATE_OR_UPDATE_FILE_CONTENTS","parameters":{"description":"Request schema for creating or updating a file's contents in a GitHub repository.","properties":{"author__date":{"description":"Author's timestamp (ISO 8601 format). Defaults to committer's date if author details are provided but date is not.","examples":["2023-10-26T11:30:00Z"],"title":"Author Date","type":"string"},"author__email":{"description":"Author's email. If specified, `author_name` is also required. Defaults to committer details; if all committer/author details omitted, GitHub uses authenticated user.","examples":["jane.smith@example.com"],"title":"Author Email","type":"string"},"author__name":{"description":"Author's name. If specified, `author_email` is also required. Defaults to committer details; if all committer/author details omitted, GitHub uses authenticated user.","examples":["Jane Smith"],"title":"Author Name","type":"string"},"branch":{"description":"The branch name. Defaults to the repository's default branch if omitted. If a non-existent branch is specified, the action will automatically fall back to the repository's default branch. For empty repositories, omitting this parameter is recommended to let GitHub initialize with the repository's configured default branch.","examples":["main","develop"],"title":"Branch","type":"string"},"committer__date":{"description":"Committer's commit timestamp (ISO 8601 format). Defaults to current time if committer details are provided but date is not.","examples":["2023-10-26T12:00:00Z"],"title":"Committer Date","type":"string"},"committer__email":{"description":"Committer's email. If specified, `committer_name` is also required. GitHub uses authenticated user if all committer/author details omitted.","examples":["john.doe@example.com"],"title":"Committer Email","type":"string"},"committer__name":{"description":"Committer's name. If specified, `committer_email` is also required. GitHub uses authenticated user if all committer/author details omitted.","examples":["John Doe"],"title":"Committer Name","type":"string"},"content":{"description":"The new file content. Can be provided as plain text (will be automatically encoded to Base64) or as Base64-encoded text. GitHub API requires Base64 encoding, which this action handles automatically.","examples":["Hello World","SGVsbG8gV29ybGQ="],"title":"Content","type":"string"},"message":{"description":"The commit message for this file creation or update.","examples":["feat: add new documentation","docs: update README"],"title":"Message","type":"string"},"owner":{"description":"The account owner of the repository (not case sensitive).","examples":["octocat"],"title":"Owner","type":"string"},"path":{"description":"The full path to the file in the repository, including the filename and extension. Do not include leading slashes.","examples":["README.md","src/main.js"],"title":"Path","type":"string"},"repo":{"description":"The name of the repository (not case sensitive, without the `.git` extension).","examples":["Spoon-Knife"],"title":"Repo","type":"string"},"sha":{"description":"The blob SHA of the file being replaced. Automatically fetched if not provided. If a 409 conflict occurs (SHA mismatch due to concurrent modifications), the action will automatically retry up to 5 times with exponential backoff and jitter.","examples":["aa218f56b14c9653891f9e74264a383fa43fefbd"],"title":"Sha","type":"string"}},"required":["owner","repo","path","message","content"],"title":"CreateOrUpdateFileContentsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to enable or update GitHub Pages configuration for a repository. Use when setting up GitHub Pages for static site deployment or modifying Pages settings like custom domains and HTTPS enforcement.","name":"GITHUB_CREATE_OR_UPDATE_GITHUB_PAGES_SITE","parameters":{"description":"Request model for creating or updating a GitHub Pages site.","properties":{"build_type":{"default":"legacy","description":"Build process type: 'legacy' for traditional GitHub Pages build from a branch, 'workflow' for GitHub Actions. When 'workflow', source_branch and source_path are ignored.","enum":["legacy","workflow"],"examples":["legacy","workflow"],"title":"Build Type","type":"string"},"cname":{"description":"Custom domain for the Pages site (e.g., 'example.com'). Set to null to remove custom domain. Only used during updates.","examples":["www.example.com","docs.example.com"],"title":"Cname","type":"string"},"https_enforced":{"description":"Whether to enforce HTTPS for the Pages site. Only used during updates.","examples":[true,false],"title":"Https Enforced","type":"boolean"},"owner":{"description":"The account owner of the repository (username or organization). Not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the .git extension. Not case-sensitive.","examples":["Hello-World","docs-site"],"title":"Repo","type":"string"},"source_branch":{"description":"The repository branch to use for GitHub Pages source (e.g., 'main', 'gh-pages'). Required if build_type is 'legacy'. Ignored if build_type is 'workflow'.","examples":["main","gh-pages","master"],"title":"Source Branch","type":"string"},"source_path":{"default":"/","description":"The directory path within source_branch containing the site files: '/' for root or '/docs' for docs folder. Ignored if build_type is 'workflow'.","enum":["/","/docs"],"examples":["/","/docs"],"title":"Source Path","type":"string"}},"required":["owner","repo"],"title":"CreateOrUpdateGithubPagesSiteRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates or updates a Dependabot secret in a repository using an `encrypted_value` (pre-encrypted with LibSodium using the repository's Dependabot public key) and its corresponding `key_id`. This action allows you to securely manage secrets for a given repository, ensuring that sensitive data remains protected during the update process. By providing the encrypted value alongside the key ID, you can seamlessly maintain the necessary credentials for your repository's operations.","name":"GITHUB_CREATE_OR_UPDATE_REPO_SECRET_WITH_ENCRYPTED_VALUE","parameters":{"description":"Request schema for `CreateOrUpdateRepoSecretWithEncryptedValue`","properties":{"encrypted_value":{"description":"Value for your secret. This value must be encrypted with LibSodium, using the public key retrieved from the GitHub API's 'Get a repository public key' endpoint for Dependabot secrets. The resulting encrypted string is typically Base64 encoded.","title":"Encrypted Value","type":"string"},"key_id":{"description":"The ID of the public key that was used to encrypt the secret value. This ID is retrieved from GitHub along with the public key via the 'Get a repository public key' endpoint for Dependabot secrets. If not provided or if an outdated key_id is used, the action will automatically fetch the latest public key from GitHub and retry with the current key_id.","title":"Key Id","type":"string"},"owner":{"description":"The account owner of the repository (e.g., a GitHub username or organization name). This name is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["hello-world","my-awesome-app"],"title":"Repo","type":"string"},"secret_name":{"description":"The name of the Dependabot secret to create or update.","examples":["NPM_TOKEN","DOCKER_REGISTRY_PASSWORD"],"title":"Secret Name","type":"string"}},"required":["owner","repo","secret_name"],"title":"CreateOrUpdateRepoSecretWithEncryptedValueRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates an emoji reaction for a commit comment; if the user has already reacted with the same content, details of the existing reaction are returned.","name":"GITHUB_CREATE_REACTION_FOR_A_COMMIT_COMMENT","parameters":{"description":"Request schema for `CreateReactionForACommitComment`","properties":{"comment_id":{"description":"Unique ID of the commit comment.","examples":["12345","8675309"],"title":"Comment Id","type":"integer"},"content":{"description":"The [reaction type](https://docs.github.com/rest/reactions/reactions#about-reactions) to add to the commit comment.","enum":["+1","-1","laugh","confused","heart","hooray","rocket","eyes"],"examples":["+1","-1","laugh","confused","heart","hooray","rocket","eyes"],"title":"Content","type":"string"},"owner":{"description":"Username of the repository owner. Not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension. Not case-sensitive.","examples":["Spoon-Knife","linguist"],"title":"Repo","type":"string"}},"required":["owner","repo","comment_id","content"],"title":"CreateReactionForACommitCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a reaction for a specified issue within a GitHub repository.","name":"GITHUB_CREATE_REACTION_FOR_AN_ISSUE","parameters":{"description":"Request schema for `CreateReactionForAnIssue`","properties":{"content":{"description":"The reaction type to add to the issue. See the [GitHub documentation on reactions](https://docs.github.com/rest/reactions/reactions#about-reactions) for full details.","enum":["+1","-1","laugh","confused","heart","hooray","rocket","eyes"],"examples":["+1","-1","laugh","confused","heart","hooray","rocket","eyes"],"title":"Content","type":"string"},"issue_number":{"description":"The number that identifies the issue.","examples":[1347],"title":"Issue Number","type":"integer"},"owner":{"description":"The account owner of the repository. The name is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","issue_number","content"],"title":"CreateReactionForAnIssueRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a reaction for a specific comment on an issue within a GitHub repository.","name":"GITHUB_CREATE_REACTION_FOR_AN_ISSUE_COMMENT","parameters":{"description":"Request model to create a reaction for an issue comment.","properties":{"comment_id":{"description":"Unique identifier of the issue comment.","examples":[12345,98765],"title":"Comment Id","type":"integer"},"content":{"description":"Reaction content to add to the issue comment. Must be one of the values from `ContentEnm`.","enum":["+1","-1","laugh","confused","heart","hooray","rocket","eyes"],"examples":["+1","heart","rocket"],"title":"Content","type":"string"},"owner":{"description":"Username of the account that owns the repository (not case-sensitive).","examples":["octocat","actions"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (not case-sensitive).","examples":["Spoon-Knife","runner"],"title":"Repo","type":"string"}},"required":["owner","repo","comment_id","content"],"title":"CreateReactionForAnIssueCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a specified reaction to a pull request review comment within a GitHub repository.","name":"GITHUB_CREATE_REACTION_FOR_A_PULL_REQUEST_REVIEW_COMMENT","parameters":{"description":"Request schema for `CreateReactionForAPullRequestReviewComment`","properties":{"comment_id":{"description":"The unique identifier of the pull request review comment to which the reaction will be added.","title":"Comment Id","type":"integer"},"content":{"description":"The reaction to add. See the [GitHub API documentation on reactions](https://docs.github.com/rest/reactions/reactions#about-reactions) for more context on reactions.","enum":["+1","-1","laugh","confused","heart","hooray","rocket","eyes"],"examples":["+1","-1","laugh","confused","heart","hooray","rocket","eyes"],"title":"Content","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is case-insensitive.","title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is case-insensitive.","title":"Repo","type":"string"}},"required":["owner","repo","comment_id","content"],"title":"CreateReactionForAPullRequestReviewCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates an emoji reaction for a specific, existing release in a GitHub repository.","name":"GITHUB_CREATE_REACTION_FOR_A_RELEASE","parameters":{"description":"Request schema for creating a reaction to a specific release within a repository.","properties":{"content":{"description":"The type of reaction to add to the release.","enum":["+1","laugh","heart","hooray","rocket","eyes"],"examples":["+1","laugh","heart","hooray","rocket","eyes"],"title":"Content","type":"string"},"owner":{"description":"The username of the account that owns the repository. This field is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"release_id":{"description":"The unique identifier (ID) of the release to add a reaction to.","examples":[12345],"title":"Release Id","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","release_id","content"],"title":"CreateReactionForAReleaseRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a reaction for a team discussion within a GitHub organization.","name":"GITHUB_CREATE_REACTION_FOR_A_TEAM_DISCUSSION","parameters":{"description":"Request schema for `CreateReactionForATeamDiscussion`","properties":{"content":{"description":"The reaction content to add to the team discussion.","enum":["+1","-1","laugh","confused","heart","hooray","rocket","eyes"],"examples":["+1","-1","laugh","confused","heart","hooray","rocket","eyes"],"title":"Content","type":"string"},"discussion_number":{"description":"The unique number identifying the team discussion.","examples":[42],"title":"Discussion Number","type":"integer"},"org":{"description":"The name of the GitHub organization. This field is not case-sensitive.","examples":["octo-org"],"title":"Org","type":"string"},"team_slug":{"description":"The slug (URL-friendly version) of the team name.","examples":["justice-league"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","discussion_number","content"],"title":"CreateReactionForATeamDiscussionRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a reaction to a team discussion comment, requiring the specified organization, team, discussion, and comment to exist.","name":"GITHUB_CREATE_REACTION_FOR_A_TEAM_DISCUSSION_COMMENT","parameters":{"description":"Defines the request parameters for creating a reaction on a team discussion comment.","properties":{"comment_number":{"description":"The unique number identifying the comment within the discussion.","examples":[101],"title":"Comment Number","type":"integer"},"content":{"description":"The type of reaction to add to the team discussion comment. For more information on reaction types, see the [GitHub API documentation on reactions](https://docs.github.com/rest/reactions/reactions#about-reactions).","enum":["+1","-1","laugh","confused","heart","hooray","rocket","eyes"],"examples":["+1","-1","laugh","confused","heart","hooray","rocket","eyes"],"title":"Content","type":"string"},"discussion_number":{"description":"The unique number identifying the team discussion.","examples":[42],"title":"Discussion Number","type":"integer"},"org":{"description":"The organization name on GitHub. This name is not case sensitive.","examples":["octo-org"],"title":"Org","type":"string"},"team_slug":{"description":"The slug (URL-friendly version) of the team name.","examples":["justice-league"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","discussion_number","comment_number","content"],"title":"CreateReactionForATeamDiscussionCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to start a new GitHub sponsorship or reactivate a past sponsorship using GraphQL. Use when you need to sponsor a maintainer through GitHub Sponsors with a specified amount and privacy level.","name":"GITHUB_CREATE_SPONSORSHIP","parameters":{"description":"Request schema for creating a GitHub sponsorship","properties":{"amount":{"description":"The amount to sponsor in cents (USD). For example, 500 cents equals $5.00.","examples":[500,1000,5000],"minimum":1,"title":"Amount","type":"integer"},"client_mutation_id":{"description":"A unique identifier for the client performing the mutation. Used to ensure idempotency of mutations.","examples":["create-sponsorship-12345","mutation-xyz"],"title":"Client Mutation Id","type":"string"},"is_recurring":{"description":"Whether the sponsorship is recurring (true) or one-time (false). Note: one-time payments currently have a known bug in the GitHub API and may not work as expected.","title":"Is Recurring","type":"boolean"},"privacy_level":{"description":"Privacy level for GitHub sponsorships","enum":["PRIVATE","PUBLIC"],"title":"SponsorshipPrivacy","type":"string"},"sponsor_id":{"description":"The global node ID of the user or organization acting as sponsor (e.g., 'U_kgDOABCDEF'). Required if sponsor_login is not provided.","examples":["U_kgDOABCDEF","O_kgDOGHIJKL"],"title":"Sponsor Id","type":"string"},"sponsor_login":{"description":"The username of the sponsoring user or organization. Required if sponsor_id is not provided.","examples":["github","octocat"],"title":"Sponsor Login","type":"string"},"sponsorable_id":{"description":"The global node ID of the user or organization to sponsor (e.g., 'U_kgDOMNOPQR'). Required if sponsorable_login is not provided.","examples":["U_kgDOMNOPQR","O_kgDOSTUVWX"],"title":"Sponsorable Id","type":"string"},"sponsorable_login":{"description":"The username of the user or organization to sponsor. Required if sponsorable_id is not provided.","examples":["octocat","rails","sindresorhus"],"title":"Sponsorable Login","type":"string"}},"required":["amount"],"title":"CreateSponsorshipRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create a new payment tier for your GitHub Sponsors profile using GraphQL. Use when you need to add a new sponsorship tier with a specific monthly price and description. The amount is specified in dollars and will be converted to cents automatically.","name":"GITHUB_CREATE_SPONSORS_TIER","parameters":{"description":"Request schema for creating a new GitHub Sponsors tier","properties":{"amount":{"description":"The monthly sponsorship amount in dollars (USD). This value will be converted to cents internally (e.g., 5 for $5/month becomes 500 cents, 500 for $500/month becomes 50000 cents). Minimum is $1.","examples":[5,10,25,50,100,500],"minimum":1,"title":"Amount","type":"integer"},"client_mutation_id":{"description":"A unique identifier for the client performing the mutation. Used to ensure idempotency of mutations and track request origin.","examples":["create-tier-12345","mutation-abc"],"title":"Client Mutation Id","type":"string"},"description":{"description":"A detailed description of what this sponsorship tier provides. Explain the benefits and perks sponsors will receive at this level. This is a required field.","examples":["Get access to exclusive content and updates","Priority support and early access to new features"],"title":"Description","type":"string"},"sponsorable_id":{"description":"The global node ID of the user or organization who will receive sponsorships for this tier (e.g., 'U_kgDOABCDEF' for users, 'O_kgDOGHIJKL' for organizations). Use the get_viewer_graphql_id action to fetch your own ID.","examples":["U_kgDOCNqc1g","O_kgDOGHIJKL"],"title":"Sponsorable Id","type":"string"}},"required":["sponsorable_id","amount","description"],"title":"CreateSponsorsTierRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates or updates a Dependabot organization secret, requiring the secret value to be pre-encrypted with LibSodium using the organization's public key obtained from the 'Get an organization public key' endpoint.","name":"GITHUB_CREATE_UPDATE_ORG_SECRET_WITH_LIB_SODIUM","parameters":{"description":"Request schema for creating or updating an organization secret with LibSodium encryption.","properties":{"encrypted_value":{"description":"Value of the secret, encrypted using [LibSodium](https://libsodium.gitbook.io/doc/bindings_for_other_languages) and the organization's Dependabot public key (obtained from the 'Get an organization public key for Dependabot' endpoint: GET /orgs/{org}/dependabot/secrets/public-key). Required to create or update the secret's value.","examples":["vZgX2lZ8v6k6gJ1x7L4w..."],"title":"Encrypted Value","type":"string"},"key_id":{"description":"ID of the Dependabot public key used for encryption (retrieved from 'Get an organization public key for Dependabot' endpoint: GET /orgs/{org}/dependabot/secrets/public-key). Required if `encrypted_value` is provided.","examples":["1234567890"],"title":"Key Id","type":"string"},"org":{"description":"The organization name (case-insensitive).","examples":["octo-org"],"title":"Org","type":"string"},"secret_name":{"description":"The secret name (case-insensitive and unique within the organization).","examples":["MY_API_TOKEN"],"title":"Secret Name","type":"string"},"selected_repository_ids":{"description":"List of repository IDs that can access the secret; required and used only when `visibility` is `selected`.","examples":[[1296269,1296270]],"items":{"type":"integer"},"title":"Selected Repository Ids","type":"array"},"visibility":{"description":"Secret visibility: `all` (all repositories), `private` (private repositories), or `selected` (specific repositories designated by `selected_repository_ids`).","enum":["all","private","selected"],"title":"Visibility","type":"string"}},"required":["org","secret_name","visibility"],"title":"CreateUpdateOrgSecretWithLibSodiumRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create a new user list on GitHub. Use when you need to organize and group GitHub users for easier tracking and management.","name":"GITHUB_CREATE_USER_LIST","parameters":{"description":"Request schema for creating a new user list via GitHub GraphQL API.","properties":{"clientMutationId":{"description":"A unique identifier for the client performing the mutation. This can be used to track the request.","examples":["unique-client-id-123"],"title":"Client Mutation Id","type":"string"},"description":{"description":"A description for the user list to provide context about its purpose.","examples":["A list of contributors I follow regularly","Members of my development team"],"title":"Description","type":"string"},"name":{"description":"The name of the user list to create.","examples":["My Favorite Contributors","Team Members"],"title":"Name","type":"string"}},"required":["name"],"title":"CreateUserListRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create a new view in a user-owned GitHub project (Projects V2). Use when you need to add a customized view with specific layout, filters, and visible fields to organize project items. Note: This action works with GitHub Projects V2. The view can be configured with different layouts (table, board, roadmap) and optional filters. The visible_fields parameter is not applicable to roadmap layouts.","name":"GITHUB_CREATE_VIEW_FOR_USER_PROJECT","parameters":{"description":"Request schema for creating a view in a user-owned GitHub project.","properties":{"filter":{"description":"The filter query for the view. See GitHub's filtering projects documentation for syntax details.","examples":["is:issue is:open","assignee:@me","status:todo,in-progress"],"title":"Filter","type":"string"},"layout":{"description":"The layout type for the view. Options are 'table', 'board', or 'roadmap'.","enum":["table","board","roadmap"],"examples":["board","table","roadmap"],"title":"Layout","type":"string"},"name":{"description":"The name of the view to be created.","examples":["Sprint Board","Backlog View","Roadmap 2024"],"title":"Name","type":"string"},"project_number":{"description":"The project's number as displayed in the project URL.","examples":[1,22,100],"title":"Project Number","type":"integer"},"user_id":{"description":"The unique identifier of the user who owns the project. This can be the username or user login.","examples":["octocat","composio-dev"],"title":"User Id","type":"string"},"visible_fields":{"description":"List of field IDs that should be visible in the view. Not applicable to roadmap layout. If not provided, default visible fields will be used.","examples":[[123,456,789],[1,2,3]],"items":{"type":"integer"},"title":"Visible Fields","type":"array"}},"required":["user_id","project_number","name","layout"],"title":"CreateViewForUserProjectRequest","type":"object"}},"type":"function"},{"function":{"description":"Declines a specific, pending repository invitation for the authenticated user, identified by its `invitation_id`.","name":"GITHUB_DECLINE_A_REPOSITORY_INVITATION","parameters":{"description":"Input parameters to decline a repository invitation.","properties":{"invitation_id":{"description":"Identifier of the pending repository invitation to decline; obtained by listing the user's pending invitations.","examples":["123","456","789"],"title":"Invitation Id","type":"integer"}},"required":["invitation_id"],"title":"DeclineARepositoryInvitationRequest","type":"object"}},"type":"function"},{"function":{"description":"Removes all user, team, and app-based access restrictions from a protected branch.","name":"GITHUB_DELETE_ACCESS_RESTRICTIONS","parameters":{"description":"Request schema for `DeleteAccessRestrictions`","properties":{"branch":{"description":"The name of the branch from which to remove access restrictions. Wildcard characters are not supported; for wildcard usage, refer to the GitHub GraphQL API.","examples":["main","develop"],"title":"Branch","type":"string"},"owner":{"description":"The account owner of the repository (username or organization name). This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"DeleteAccessRestrictionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Removes admin enforcement from a protected branch (branch name cannot contain wildcard characters) in a repository.","name":"GITHUB_DELETE_ADMIN_BRANCH_PROTECTION","parameters":{"description":"Request schema for `DeleteAdminBranchProtection`","properties":{"branch":{"description":"The name of the branch. Cannot contain wildcard characters.","title":"Branch","type":"string"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive. ","title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"DeleteAdminBranchProtectionRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a file by path from a GitHub repository. The file's blob SHA is automatically fetched if not provided.","name":"GITHUB_DELETE_A_FILE","parameters":{"description":"Request schema for deleting a file from a GitHub repository.","properties":{"author__email":{"description":"Email address of the commit author for the deletion; defaults to the committer's email.","examples":["mona@example.com"],"title":"Author Email","type":"string"},"author__name":{"description":"Name of the commit author for the deletion; defaults to the committer's name.","examples":["Mona Lisa"],"title":"Author Name","type":"string"},"branch":{"description":"Branch from which the file will be deleted; defaults to the repository's default branch.","examples":["main","develop"],"title":"Branch","type":"string"},"committer__email":{"description":"Email address of the user committing the deletion; defaults to the authenticated user's email.","examples":["mona@example.com"],"title":"Committer Email","type":"string"},"committer__name":{"description":"Name of the user committing the deletion; defaults to the authenticated user's name.","examples":["Mona Lisa"],"title":"Committer Name","type":"string"},"message":{"description":"Commit message for the deletion.","examples":["Delete old script"],"title":"Message","type":"string"},"owner":{"description":"The account owner of the repository (not case-sensitive).","examples":["octocat"],"title":"Owner","type":"string"},"path":{"description":"Path to the file to be deleted within the repository.","examples":["notes/important.txt"],"title":"Path","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension (not case-sensitive).","examples":["Hello-World"],"title":"Repo","type":"string"},"sha":{"description":"Blob SHA of the file being deleted. Optional - if not provided, it will be automatically fetched from the file at the given path.","examples":["d670460b4b4aece5915caf5c68d12f560a9fe3e4"],"title":"Sha","type":"string"}},"required":["owner","repo","path","message"],"title":"DeleteAFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes an existing package version associated with the authenticated user.","name":"GITHUB_DELETE_A_PACKAGE_VERSION_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema for `DeleteAPackageVersionForTheAuthenticatedUser`","properties":{"package_name":{"description":"The unique name of the package.","examples":["my-company-package","internal-tool"],"title":"Package Name","type":"string"},"package_type":{"description":"Type of the package. E.g., `maven` for GitHub Gradle registry, `container` for `ghcr.io` images. The `docker` type covers images from `docker.pkg.github.com` (including migrated ones).","examples":["npm","maven","rubygems","docker","nuget","container"],"title":"Package Type","type":"string"},"package_version_id":{"description":"The unique numeric identifier of the specific package version to be deleted.","examples":["102345","7890"],"title":"Package Version Id","type":"integer"}},"required":["package_type","package_name","package_version_id"],"title":"DeleteAPackageVersionForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes an OAuth application grant for a user, which revokes ALL OAuth tokens and their associated authorizations for the application. This endpoint is only accessible to OAuth App owners and requires Basic Authentication using the OAuth App's client_id and client_secret.","name":"GITHUB_DELETE_APP_AUTHORIZATION","parameters":{"description":"Request schema for `DeleteAppAuthorization`","properties":{"access_token":{"description":"An OAuth access token that was issued by your OAuth App (specified by client_id). Providing this token will revoke ALL tokens for that user's grant, not just this single token.","examples":["gho_aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890"],"title":"Access Token","type":"string"},"client_id":{"description":"The client ID of your OAuth App. This must be YOUR OAuth App that you own, as this endpoint requires the app's client_secret for authentication.","examples":["Iv1.1234567890abcdef"],"title":"Client Id","type":"string"}},"required":["client_id","access_token"],"title":"DeleteAppAuthorizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Revokes a single OAuth access token for an OAuth App or GitHub App with OAuth authorization. IMPORTANT: This endpoint requires Basic Authentication using the OAuth App's client_id as username and client_secret as password. It CANNOT be called with personal access tokens, GitHub App installation tokens, or any other token type. You must be the OAuth App owner to use this endpoint.","name":"GITHUB_DELETE_APP_TOKEN","parameters":{"description":"Request schema for `DeleteAppToken`","properties":{"access_token":{"description":"The OAuth access token to be revoked. Must be a token issued by this OAuth App.","examples":["gho_abcdef1234567890abcdef1234567890abcdef"],"title":"Access Token","type":"string"},"client_id":{"description":"The client ID of the OAuth App or GitHub App with OAuth authorization.","examples":["Iv1.1234567890abcdef"],"title":"Client Id","type":"string"}},"required":["client_id","access_token"],"title":"DeleteAppTokenRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a Git reference from a repository; 'ref' must be fully qualified (e.g., 'refs/heads/branch' or 'refs/tags/tag').","name":"GITHUB_DELETE_A_REFERENCE","parameters":{"description":"Request schema for deleting a Git reference from a repository.","properties":{"owner":{"description":"The account owner of the repository. This name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"ref":{"description":"The Git reference to delete. Accepts multiple formats: 'refs/heads/branch-name', 'heads/branch-name', or just 'branch-name' for branches; 'refs/tags/tag-name' or 'tags/tag-name' for tags. Simple branch names are automatically prefixed with 'heads/'.","examples":["heads/feature-branch","tags/v1.0.1","my-branch"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","ref"],"title":"DeleteAReferenceRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes a specific release, its assets, and potentially its associated Git tag from a repository.","name":"GITHUB_DELETE_A_RELEASE","parameters":{"description":"Request schema for `DeleteARelease` action, specifying the repository and release to be deleted.","properties":{"owner":{"description":"The account owner of the repository, typically a username or organization name. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"release_id":{"description":"The unique numerical identifier (ID) of the release to be deleted.","examples":["1234567","8765432"],"title":"Release Id","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Hello-World","roadmap"],"title":"Repo","type":"string"}},"required":["owner","repo","release_id"],"title":"DeleteAReleaseRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific release asset from a GitHub repository; this action is idempotent.","name":"GITHUB_DELETE_A_RELEASE_ASSET","parameters":{"description":"Request schema for `DeleteAReleaseAsset`","properties":{"asset_id":{"description":"The unique identifier of the release asset to delete.","examples":[12345,67890],"title":"Asset Id","type":"integer"},"owner":{"description":"The account owner of the repository (username or organization); not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension; not case-sensitive.","examples":["hello-world","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","asset_id"],"title":"DeleteAReleaseAssetRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a reaction from a GitHub release, provided the repository, release, and reaction exist.","name":"GITHUB_DELETE_A_RELEASE_REACTION","parameters":{"description":"Request schema for deleting a reaction from a GitHub release.","properties":{"owner":{"description":"The account owner of the repository (case-insensitive).","examples":["octocat"],"title":"Owner","type":"string"},"reaction_id":{"description":"Unique identifier of the reaction to delete.","examples":["98765432"],"title":"Reaction Id","type":"integer"},"release_id":{"description":"Unique identifier of the release.","examples":["12345678"],"title":"Release Id","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension (case-insensitive).","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","release_id","reaction_id"],"title":"DeleteAReleaseReactionRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes the specified repository; this is a destructive, irreversible action that requires admin privileges for the repository.","name":"GITHUB_DELETE_A_REPOSITORY","parameters":{"description":"Request schema for `DeleteARepository`","properties":{"owner":{"description":"The account owner of the repository (user or organization); case-insensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension; case-insensitive.","examples":["hello-world","my-private-repo"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"DeleteARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes an active repository invitation, permanently revoking a user's access to collaborate on the specified repository.","name":"GITHUB_DELETE_A_REPOSITORY_INVITATION","parameters":{"description":"Request schema for `DeleteARepositoryInvitation` action, specifying the repository and invitation to be deleted.","properties":{"invitation_id":{"description":"The unique numerical identifier of the repository invitation to be deleted.","examples":["42"],"title":"Invitation Id","type":"integer"},"owner":{"description":"The username or organization name that owns the repository. This field is case-insensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is case-insensitive. ","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo","invitation_id"],"title":"DeleteARepositoryInvitationRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes a repository ruleset.","name":"GITHUB_DELETE_A_REPOSITORY_RULESET","parameters":{"description":"Request schema for `DeleteARepositoryRuleset`","properties":{"owner":{"description":"The username of the account that owns the repository. This field is not case-sensitive.","examples":["octocat","openai"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world","gpt-3"],"title":"Repo","type":"string"},"ruleset_id":{"description":"The unique identifier (ID) of the ruleset to be deleted.","examples":["5","42"],"title":"Ruleset Id","type":"integer"}},"required":["owner","repo","ruleset_id"],"title":"DeleteARepositoryRulesetRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a named GitHub Actions secret from a specified repository; this operation is destructive and idempotent, and requires the repository to exist.","name":"GITHUB_DELETE_A_REPOSITORY_SECRET","parameters":{"description":"Request schema for `DeleteARepositorySecret`","properties":{"owner":{"description":"The account owner of the repository. This is typically the username or organization name and is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world"],"title":"Repo","type":"string"},"secret_name":{"description":"The name of the secret to delete. This refers to a secret used in GitHub Actions.","examples":["MY_API_TOKEN"],"title":"Secret Name","type":"string"}},"required":["owner","repo","secret_name"],"title":"DeleteARepositorySecretRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes the authenticated user's subscription to a specified repository if it exists, effectively 'unwatching' it.","name":"GITHUB_DELETE_A_REPOSITORY_SUBSCRIPTION","parameters":{"description":"Request schema for `DeleteARepositorySubscription`.","properties":{"owner":{"description":"The account owner of the repository (e.g., a GitHub username or organization name). This name is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"DeleteARepositorySubscriptionRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a named variable (e.g., for GitHub Actions workflows) from a repository; the repository and the variable must already exist.","name":"GITHUB_DELETE_A_REPOSITORY_VARIABLE","parameters":{"description":"Request schema for deleting a variable from a repository.","properties":{"name":{"description":"The name of the repository variable to delete.","examples":["CI_VARIABLE_NAME","DEPLOYMENT_SETTING"],"title":"Name","type":"string"},"owner":{"description":"The account owner of the repository. This name is not case-sensitive.","examples":["octocat","my-github-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["hello-world","my-repo-name"],"title":"Repo","type":"string"}},"required":["owner","repo","name"],"title":"DeleteARepositoryVariableRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific webhook from a repository.","name":"GITHUB_DELETE_A_REPOSITORY_WEBHOOK","parameters":{"description":"Specifies the repository and webhook to be deleted.","properties":{"hook_id":{"description":"The unique identifier of the webhook. This ID can be found in the `X-GitHub-Hook-ID` header of a webhook delivery.","examples":[12345678],"title":"Hook Id","type":"integer"},"owner":{"description":"The account owner of the repository. This name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","hook_id"],"title":"DeleteARepositoryWebhookRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific pull request review comment.","name":"GITHUB_DELETE_A_REVIEW_COMMENT_FOR_A_PULL_REQUEST","parameters":{"description":"Request schema for `DeleteAReviewCommentForAPullRequest`","properties":{"comment_id":{"description":"The unique numerical identifier of the pull request review comment to be deleted.","examples":["102345","9876"],"title":"Comment Id","type":"integer"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","my-awesome-repo"],"title":"Repo","type":"string"}},"required":["owner","repo","comment_id"],"title":"DeleteAReviewCommentForAPullRequestRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a GitHub artifact by its ID within a repository, typically resulting in an empty response (HTTP 204 No Content) on success.","name":"GITHUB_DELETE_ARTIFACT","parameters":{"description":"Request schema for `DeleteArtifact`","properties":{"artifact_id":{"description":"Unique ID of the artifact to delete.","examples":["123456789"],"title":"Artifact Id","type":"integer"},"owner":{"description":"Account owner of the repository (user or organization); not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension; not case-sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","artifact_id"],"title":"DeleteArtifactRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes an existing Codespaces secret for the authenticated user by `secret_name`. This is a destructive and irreversible operation. Returns 404 if the secret does not exist.","name":"GITHUB_DELETE_A_SECRET_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema for `DeleteASecretForTheAuthenticatedUser`","properties":{"secret_name":{"description":"Name of the Codespaces secret to delete. Case-sensitive; allows alphanumeric characters or underscores; must not start with `GITHUB_` or contain spaces.","examples":["MY_PERSONAL_API_KEY","DATABASE_CONNECTION_STRING"],"title":"Secret Name","type":"string"}},"required":["secret_name"],"title":"DeleteASecretForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Forces the removal of a self-hosted runner from a GitHub organization. This endpoint can be used to completely remove the runner when the machine you were using no longer exists. The runner will be immediately disconnected from GitHub Actions. Requires admin:org scope and organization admin access. Returns 204 No Content on successful deletion.","name":"GITHUB_DELETE_A_SELF_HOSTED_RUNNER_FROM_AN_ORGANIZATION","parameters":{"description":"Request schema for `DeleteASelfHostedRunnerFromAnOrganization`","properties":{"org":{"description":"Organization name (not case-sensitive).","examples":["octo-org","my-company"],"title":"Org","type":"string"},"runner_id":{"description":"Unique ID of the self-hosted runner to remove (obtainable by listing organization runners).","examples":["5","42"],"title":"Runner Id","type":"integer"}},"required":["org","runner_id"],"title":"DeleteASelfHostedRunnerFromAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Removes a specific self-hosted runner (by `runner_id`) from a repository, if registered there; this is idempotent.","name":"GITHUB_DELETE_A_SELF_HOSTED_RUNNER_FROM_A_REPOSITORY","parameters":{"description":"Request schema for `DeleteASelfHostedRunnerFromARepository`","properties":{"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["hello-world"],"title":"Repo","type":"string"},"runner_id":{"description":"Unique identifier of the self-hosted runner.","examples":["123","456"],"title":"Runner Id","type":"integer"}},"required":["owner","repo","runner_id"],"title":"DeleteASelfHostedRunnerFromARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: This API was sunset on August 30, 2024. Use GITHUB_DELETE_A_REPOSITORY_RULESET instead to manage tag protection rules via repository rulesets.","name":"GITHUB_DELETE_A_TAG_PROTECTION_STATE_FOR_A_REPOSITORY","parameters":{"description":"Request to permanently delete a tag protection rule from a repository.","properties":{"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"},"tag_protection_id":{"description":"The unique identifier of the tag protection to delete.","examples":[12345],"title":"Tag Protection Id","type":"integer"}},"required":["owner","repo","tag_protection_id"],"title":"DeleteATagProtectionStateForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a team (and any child teams) from an organization.","name":"GITHUB_DELETE_A_TEAM","parameters":{"description":"Input for deleting a team within an organization.","properties":{"org":{"description":"The organization's unique identifier (case-insensitive).","examples":["octo-org"],"title":"Org","type":"string"},"team_slug":{"description":"The team's URL-friendly slug.","examples":["justice-league","marketing-devs"],"title":"Team Slug","type":"string"}},"required":["org","team_slug"],"title":"DeleteATeamRequest","type":"object"}},"type":"function"},{"function":{"description":"Call this to mute a specific notification thread by deleting the user's subscription; notifications may still occur if the user is @mentioned, comments, or due to repository watch settings.","name":"GITHUB_DELETE_A_THREAD_SUBSCRIPTION","parameters":{"description":"Request schema for `DeleteAThreadSubscription`","properties":{"thread_id":{"description":"The unique identifier of the notification thread. This ID is obtained from other API calls, such as when listing notifications (e.g., via the `GET /notifications` endpoint). Ensure this ID refers to an active thread to which the user is currently subscribed.","title":"Thread Id","type":"integer"}},"required":["thread_id"],"title":"DeleteAThreadSubscriptionRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific autolink reference (which automatically links external resource IDs like JIRA-123 to URLs) from the specified repository.","name":"GITHUB_DELETE_AUTOLINK_REFERENCE","parameters":{"description":"Request schema for `DeleteAutolinkReference`","properties":{"autolink_id":{"description":"The unique numerical identifier of the autolink reference to be deleted.","examples":["1","42"],"title":"Autolink Id","type":"integer"},"owner":{"description":"The username or organization name that owns the repository. This is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This is not case-sensitive.","examples":["hello-world","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","autolink_id"],"title":"DeleteAutolinkReferenceRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific workflow run from a repository.","name":"GITHUB_DELETE_A_WORKFLOW_RUN","parameters":{"description":"Request schema for `DeleteAWorkflowRun`","properties":{"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive. ","examples":["Hello-World"],"title":"Repo","type":"string"},"run_id":{"description":"The unique identifier of the workflow run.","examples":[12345],"title":"Run Id","type":"integer"}},"required":["owner","repo","run_id"],"title":"DeleteAWorkflowRunRequest","type":"object"}},"type":"function"},{"function":{"description":"Removes all protection rules from a specific branch in a GitHub repository; the branch must currently have protection rules enabled.","name":"GITHUB_DELETE_BRANCH_PROTECTION","parameters":{"description":"Request schema for deleting branch protection rules.","properties":{"branch":{"description":"The name of the branch. Wildcard characters are not supported for this REST API endpoint; use the GitHub GraphQL API for wildcard support.","examples":["main","develop"],"title":"Branch","type":"string"},"owner":{"description":"The account owner of the repository. Not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. Not case sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"DeleteBranchProtectionRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific code scanning analysis by its ID from a repository; `confirm_delete` must be `true` if it's the last analysis of its type for a given tool and reference to prevent data loss.","name":"GITHUB_DELETE_CODE_SCANNING_ANALYSIS","parameters":{"description":"Parameters to delete a specific code scanning analysis from a repository.","properties":{"analysis_id":{"description":"Unique identifier of the code scanning analysis to delete, typically obtained by listing analyses.","examples":[12345],"title":"Analysis Id","type":"integer"},"confirm_delete":{"description":"Pass the string `true` to confirm deletion when this is the last analysis of its type for a specific tool and reference. Required to avoid a 400 error when deleting the final analysis in a set.","examples":["true"],"title":"Confirm Delete","type":"string"},"owner":{"description":"Account owner of the repository (not case sensitive).","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository without the `.git` extension (not case sensitive).","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo","analysis_id"],"title":"DeleteCodeScanningAnalysisRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific codespace owned by the authenticated user; this is a destructive action and the codespace must exist.","name":"GITHUB_DELETE_CODESPACE","parameters":{"description":"Request schema for deleting a codespace for the authenticated user.","properties":{"codespace_name":{"description":"The unique name of the codespace to be deleted. This can be the system-generated name (e.g., 'monalisa-octocat-g4v9wxj96hp') or a user-defined display name if it's unique for the user.","examples":["monalisa-octocat-g4v9wxj96hp","my-custom-codespace"],"title":"Codespace Name","type":"string"}},"required":["codespace_name"],"title":"DeleteCodespaceRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific commit comment, identified by its `comment_id`, from the specified repository; the comment must exist.","name":"GITHUB_DELETE_COMMIT_COMMENT","parameters":{"description":"Request schema for deleting a specific commit comment.","properties":{"comment_id":{"description":"The unique numerical identifier of the commit comment to be deleted.","examples":["12345","67890"],"title":"Comment Id","type":"integer"},"owner":{"description":"The username or organization name that owns the repository. This value is not case-sensitive.","examples":["octocat","actions"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, excluding the `.git` extension. This value is not case-sensitive.","examples":["Spoon-Knife","hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo","comment_id"],"title":"DeleteCommitCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a reaction from a commit comment in a GitHub repository.","name":"GITHUB_DELETE_COMMIT_COMMENT_REACTION","parameters":{"description":"Request model for the `DeleteCommitCommentReaction` action. This model defines the parameters required to delete a specific reaction from a commit comment within a repository.","properties":{"comment_id":{"description":"The unique identifier of the commit comment from which the reaction will be deleted.","examples":["8662210"],"title":"Comment Id","type":"integer"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"reaction_id":{"description":"The unique identifier of the reaction to be deleted.","examples":["1"],"title":"Reaction Id","type":"integer"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","comment_id","reaction_id"],"title":"DeleteCommitCommentReactionRequest","type":"object"}},"type":"function"},{"function":{"description":"Disables GPG commit signature protection for a specific branch in a GitHub repository, meaning commits pushed to this branch no longer require GPG signing.","name":"GITHUB_DELETE_COMMIT_SIGNATURE_PROTECTION","parameters":{"description":"Request schema for `DeleteCommitSignatureProtection`","properties":{"branch":{"description":"The name of the branch for which commit signature protection will be disabled. Wildcard characters are not supported in the branch name. To use wildcards, refer to the GitHub GraphQL API.","examples":["main","develop","feature/new-ui"],"title":"Branch","type":"string"},"owner":{"description":"The account owner of the repository. This is typically the username of the owner (for personal repositories) or the organization name (for organization-owned repositories). The name is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. The name is not case-sensitive.","examples":["my-awesome-project","api-docs"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"DeleteCommitSignatureProtectionRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a custom organization role (which should not be actively assigned) by its ID; a 204 No Content response indicates success.","name":"GITHUB_DELETE_CUSTOM_ORGANIZATION_ROLE","parameters":{"description":"Request schema for `DeleteCustomOrganizationRole`","properties":{"org":{"description":"The organization name (not case-sensitive).","examples":["my-organization"],"title":"Org","type":"string"},"role_id":{"description":"Unique ID of the custom role to delete.","examples":["12345","67890"],"title":"Role Id","type":"integer"}},"required":["org","role_id"],"title":"DeleteCustomOrganizationRoleRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific Dependabot secret, identified by its name, from a given repository if both the repository and secret exist.","name":"GITHUB_DELETE_DEPENDEBOT_SECRET_BY_NAME","parameters":{"description":"Request schema for deleting a Dependabot secret from a repository by its name.","properties":{"owner":{"description":"The account owner of the repository (e.g., username or organization name). This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. This field is not case-sensitive.","examples":["hello-world","linguist"],"title":"Repo","type":"string"},"secret_name":{"description":"The name of the Dependabot secret to delete. Secret names are case-sensitive and can only contain alphanumeric characters ([A-Z], [a-z], [0-9]) or underscores (_); spaces are not allowed.","examples":["MY_SECRET_TOKEN","NPM_TOKEN"],"title":"Secret Name","type":"string"}},"required":["owner","repo","secret_name"],"title":"DeleteDependebotSecretByNameRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific deploy key from a repository; to change a key's properties or access scope, the existing key must be deleted and a new one created.","name":"GITHUB_DELETE_DEPLOY_KEY","parameters":{"description":"Request schema for deleting a deploy key from a repository.","properties":{"key_id":{"description":"The unique identifier (ID) of the deploy key to be deleted.","examples":[12345],"title":"Key Id","type":"integer"},"owner":{"description":"The account owner of the repository. This name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case sensitive.","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo","key_id"],"title":"DeleteDeployKeyRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes a specified *inactive* deployment from a repository.","name":"GITHUB_DELETE_DEPLOYMENT","parameters":{"description":"Request schema for `DeleteDeployment`","properties":{"deployment_id":{"description":"Unique identifier of the deployment to delete.","examples":["12345"],"title":"Deployment Id","type":"integer"},"owner":{"description":"Username of the account owning the repository (case-insensitive).","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"Repository name, without the `.git` extension (case-insensitive).","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo","deployment_id"],"title":"DeleteDeploymentRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific deployment branch or tag policy, identified by its ID, from a given environment within a repository.","name":"GITHUB_DELETE_DEPLOYMENT_BRANCH_POLICY","parameters":{"description":"Request schema for `DeleteDeploymentBranchPolicy`","properties":{"branch_policy_id":{"description":"The unique identifier of the branch policy.","examples":[12345],"title":"Branch Policy Id","type":"integer"},"environment_name":{"description":"The name of the environment. The name must be URL encoded. For example, any slashes in the name must be replaced with `%2F`. ","examples":["production","staging%2Fdevelopment"],"title":"Environment Name","type":"string"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive. ","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo","environment_name","branch_policy_id"],"title":"DeleteDeploymentBranchPolicyRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific team discussion, identified by its number, from an organization's team.","name":"GITHUB_DELETE_DISCUSSION","parameters":{"description":"Defines the parameters to delete a specific team discussion.","properties":{"discussion_number":{"description":"The unique number identifying the discussion to be deleted.","examples":[42],"title":"Discussion Number","type":"integer"},"org":{"description":"Case-insensitive name of the organization.","examples":["octo-org"],"title":"Org","type":"string"},"team_slug":{"description":"URL-friendly version (slug) of the team name.","examples":["justice-league"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","discussion_number"],"title":"DeleteDiscussionRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific comment from an existing team discussion within an organization, provided the specified organization, team, discussion, and comment all exist.","name":"GITHUB_DELETE_DISCUSSION_COMMENT","parameters":{"description":"Request model for deleting a specific comment from a team discussion.","properties":{"comment_number":{"description":"Unique number identifying the comment.","examples":[101],"title":"Comment Number","type":"integer"},"discussion_number":{"description":"Unique number identifying the discussion.","examples":[42],"title":"Discussion Number","type":"integer"},"org":{"description":"The organization name (not case sensitive).","examples":["octo-org"],"title":"Org","type":"string"},"team_slug":{"description":"The slug of the team name (URL-friendly version).","examples":["justice-league"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","discussion_number","comment_number"],"title":"DeleteDiscussionCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Sends an empty request body to `DELETE /user/emails` to attempt deletion of user email addresses; the API typically requires specific emails, so outcome may vary.","name":"GITHUB_DELETE_EMAIL_ADDRESS","parameters":{"description":"Request model for GitHub DELETE /user/emails. Requires a JSON array of emails.","properties":{"emails":{"description":"Array of email addresses to delete from the authenticated user account.","items":{"type":"string"},"title":"Emails","type":"array"}},"required":["emails"],"title":"DeleteEmailAddressRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes an existing deployment environment from an existing repository.","name":"GITHUB_DELETE_ENVIRONMENT","parameters":{"description":"Request schema for deleting a specific deployment environment from a repository.","properties":{"environment_name":{"description":"The name of the environment to delete. The name must be URL encoded; for example, slashes (`/`) should be replaced with `%2F`.","examples":["production","staging%2FUS-West"],"title":"Environment Name","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This is not case sensitive.","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo","environment_name"],"title":"DeleteEnvironmentRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes an existing and accessible secret from a specified environment within a GitHub repository, returning an empty dictionary on success or error details otherwise.","name":"GITHUB_DELETE_ENVIRONMENT_SECRET","parameters":{"description":"Request model for deleting an environment secret. Specifies the repository, environment, and secret to target.","properties":{"environment_name":{"description":"The name of the environment from which the secret will be deleted. This name must be URL-encoded if it contains special characters (e.g., slashes `/` should be replaced with `%2F`).","examples":["production","staging%2Fdeploy-group-1"],"title":"Environment Name","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"},"secret_name":{"description":"The name of the secret to be deleted. GitHub stores and processes secret names as uppercase (e.g., `my_secret` becomes `MY_SECRET`).","examples":["CI_TOKEN","DATABASE_PASSWORD"],"title":"Secret Name","type":"string"}},"required":["owner","repo","environment_name","secret_name"],"title":"DeleteEnvironmentSecretRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a named environment variable from a specified, existing environment within a GitHub repository.","name":"GITHUB_DELETE_ENVIRONMENT_VARIABLE","parameters":{"description":"Request schema for `DeleteEnvironmentVariable`","properties":{"environment_name":{"description":"The name of the environment. Must be URL-encoded if it contains special characters (e.g., slashes `/` should be `%2F`).","examples":["production","staging%2Fbeta","dev-user%2Fbranch-name"],"title":"Environment Name","type":"string"},"name":{"description":"The name of the environment variable to delete.","examples":["SECRET_TOKEN","DB_PASSWORD"],"title":"Name","type":"string"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat","my-github-org"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["hello-world","api-client"],"title":"Repo","type":"string"}},"required":["owner","repo","name","environment_name"],"title":"DeleteEnvironmentVariableRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes an existing GitHub gist, specified by its `gist_id`; this action is destructive and cannot be undone.","name":"GITHUB_DELETE_GIST","parameters":{"description":"Request schema for the action to delete a GitHub gist.","properties":{"gist_id":{"description":"The unique identifier of the gist to be deleted.","examples":["aa5a315d61ae9438b18d","44f08d44327a40d2ab309a349bebec57"],"title":"Gist Id","type":"string"}},"required":["gist_id"],"title":"DeleteGistRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific comment from a GitHub Gist using its `gist_id` and `comment_id`.","name":"GITHUB_DELETE_GIST_COMMENT","parameters":{"description":"Request model for deleting a comment from a specific Gist.","properties":{"comment_id":{"description":"The unique identifier of the comment to be deleted.","examples":["129642021"],"title":"Comment Id","type":"integer"},"gist_id":{"description":"The unique identifier of the Gist from which the comment will be deleted.","examples":["aa5a315d61ae9438b18d79546350ada7"],"title":"Gist Id","type":"string"}},"required":["gist_id","comment_id"],"title":"DeleteGistCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific GitHub Actions cache from a repository using its unique `cache_id`.","name":"GITHUB_DELETE_GITHUB_ACTIONS_CACHE_BY_ID","parameters":{"description":"Request schema for `DeleteGithubActionsCacheById`","properties":{"cache_id":{"description":"The unique ID of the GitHub Actions cache to delete.","examples":[123],"title":"Cache Id","type":"integer"},"owner":{"description":"The username or organization name that owns the repository.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension.","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo","cache_id"],"title":"DeleteGithubActionsCacheByIdRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes the GitHub Pages site for the specified repository; completes without error if no site is currently enabled.","name":"GITHUB_DELETE_GITHUB_PAGES_SITE","parameters":{"description":"Request to delete a GitHub Pages site for a repository.","properties":{"owner":{"description":"The account owner of the repository (e.g., a user or organization). This name is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Hello-World","docs"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"DeleteGithubPagesSiteRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes a specific comment by its ID from an issue or pull request, if the repository exists and the comment ID is valid.","name":"GITHUB_DELETE_ISSUE_COMMENT","parameters":{"description":"Identifies the repository and the specific comment to be deleted.","properties":{"comment_id":{"description":"Unique identifier of the comment to delete.","examples":["42"],"title":"Comment Id","type":"integer"},"owner":{"description":"Username of the account owning the repository (case-insensitive).","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (case-insensitive).","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","comment_id"],"title":"DeleteIssueCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a reaction from an issue comment in a repository; the repository, comment, and reaction must exist.","name":"GITHUB_DELETE_ISSUE_COMMENT_REACTION","parameters":{"description":"Defines the request parameters for deleting a specific reaction from an issue comment.","properties":{"comment_id":{"description":"The unique numeric identifier for the issue comment from which the reaction will be deleted.","examples":[12345,67890],"title":"Comment Id","type":"integer"},"owner":{"description":"The username of the account that owns the repository. This is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"reaction_id":{"description":"The unique numeric identifier for the reaction to be deleted.","examples":[1,2],"title":"Reaction Id","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This is not case-sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","comment_id","reaction_id"],"title":"DeleteIssueCommentReactionRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently removes a specific reaction from an issue in a GitHub repository.","name":"GITHUB_DELETE_ISSUE_REACTION","parameters":{"description":"Request schema for deleting a reaction from an issue in a GitHub repository.","properties":{"issue_number":{"description":"The unique number identifying the issue from which the reaction will be deleted.","examples":["1347"],"title":"Issue Number","type":"integer"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"reaction_id":{"description":"The unique identifier of the reaction to be deleted.","examples":["1"],"title":"Reaction Id","type":"integer"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","issue_number","reaction_id"],"title":"DeleteIssueReactionRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently removes an existing label from a repository.","name":"GITHUB_DELETE_LABEL","parameters":{"description":"Request schema for `DeleteLabel`","properties":{"name":{"description":"The name of the label to delete. Label names are case-insensitive. If the label name contains spaces or special characters, ensure it is correctly URL-encoded (e.g., 'help wanted' becomes 'help%20wanted').","examples":["bug","enhancement","help%20wanted","good%20first%20issue"],"title":"Name","type":"string"},"owner":{"description":"REQUIRED. The username or organization name that owns the repository. GitHub repositories are identified by owner/repo (e.g., 'octocat/Hello-World'), so both 'owner' and 'repo' must be provided together. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"REQUIRED. The name of the repository, without the `.git` extension. Must be provided together with 'owner' to identify the repository (e.g., for 'github.com/octocat/Hello-World', repo is 'Hello-World'). This field is not case-sensitive.","examples":["Hello-World","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo","name"],"title":"DeleteLabelRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes the specified milestone if it exists; this operation is idempotent, typically returning a 404 if the milestone is not found or already deleted.","name":"GITHUB_DELETE_MILESTONE","parameters":{"description":"Request schema for `DeleteMilestone`","properties":{"milestone_number":{"description":"The unique number that identifies the milestone to be deleted.","title":"Milestone Number","type":"integer"},"owner":{"description":"The username or organization name that owns the repository. This name is not case-sensitive.","title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive. ","title":"Repo","type":"string"}},"required":["owner","repo","milestone_number"],"title":"DeleteMilestoneRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a GitHub organization and its repositories; this is a destructive action and the organization name will be unavailable for reuse for approximately 90 days.","name":"GITHUB_DELETE_ORGANIZATION","parameters":{"description":"Request schema for deleting a GitHub organization.","properties":{"org":{"description":"The unique name of the organization to be deleted. This name is not case-sensitive.","examples":["my-github-org"],"title":"Org","type":"string"}},"required":["org"],"title":"DeleteOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes a secret from a GitHub organization, making it inaccessible to GitHub Actions workflows or other tools.","name":"GITHUB_DELETE_ORGANIZATION_SECRET","parameters":{"description":"Request schema for `DeleteOrganizationSecret`","properties":{"org":{"description":"The name of the organization. This name is not case-sensitive.","examples":["octo-org"],"title":"Org","type":"string"},"secret_name":{"description":"The name of the secret to be deleted.","examples":["CI_DEPLOY_KEY"],"title":"Secret Name","type":"string"}},"required":["org","secret_name"],"title":"DeleteOrganizationSecretRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a named GitHub Actions variable from a specified organization.","name":"GITHUB_DELETE_ORGANIZATION_VARIABLE","parameters":{"description":"Request schema for `DeleteOrganizationVariable`","properties":{"name":{"description":"The name of the organization variable to delete. This parameter is not case-sensitive.","examples":["MY_VARIABLE"],"title":"Name","type":"string"},"org":{"description":"The name of the organization. This parameter is not case-sensitive.","examples":["my-org-name"],"title":"Org","type":"string"}},"required":["org","name"],"title":"DeleteOrganizationVariableRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific webhook, identified by `hook_id`, from an existing organization.","name":"GITHUB_DELETE_ORGANIZATION_WEBHOOK","parameters":{"description":"Request schema for `DeleteOrganizationWebhook`","properties":{"hook_id":{"description":"The unique identifier of the webhook. This ID can be retrieved from the `X-GitHub-Hook-ID` header in a webhook delivery or by listing organization webhooks.","examples":[123456789,987654321],"title":"Hook Id","type":"integer"},"org":{"description":"The name of the organization. This field is not case-sensitive.","examples":["github","my-company-org"],"title":"Org","type":"string"}},"required":["org","hook_id"],"title":"DeleteOrganizationWebhookRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes a specific codespace belonging to a member of the specified organization.","name":"GITHUB_DELETE_ORG_CODESPACE","parameters":{"description":"Request schema.","properties":{"codespace_name":{"description":"Unique name of the codespace.","examples":["octocat-humorous-adventure-g45w9j96qg929j9"],"title":"Codespace Name","type":"string"},"org":{"description":"The organization's name (case-insensitive).","examples":["github"],"title":"Org","type":"string"},"username":{"description":"GitHub username of the user owning the codespace.","examples":["octocat"],"title":"Username","type":"string"}},"required":["org","username","codespace_name"],"title":"DeleteOrgCodespaceRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific package in an organization; cannot delete public packages with over 5,000 downloads.","name":"GITHUB_DELETE_ORG_PACKAGE","parameters":{"description":"Parameters for deleting a specific package within an organization.","properties":{"org":{"description":"Name of the organization owning the package (not case-sensitive).","examples":["octo-org","my-company"],"title":"Org","type":"string"},"package_name":{"description":"Unique name of the package to be deleted.","examples":["my-package","your-library-name"],"title":"Package Name","type":"string"},"package_type":{"description":"Type of the package to be deleted. Packages in GitHub's Gradle registry have type `maven`. Docker images in GitHub's Container registry (`ghcr.io`) have type `container`. Use type `docker` for images previously in GitHub's Docker registry (`docker.pkg.github.com`), even if migrated to the Container registry.","enum":["npm","maven","rubygems","docker","nuget","container"],"examples":["npm","maven","rubygems","docker","nuget","container"],"title":"Package Type","type":"string"}},"required":["package_type","package_name","org"],"title":"DeleteOrgPackageRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes a specific package owned by the authenticated user; public packages downloaded over 5,000 times cannot be deleted via this API.","name":"GITHUB_DELETE_PACKAGE","parameters":{"description":"Request schema for deleting a package for the authenticated user.","properties":{"package_name":{"description":"The unique name of the package to delete. For npm: supports scoped packages like '@scope/name'. For maven: use format 'com.example.package'. For container/docker: use image name like 'my-app'. The name must match exactly as it appears in the GitHub Packages registry.","examples":["my-package","@myorg/my-package","com.example.myapp","my-container-image"],"title":"Package Name","type":"string"},"package_type":{"description":"The type of package to delete. Supported types: 'npm' (Node.js packages), 'maven' (Java/Gradle packages), 'rubygems' (Ruby gems), 'docker' (legacy Docker images from docker.pkg.github.com), 'nuget' (.NET packages), 'container' (Docker images from ghcr.io). Note: GitHub Gradle packages use 'maven' type; ghcr.io images use 'container' type.","examples":["npm","maven","rubygems","docker","nuget","container"],"title":"Package Type","type":"string"}},"required":["package_type","package_name"],"title":"DeletePackageRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to delete a package version using GitHub GraphQL API. Use when you need to remove a specific version of a package by its global node ID.","name":"GITHUB_DELETE_PACKAGE_VERSION","parameters":{"description":"Request schema for deleting a package version via GraphQL","properties":{"client_mutation_id":{"description":"A unique identifier for the client performing the mutation. Used to ensure idempotency of mutations.","examples":["delete-package-version-12345","mutation-abc"],"title":"Client Mutation Id","type":"string"},"package_version_id":{"description":"The global node ID of the package version to delete (e.g., 'MDEyOlBhY2thZ2VWZXJzaW9uMQ=='). This is the GraphQL ID, not the numeric REST API ID.","examples":["MDEyOlBhY2thZ2VWZXJzaW9uMQ==","PV_kwDOABCDEFGHIJK"],"title":"Package Version Id","type":"string"}},"required":["package_version_id"],"title":"DeletePackageVersionRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific package version within an organization; requires admin permissions for packages with over 5,000 downloads.","name":"GITHUB_DELETE_PACKAGE_VERSION_FOR_AN_ORGANIZATION","parameters":{"description":"Request schema for `DeletePackageVersionForAnOrganization`","properties":{"org":{"description":"Organization name (case-insensitive).","examples":["github","my-organization"],"title":"Org","type":"string"},"package_name":{"description":"Name of the package.","examples":["my-package","your-awesome-app"],"title":"Package Name","type":"string"},"package_type":{"description":"Package ecosystem. Notes:\n- `maven`: For GitHub's Gradle registry packages.\n- `container`: For Docker images in GitHub's Container registry (ghcr.io).\n- `docker`: For images originally in GitHub's Docker registry (docker.pkg.github.com), including migrated ones.","enum":["npm","maven","rubygems","docker","nuget","container"],"examples":["npm","maven","rubygems","docker","nuget","container"],"title":"Package Type","type":"string"},"package_version_id":{"description":"Unique ID of the package version to delete.","examples":[12345,98760],"title":"Package Version Id","type":"integer"}},"required":["package_type","package_name","org","package_version_id"],"title":"DeletePackageVersionForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently and irreversibly deletes a specific version of a package owned by the specified user.","name":"GITHUB_DELETE_PACKAGE_VERSION_FOR_A_USER","parameters":{"description":"Request schema for deleting a specific version of a package owned by a user.","properties":{"package_name":{"description":"The name of the package to which the version belongs.","examples":["my-package","your-app-library"],"title":"Package Name","type":"string"},"package_type":{"description":"The type of the package. Supported types include npm, maven, rubygems, docker, nuget, and container. Packages in GitHub's Gradle registry use the `maven` type. Docker images in GitHub's Container registry (ghcr.io) use the `container` type. The `docker` type can be used for images previously in GitHub's Docker registry (docker.pkg.github.com), even if migrated.","examples":["npm","maven","docker","container"],"title":"Package Type","type":"string"},"package_version_id":{"description":"The unique identifier of the package version to be deleted.","examples":[12345,67890],"title":"Package Version Id","type":"integer"},"username":{"description":"The GitHub username of the account that owns the package.","examples":["octocat","your-username"],"title":"Username","type":"string"}},"required":["package_type","package_name","username","package_version_id"],"title":"DeletePackageVersionForAUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a pending (unsubmitted) review from a pull request; this is only possible if the review has not yet been submitted.","name":"GITHUB_DELETE_PENDING_REVIEW","parameters":{"description":"Request schema for `DeletePendingReview`","properties":{"owner":{"description":"The account owner of the repository. This name is not case-sensitive.","examples":["octocat","github-linguist"],"title":"Owner","type":"string"},"pull_number":{"description":"The number that identifies the pull request.","examples":["1347","100"],"title":"Pull Number","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["hello-world","octo-repo"],"title":"Repo","type":"string"},"review_id":{"description":"The unique identifier of the pending review to be deleted.","examples":["80","42"],"title":"Review Id","type":"integer"}},"required":["owner","repo","pull_number","review_id"],"title":"DeletePendingReviewRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes the specified GitHub project (Projects V2) using the GraphQL API. Note: This action uses GitHub's Projects V2 GraphQL API. The legacy Projects (classic) REST API was sunset on April 1, 2025 and is no longer available. The project is permanently deleted and cannot be recovered. The user must have admin permissions for the project to delete it.","name":"GITHUB_DELETE_PROJECT","parameters":{"description":"Request schema for deleting a GitHub project.","properties":{"project_id":{"description":"The unique GraphQL node ID of the project to be deleted (e.g., 'PVT_kwDOBcMqx84ABdPx'). This is returned from project creation or listing operations.","examples":["PVT_kwDOBcMqx84ABdPx","PVT_kwHOABcdef123456"],"title":"Project Id","type":"string"}},"required":["project_id"],"title":"DeleteProjectRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a project card from a GitHub 'Project (classic)'; this operation is idempotent. DEPRECATION NOTICE: GitHub Classic Projects (V1) and its REST API were sunset on April 1, 2025. This action may return a 404 error on GitHub.com. For new projects, use GitHub Projects V2 which uses the GraphQL API instead. See: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/","name":"GITHUB_DELETE_PROJECT_CARD","parameters":{"description":"Request schema for deleting a project card.","properties":{"card_id":{"description":"The unique numerical identifier of the project card to be deleted.","examples":[10291637],"title":"Card Id","type":"integer"}},"required":["card_id"],"title":"DeleteProjectCardRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a project field (column) from a GitHub Projects V2 project using the GraphQL API. IMPORTANT: GitHub Classic Projects REST API was sunset on April 1, 2025. This action now uses the GitHub Projects V2 GraphQL API with the deleteProjectV2Field mutation. Note: The built-in Status field cannot be deleted as it is a core field in GitHub Projects V2. Only custom fields can be deleted.","name":"GITHUB_DELETE_PROJECT_COLUMN","parameters":{"description":"Request schema for deleting a specific project field (column) by its ID.\n\nNote: This action uses GitHub Projects V2 GraphQL API. The Classic Projects REST API\nwas sunset on April 1, 2025.","properties":{"field_id":{"description":"The node ID of the project field to be deleted. This is a GraphQL node ID (e.g., 'PVTF_...').","examples":["PVTF_lAHODwD2Q84BNH2Pzg8NZyw"],"title":"Field Id","type":"string"}},"required":["field_id"],"title":"DeleteProjectColumnRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to delete a project item for a user in GitHub Projects V2. Use when you need to remove an item from a user's project. Requires the project item's GraphQL node ID (starts with 'PVTI_'). Uses the GitHub GraphQL API deleteProjectV2Item mutation.","name":"GITHUB_DELETE_PROJECT_ITEM_FOR_USER","parameters":{"description":"Request model for deleting a project item for a user.","properties":{"item_id":{"description":"The GraphQL node ID of the project item to delete (e.g. 'PVTI_lADOBCxhzs4A...').","examples":["PVTI_lADOBCxhzs4AcbIazgR3X1c"],"title":"Item Id","type":"string"},"project_number":{"description":"The project's number.","examples":[22,1],"minimum":1,"title":"Project Number","type":"integer"},"username":{"description":"The handle for the GitHub user account.","examples":["octocat","composio-dev"],"title":"Username","type":"string"}},"required":["username","project_number","item_id"],"title":"DeleteProjectItemForUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific reaction from a pull request review comment, provided the comment and reaction exist on that comment within the specified repository.","name":"GITHUB_DELETE_PULL_REQUEST_COMMENT_REACTION","parameters":{"description":"Parameters to delete a reaction from a pull request comment.","properties":{"comment_id":{"description":"Unique ID of the pull request review comment.","examples":["42"],"title":"Comment Id","type":"integer"},"owner":{"description":"Account owner (username or organization) of the repository; not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"reaction_id":{"description":"Unique ID of the reaction to delete.","examples":["1"],"title":"Reaction Id","type":"integer"},"repo":{"description":"Name of the repository, without the `.git` extension; not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","comment_id","reaction_id"],"title":"DeletePullRequestCommentReactionRequest","type":"object"}},"type":"function"},{"function":{"description":"Disables the requirement for pull request reviews before merging for a specific, existing branch in an existing repository; this action is idempotent and will succeed even if the protection is not currently enabled.","name":"GITHUB_DELETE_PULL_REQUEST_REVIEW_PROTECTION","parameters":{"description":"Request schema for `DeletePullRequestReviewProtection`","properties":{"branch":{"description":"Name of the branch to remove pull request review protection from (wildcards not supported; use GraphQL API for wildcards).","examples":["main"],"title":"Branch","type":"string"},"owner":{"description":"Username or organization name of the repository owner (not case-sensitive).","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (not case-sensitive).","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"DeletePullRequestReviewProtectionRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific Codespace secret from a repository by its name; this action is idempotent and will succeed even if the secret doesn't exist.","name":"GITHUB_DELETE_REPO_CODESPACE_SECRET_BY_NAME","parameters":{"description":"Request schema for `DeleteRepoCodespaceSecretByName`","properties":{"owner":{"description":"The username of the account or the name of the organization that owns the repository. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world"],"title":"Repo","type":"string"},"secret_name":{"description":"The name of the Codespace secret to be deleted.","examples":["MY_API_KEY"],"title":"Secret Name","type":"string"}},"required":["owner","repo","secret_name"],"title":"DeleteRepoCodespaceSecretByNameRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes currently linked social media account URLs from the authenticated user's GitHub profile.","name":"GITHUB_DELETE_SOCIAL_ACCOUNTS_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema for deleting social media accounts linked to the authenticated user's GitHub profile.","properties":{"account_urls":{"description":"Absolute URLs of the social media profiles to be unlinked from the GitHub profile.","examples":[["https://twitter.com/username","https://linkedin.com/in/profile"]],"items":{"type":"string"},"title":"Account Urls","type":"array"}},"required":["account_urls"],"title":"DeleteSocialAccountsForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a reaction from a team discussion comment, given the organization name, team slug, discussion number, comment number, and reaction ID.","name":"GITHUB_DELETE_TEAM_DISCUSSION_COMMENT_REACTION","parameters":{"description":"Request model for deleting a reaction from a specific comment within a team discussion.","properties":{"comment_number":{"description":"The number that uniquely identifies the comment within the discussion.","examples":[101],"title":"Comment Number","type":"integer"},"discussion_number":{"description":"The number that uniquely identifies the discussion.","examples":[42],"title":"Discussion Number","type":"integer"},"org":{"description":"The organization name. The name is not case sensitive.","examples":["octo-org"],"title":"Org","type":"string"},"reaction_id":{"description":"The unique identifier of the reaction to be deleted.","examples":[1],"title":"Reaction Id","type":"integer"},"team_slug":{"description":"The slug of the team name (URL-friendly version).","examples":["justice-league"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","discussion_number","comment_number","reaction_id"],"title":"DeleteTeamDiscussionCommentReactionRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes a specific reaction from a team discussion within an organization.","name":"GITHUB_DELETE_TEAM_DISCUSSION_REACTION","parameters":{"description":"Request model for deleting a reaction from a team discussion.","properties":{"discussion_number":{"description":"The unique number identifying the specific discussion within the team.","examples":["42"],"title":"Discussion Number","type":"integer"},"org":{"description":"The organization name. This name is not case sensitive.","examples":["octo-org"],"title":"Org","type":"string"},"reaction_id":{"description":"The unique identifier of the reaction to be deleted.","examples":["1"],"title":"Reaction Id","type":"integer"},"team_slug":{"description":"The slug of the team name, which is a URL-friendly version of the team name.","examples":["justice-league"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","discussion_number","reaction_id"],"title":"DeleteTeamDiscussionReactionRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to delete a GitHub user list using GraphQL. Use when you need to remove a user list from a GitHub account.","name":"GITHUB_DELETE_USER_LIST","parameters":{"description":"Request parameters for deleting a GitHub user list via GraphQL.\n\nThe listId is required to identify which user list to delete.","properties":{"clientMutationId":{"description":"A unique identifier for the client performing the mutation. Used to track requests.","examples":["abc123"],"title":"Client Mutation Id","type":"string"},"listId":{"description":"The ID of the user list to delete. This is a GitHub global node ID for the list.","examples":["UL_kwDOCNqc1s4AbuKJ"],"title":"List Id","type":"string"}},"required":["listId"],"title":"DeleteUserListRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a package owned by the specified user, requiring admin permissions for the authenticated user; deletion of public packages with over 5,000 downloads may require GitHub support.","name":"GITHUB_DELETE_USER_PACKAGE","parameters":{"description":"Defines the request parameters for deleting a package owned by a user.","properties":{"package_name":{"description":"The unique name of the package to be deleted.","examples":["my-private-package","internal-tool-cli"],"title":"Package Name","type":"string"},"package_type":{"description":"Ecosystem of the package. Packages in GitHub's Gradle registry use `maven`. Docker images pushed to GitHub's Container registry (`ghcr.io`) use `container`. The `docker` type can find images from the old Docker registry (`docker.pkg.github.com`), even if migrated.","examples":["npm","maven","rubygems","docker","nuget","container"],"title":"Package Type","type":"string"},"username":{"description":"The GitHub username of the account that owns the package.","examples":["octocat","your-username"],"title":"Username","type":"string"}},"required":["package_type","package_name","username"],"title":"DeleteUserPackageRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes all logs for a specific workflow run in a GitHub repository, provided the repository and run exist.","name":"GITHUB_DELETE_WORKFLOW_RUN_LOGS","parameters":{"description":"Specifies the target repository and workflow run for log deletion.","properties":{"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat","actions"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["hello-world","runner"],"title":"Repo","type":"string"},"run_id":{"description":"The unique identifier of the workflow run.","examples":["123456789","987654321"],"title":"Run Id","type":"integer"}},"required":["owner","repo","run_id"],"title":"DeleteWorkflowRunLogsRequest","type":"object"}},"type":"function"},{"function":{"description":"Disables a specific, currently active custom deployment protection rule for an existing environment within a GitHub repository.","name":"GITHUB_DISABLE_A_CUSTOM_PROTECTION_RULE_FOR_AN_ENVIRONMENT","parameters":{"description":"Request schema for disabling a custom deployment protection rule for an environment.","properties":{"environment_name":{"description":"The name of the environment. This name must be URL encoded; for example, any slashes (`/`) in the name must be replaced with `%2F`.","examples":["production","staging","dev%2Ffeature-branch"],"title":"Environment Name","type":"string"},"owner":{"description":"The account owner of the repository (e.g., a user or organization). This name is not case sensitive.","examples":["octocat","my-company"],"title":"Owner","type":"string"},"protection_rule_id":{"description":"The unique integer identifier of the custom deployment protection rule to be disabled.","examples":["12345","9876"],"title":"Protection Rule Id","type":"integer"},"repo":{"description":"The name of the repository (without the `.git` extension). This name is not case sensitive.","examples":["my-awesome-project","BackendService"],"title":"Repo","type":"string"}},"required":["environment_name","repo","owner","protection_rule_id"],"title":"DisableACustomProtectionRuleForAnEnvironmentRequest","type":"object"}},"type":"function"},{"function":{"description":"Disables a specified workflow (by ID or filename) in a given GitHub repository, preventing new automatic triggers; any in-progress runs will continue.","name":"GITHUB_DISABLE_A_WORKFLOW","parameters":{"description":"Request schema for disabling a specific workflow in a GitHub repository.","properties":{"owner":{"description":"The account owner of the repository (username or organization name). This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Hello-World","Spoon-Knife"],"title":"Repo","type":"string"},"workflow_id":{"anyOf":[{"type":"integer"},{"type":"string"}],"description":"The ID of the workflow or the workflow's file name (e.g., `main.yml` or `ci.yaml`). You can obtain the workflow ID by listing workflows in a repository.","examples":[1234567,"main.yml"],"title":"Workflow Id"}},"required":["owner","repo","workflow_id"],"title":"DisableAWorkflowRequest","type":"object"}},"type":"function"},{"function":{"description":"Disables private vulnerability reporting for an existing GitHub repository, preventing direct private vulnerability reports to maintainers via GitHub's interface for this repository.","name":"GITHUB_DISABLE_PRIVATE_VULN_REPORTING_FOR_REPO","parameters":{"description":"Request schema for `GithubDisablePrivateVulnReportingForRepo`","properties":{"owner":{"description":"The account owner of the repository (e.g., a GitHub username or organization name). This field is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GithubDisablePrivateVulnReportingForRepoRequest","type":"object"}},"type":"function"},{"function":{"description":"Removes a repository from the list of selected repositories enabled for GitHub Actions in an organization. Only works when the organization's `enabled_repositories` policy is set to `selected`. Requires admin:org scope.","name":"GITHUB_DISABLE_REPOSITORY_ACTIONS_IN_ORG","parameters":{"description":"Request schema for `DisableRepositoryActionsInOrg`","properties":{"org":{"description":"The GitHub organization name (not case-sensitive).","examples":["octo-org"],"title":"Org","type":"string"},"repository_id":{"description":"The unique identifier of the repository.","examples":["1296269"],"title":"Repository Id","type":"integer"}},"required":["org","repository_id"],"title":"DisableRepositoryActionsInOrgRequest","type":"object"}},"type":"function"},{"function":{"description":"Dismisses an APPROVED or CHANGES_REQUESTED review on a pull request with a mandatory explanatory message. IMPORTANT: Only reviews in APPROVED or CHANGES_REQUESTED state can be dismissed. Reviews in COMMENTED, PENDING, or already DISMISSED state will return a 422 error. To dismiss a review on a protected branch, you must be a repository admin or be authorized to dismiss pull request reviews.","name":"GITHUB_DISMISS_A_REVIEW_FOR_A_PULL_REQUEST","parameters":{"description":"Request schema for `DismissAReviewForAPullRequest`\n\nNote: Only reviews in APPROVED or CHANGES_REQUESTED state can be dismissed.\nReviews in COMMENTED, PENDING, or DISMISSED state cannot be dismissed.","properties":{"event":{"default":"DISMISS","description":"The event type for dismissing the review. Must be set to DISMISS.","enum":["DISMISS"],"examples":["DISMISS"],"title":"EventEnm","type":"string"},"message":{"description":"The reason for dismissing the review. This is a required field.","examples":["Outdated comments","All concerns addressed by recent commits.","Review no longer applicable after refactoring"],"title":"Message","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"pull_number":{"description":"The unique number identifying the pull request within the repository.","examples":[1,42,101],"title":"Pull Number","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","my-awesome-repo"],"title":"Repo","type":"string"},"review_id":{"description":"The unique identifier for the review to be dismissed. The review must be in APPROVED or CHANGES_REQUESTED state.","examples":[12345,67890],"title":"Review Id","type":"integer"}},"required":["owner","repo","pull_number","review_id","message"],"title":"DismissAReviewForAPullRequestRequest","type":"object"}},"type":"function"},{"function":{"description":"Downloads a GitHub Actions workflow artifact as a ZIP file. Returns the artifact as a downloadable file. Use GITHUB_LIST_ARTIFACTS_FOR_A_REPOSITORY or GITHUB_LIST_WORKFLOW_RUN_ARTIFACTS to get valid artifact IDs first.","name":"GITHUB_DOWNLOAD_AN_ARTIFACT","parameters":{"description":"Request schema for `DownloadAnArtifact`","properties":{"archive_format":{"default":"zip","description":"Archive format for the download. GitHub API only supports 'zip'. Defaults to 'zip'.","examples":["zip"],"title":"Archive Format","type":"string"},"artifact_id":{"description":"Unique numeric identifier of the artifact. Obtain from GITHUB_LIST_ARTIFACTS_FOR_A_REPOSITORY or GITHUB_LIST_WORKFLOW_RUN_ARTIFACTS actions.","title":"Artifact Id","type":"integer"},"owner":{"description":"Username or organization name of the repository owner (case-insensitive).","title":"Owner","type":"string"},"repo":{"description":"Repository name, without the `.git` extension (case-insensitive).","title":"Repo","type":"string"}},"required":["owner","repo","artifact_id"],"title":"DownloadAnArtifactRequest","type":"object"}},"type":"function"},{"function":{"description":"Downloads a repository's source code as a tarball (.tar.gz) archive for a specific Git reference, if the repository is accessible.","name":"GITHUB_DOWNLOAD_A_REPOSITORY_ARCHIVE_TAR","parameters":{"description":"Request schema for `DownloadARepositoryArchiveTar`","properties":{"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"ref":{"description":"A Git reference (e.g., branch name, tag name, or commit SHA) that points to the specific version of the repository content to be downloaded as a tarball archive. For example, `main` for the main branch, `v1.0.0` for a tag, or a full commit SHA.","examples":["main","v1.2.3","0c0bf3f7872779800039124014614000356f4b03"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["Spoon-Knife","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo","ref"],"title":"DownloadARepositoryArchiveTarRequest","type":"object"}},"type":"function"},{"function":{"description":"Downloads a repository's source code as a ZIP archive for a specific Git reference (branch, tag, or commit SHA). IMPORTANT SIZE LIMITATION: This action may fail with 'payload too large' errors for large repositories due to platform size restrictions. If you encounter size limit issues, consider these alternatives: - Use GITHUB_GET_REPOSITORY_CONTENT to fetch specific files or directories (also lists directory contents) - Clone the repository using git if you need the full codebase Best suited for: small to medium repositories, downloading specific tagged releases, or quick code inspection.","name":"GITHUB_DOWNLOAD_A_REPOSITORY_ARCHIVE_ZIP","parameters":{"description":"Request schema for downloading a repository's archive in ZIP format.","properties":{"owner":{"description":"The username of the account that owns the repository. This is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"ref":{"description":"The Git reference for the archive. This can be a branch name, a tag name, or a commit SHA.","examples":["main","v1.0","0799097993916240518952411700981210018401"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This is not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","ref"],"title":"DownloadARepositoryArchiveZipRequest","type":"object"}},"type":"function"},{"function":{"description":"Downloads logs for a specific job in a GitHub Actions workflow run, contingent on the repository's existence and the job ID being valid and having produced logs.","name":"GITHUB_DOWNLOAD_JOB_LOGS_FOR_A_WORKFLOW_RUN","parameters":{"description":"Request schema for downloading job logs for a workflow run.","properties":{"job_id":{"description":"The unique identifier of the job for which to download logs. You can obtain this from the 'List jobs for a workflow run' endpoint.","examples":[54370757583,61392620969],"title":"Job Id","type":"integer"},"owner":{"description":"The account owner of the repository (e.g., user or organization). This name is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive. ","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","job_id"],"title":"DownloadJobLogsForAWorkflowRunRequest","type":"object"}},"type":"function"},{"function":{"description":"Downloads a ZIP archive of logs for a specific workflow run attempt. Returns a downloadable ZIP file containing logs for all jobs and steps in the workflow run.","name":"GITHUB_DOWNLOAD_WORKFLOW_RUN_ATTEMPT_LOGS","parameters":{"description":"Request schema for `DownloadWorkflowRunAttemptLogs`","properties":{"attempt_number":{"description":"The attempt number of the workflow run.","examples":[1],"title":"Attempt Number","type":"integer"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive. ","examples":["hello-world"],"title":"Repo","type":"string"},"run_id":{"description":"The unique identifier of the workflow run.","examples":[123456789],"title":"Run Id","type":"integer"}},"required":["owner","repo","run_id","attempt_number"],"title":"DownloadWorkflowRunAttemptLogsRequest","type":"object"}},"type":"function"},{"function":{"description":"Downloads logs for a specific GitHub Actions workflow run as a ZIP archive containing log files for each job in the workflow.","name":"GITHUB_DOWNLOAD_WORKFLOW_RUN_LOGS","parameters":{"description":"Parameters to identify and download logs for a specific GitHub Actions workflow run.","properties":{"owner":{"description":"The account owner of the repository (e.g., 'octocat'). This name is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository (e.g., 'Spoon-Knife') without the `.git` extension. This name is not case-sensitive.","examples":["Hello-World","octocat.github.io"],"title":"Repo","type":"string"},"run_id":{"description":"The unique identifier of the workflow run (e.g., 12345).","examples":[1616202549,3043364204],"title":"Run Id","type":"integer"}},"required":["owner","repo","run_id"],"title":"DownloadWorkflowRunLogsRequest","type":"object"}},"type":"function"},{"function":{"description":"Reactivates a currently disabled GitHub Actions workflow within a repository using its workflow ID or filename.","name":"GITHUB_ENABLE_A_WORKFLOW","parameters":{"description":"Request schema to enable a GitHub Actions workflow.","properties":{"owner":{"description":"The username or organization name that owns the repository. This value is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This value is not case-sensitive.","examples":["hello-world","my-awesome-project"],"title":"Repo","type":"string"},"workflow_id":{"anyOf":[{"type":"integer"},{"type":"string"}],"description":"The ID of the workflow to be enabled. You can provide either the numeric workflow ID (e.g., 30433642) or the workflow filename (e.g., 'ci.yaml', 'data.yml').","examples":["1234567","7654321","main.yaml","ci.yml"],"title":"Workflow Id"}},"required":["owner","repo","workflow_id"],"title":"EnableAWorkflowRequest","type":"object"}},"type":"function"},{"function":{"description":"Sets the specific repositories that can use GitHub Actions within an organization by replacing the current list; only applies if the organization's Actions policy is 'selected repositories'.","name":"GITHUB_ENABLE_GITHUB_ACTIONS_IN_SELECTED_REPOSITORIES","parameters":{"description":"Request to set the specific repositories that can use GitHub Actions within an organization.","properties":{"org":{"description":"Name of the GitHub organization (case-insensitive).","examples":["my-github-org","octo-org"],"title":"Org","type":"string"},"selected_repository_ids":{"description":"List of unique repository IDs for which GitHub Actions will be enabled. This list completely replaces the current selection of repositories.","examples":[[1296269,1296270],[98765,123456],[42]],"items":{"type":"integer"},"title":"Selected Repository Ids","type":"array"}},"required":["org","selected_repository_ids"],"title":"EnableGithubActionsInSelectedRepositoriesRequest","type":"object"}},"type":"function"},{"function":{"description":"Enables private vulnerability reporting for a repository, allowing security researchers to privately submit vulnerability reports to maintainers.","name":"GITHUB_ENABLE_PRIVATE_VULN_REPORTING_FOR_REPO","parameters":{"description":"Request schema for enabling private vulnerability reporting for a repository.","properties":{"owner":{"description":"The account owner of the repository. This is typically the username or organization name and is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Hello-World","Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GithubEnablePrivateVulnReportingForRepoRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a repository to the list of selected repositories enabled for GitHub Actions in an organization. Requires the organization's 'enabled_repositories' policy to be set to 'selected'.","name":"GITHUB_ENABLE_REPO_FOR_GITHUB_ACTIONS","parameters":{"description":"Specifies the target organization and repository for enabling GitHub Actions.","properties":{"org":{"description":"The name of the GitHub organization. This name is not case-sensitive.","examples":["my-github-org","acme-corp"],"title":"Org","type":"string"},"repository_id":{"description":"The unique numerical identifier of the GitHub repository.","examples":[123456789,987654321],"title":"Repository Id","type":"integer"}},"required":["org","repository_id"],"title":"EnableRepoForGithubActionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates or updates a repository's development environment secret using an `encrypted_value` and its corresponding `key_id`; the secret must be pre-encrypted with the repository's Codespaces public key.","name":"GITHUB_ENCRYPT_AND_UPDATE_DEV_SECRET","parameters":{"description":"Request schema for creating or updating a development environment secret with an encrypted value.","properties":{"encrypted_value":{"description":"Value for your secret, already encrypted using the public key retrieved from the GitHub API's 'Get a repository public key for Codespaces' endpoint (`GET /repos/{owner}/{repo}/codespaces/secrets/public-key`). Use this if you have pre-encrypted the value yourself.","examples":["c2VjcmV0X2VuY3J5cHRlZF92YWx1ZQ=="],"title":"Encrypted Value","type":"string"},"key_id":{"description":"ID of the public key (retrieved from the GitHub API's 'Get a repository public key for Codespaces' endpoint: `GET /repos/{owner}/{repo}/codespaces/secrets/public-key`) used to encrypt the secret's value. If not provided, it will be fetched automatically.","examples":["1234567890abcdef"],"title":"Key Id","type":"string"},"owner":{"description":"The account owner of the repository. This name is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. This name is not case-sensitive.","examples":["hello-world"],"title":"Repo","type":"string"},"secret_name":{"description":"The name of the development environment secret.","examples":["MY_API_TOKEN"],"title":"Secret Name","type":"string"},"secret_value":{"description":"The plaintext value for your secret. This will be automatically encrypted using the repository's Codespaces public key before being sent to GitHub. If you already have an encrypted value, use the encrypted_value parameter instead.","examples":["my-secret-api-key-12345"],"title":"Secret Value","type":"string"}},"required":["owner","repo","secret_name"],"title":"EncryptAndUpdateDevSecretRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates or updates an organization's GitHub Codespaces secret using an encrypted value and its corresponding public key ID.","name":"GITHUB_ENCRYPT_ORG_DEV_ENV_SECRET","parameters":{"description":"Request schema for creating or updating an organization's development environment secret with an encrypted value.","properties":{"encrypted_value":{"description":"Encrypted secret value, using the public key from 'Get an organization public key' (GET /orgs/{org}/codespaces/secrets/public-key). Use this if you have pre-encrypted the value yourself. If not provided and secret_value is given, encryption will be done automatically.","title":"Encrypted Value","type":"string"},"key_id":{"description":"ID of the public key (from GET /orgs/{org}/codespaces/secrets/public-key) used to encrypt the secret's value. If not provided, it will be fetched automatically when encrypting.","title":"Key Id","type":"string"},"org":{"description":"The GitHub organization name (case-insensitive).","examples":["my-organization"],"title":"Org","type":"string"},"secret_name":{"description":"Name of the secret to create or update.","examples":["MY_API_KEY"],"title":"Secret Name","type":"string"},"secret_value":{"description":"The plaintext value for your secret. This will be automatically encrypted using the organization's Codespaces public key before being sent to GitHub. If you already have an encrypted value, use the encrypted_value parameter instead.","examples":["my-secret-api-key-12345"],"title":"Secret Value","type":"string"},"selected_repository_ids":{"description":"Repository IDs that can access the secret; required if visibility is 'selected'.","examples":[[12345,67890]],"items":{"type":"integer"},"title":"Selected Repository Ids","type":"array"},"visibility":{"description":"Visibility of the secret. 'selected' requires `selected_repository_ids`.","enum":["all","private","selected"],"title":"Visibility","type":"string"}},"required":["org","secret_name","visibility"],"title":"EncryptOrgDevEnvSecretRequest","type":"object"}},"type":"function"},{"function":{"description":"Triggers an export of a user's specified codespace, automatically stopping it if active, and returns its export status and download URL.","name":"GITHUB_EXPORT_A_CODESPACE_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema for `ExportACodespaceForTheAuthenticatedUser`","properties":{"codespace_name":{"description":"Unique name of the codespace to be exported.","examples":["monalisa-octo-cat-g45w7p9p7vh8qrq"],"title":"Codespace Name","type":"string"}},"required":["codespace_name"],"title":"ExportACodespaceForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Exports the software bill of materials (SBOM) in SPDX JSON format for a repository, if its dependency graph is enabled and it has at least one commit.","name":"GITHUB_EXPORT_SBOM_FOR_REPO","parameters":{"description":"Request schema for `ExportSbomForRepo`","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive. ","examples":["hello-world","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"ExportSbomForRepoRequest","type":"object"}},"type":"function"},{"function":{"description":"Primary tool to find and search pull requests. Supports filtering by repository, author, state, labels, and merge status, and returns structured PR data for reliable use in workflows. GitHub search results are capped at ~1000 total items; narrow filters when totals approach this limit. `created_since`/`updated_since` filter on creation/update timestamps, not `merged_at`; apply merge-date filtering client-side.","name":"GITHUB_FIND_PULL_REQUESTS","parameters":{"description":"Request schema for finding pull requests with AI-friendly parameters.","properties":{"assignee":{"description":"Filter by PR assignee username. Use '@me' for current user. Must be a valid GitHub username (alphanumeric characters and hyphens only, cannot start or end with hyphen). No dots or other special characters allowed.","examples":["octocat","@me"],"title":"Assignee","type":"string"},"author":{"description":"Filter by PR author username. Must be a valid GitHub username (alphanumeric characters and hyphens only, cannot start or end with hyphen). No dots or other special characters allowed.","examples":["octocat","defunkt"],"title":"Author","type":"string"},"base_branch":{"description":"Filter by base branch name.","examples":["main","master","develop","staging"],"title":"Base Branch","type":"string"},"created_since":{"description":"Filter PRs created after this date (ISO 8601 format). Provide as UTC ISO 8601 timestamp to avoid off-by-one-day errors at range boundaries. Does not filter on `merged_at`.","examples":["2024-01-01","2024-01-01T00:00:00Z"],"title":"Created Since","type":"string"},"for_authenticated_user":{"default":false,"description":"Include private repositories accessible to the authenticated user in search results. When True without repo/owner, searches PRs involving you (author, assignee, mentions, commenter) across all accessible repos. When False without repo/owner, restricts to public repos only. When repo/owner is specified, this flag has no effect on scope. Set to True when searching private repositories; False searches all of GitHub and produces large noisy result sets.","examples":[true,false],"title":"For Authenticated User","type":"boolean"},"head_branch":{"description":"Filter by head branch name.","examples":["feature/auth","bugfix/login","hotfix/critical"],"title":"Head Branch","type":"string"},"is_merged":{"description":"Filter by merge status. True for merged PRs, False for unmerged, None for all.","examples":[true,false],"title":"Is Merged","type":"boolean"},"label":{"description":"Filter by label name.","examples":["bug","enhancement","documentation","good first issue"],"title":"Label","type":"string"},"language":{"description":"Filter by programming language.","examples":["python","javascript","typescript","go"],"title":"Language","type":"string"},"mentions":{"description":"Filter by username mentioned in PR. Must be a valid GitHub username (alphanumeric characters and hyphens only, cannot start or end with hyphen). No dots or other special characters allowed.","examples":["octocat","@me"],"title":"Mentions","type":"string"},"order":{"default":"desc","description":"Sort order (ascending or descending).","enum":["desc","asc"],"examples":["desc","asc"],"title":"Order","type":"string"},"owner":{"description":"Filter by repository owner (user or organization). Can be used alone to search all repositories for an owner, or combined with repo parameter to specify owner and repo separately. When both owner and repo are provided, the search is scoped to 'owner/repo'. When omitted along with repo, search scope is determined by for_authenticated_user flag. The owner must exist and repositories must be accessible with your token.","examples":["facebook","microsoft","octocat"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of results to fetch.","examples":[1,2,3],"title":"Page","type":"integer"},"per_page":{"default":20,"description":"Number of results per page (maximum 100). GitHub caps total search results at ~1000 items; iterate `page` until results fewer than `per_page` are returned, and add `repo`, `label`, or date filters when totals approach 1000.","examples":[10,20,50],"title":"Per Page","type":"integer"},"query":{"description":"Optional search query for PR title, description, or commit messages. Supports GitHub search syntax including label filters (e.g., 'label:bug'), logical operators (AND, OR, NOT), and text search. If not provided, PRs will be listed based on other filter parameters. Type qualifiers (type:pr, is:pr, is:issue, type:issue) are automatically normalized. When using logical operators with qualifiers like labels, the query is automatically grouped for proper parsing. When omitting query, ensure at least one structured filter parameter is provided; passing no query and no filters may cause validation errors. Prefer dedicated parameters (`label`, `state`, `author`) over embedding qualifiers in the query string. Exact title matching is not supported; post-filter on title client-side if needed.","examples":["bug fix","feature auth","label:bug","label:bug OR label:enhancement","refactor api",null],"title":"Query","type":"string"},"raw_response":{"default":false,"description":"Return full API response if true, optimized response for AI agents if false.","examples":[true,false],"title":"Raw Response","type":"boolean"},"repo":{"description":"Filter by specific repository. Can be provided in 'owner/repo' format (e.g., 'facebook/react'), or as just the repo name when used with the owner parameter. When owner and repo are both provided and have the same value, they are combined as 'owner/repo'. When omitted along with owner, search scope is determined by for_authenticated_user flag. The repository must exist and be accessible with your token. Prefer 'owner/repo' format; bare repo name without the `owner` parameter causes invalid repository format errors.","examples":["facebook/react","microsoft/vscode","octocat/Hello-World","react"],"title":"Repo","type":"string"},"sort":{"default":"updated","description":"Field to sort results by. Set explicitly to 'updated' with `order=desc` when recency matters; default behavior may return best-match relevance ordering instead.","enum":["comments","reactions","interactions","created","updated"],"examples":["updated","created","comments"],"title":"Sort","type":"string"},"state":{"default":"open","description":"Filter by PR state: 'open', 'closed', or 'all'.","examples":["open","closed","all"],"title":"State","type":"string"},"updated_since":{"description":"Filter PRs updated after this date (ISO 8601 format).","examples":["2024-01-01","2024-01-01T00:00:00Z"],"title":"Updated Since","type":"string"}},"title":"FindPullRequestsRequest","type":"object"}},"type":"function"},{"function":{"description":"AI-optimized repository search with smart filtering by language, stars, topics, and ownership. Builds intelligent search queries and returns clean, actionable repository data. Check `incomplete_results` in the response — when true, results are non-exhaustive. Search endpoints are rate-limited to ~30 requests/minute (vs. 5000/hour for general REST); apply backoff on 403/429. Total results are capped at ~1000 per query regardless of pagination.","name":"GITHUB_FIND_REPOSITORIES","parameters":{"description":"Request schema for finding repositories.","properties":{"archived":{"description":"Filter by archived status. None means include both.","examples":[true,false],"title":"Archived","type":"boolean"},"for_authenticated_user":{"default":false,"description":"Search only in repositories accessible to the authenticated user (including private repos). Requires token scopes `repo`/`read:org`; sparse results compared to GitHub UI typically indicate insufficient token scopes.","examples":[true,false],"title":"For Authenticated User","type":"boolean"},"fork_filter":{"default":"exclude","description":"How to handle forks: 'include' (include forks), 'exclude' (exclude forks), 'only' (only forks).","examples":["include","exclude","only"],"title":"Fork Filter","type":"string"},"language":{"description":"Filter by programming language.","examples":["python","javascript","typescript","go"],"title":"Language","type":"string"},"max_stars":{"description":"Maximum number of stars the repository should have.","examples":[50,500,5000],"title":"Max Stars","type":"integer"},"min_forks":{"description":"Minimum number of forks the repository should have.","examples":[5,50,100],"title":"Min Forks","type":"integer"},"min_stars":{"description":"Minimum number of stars the repository should have.","examples":[10,100,1000],"title":"Min Stars","type":"integer"},"order":{"default":"desc","description":"Sort order (ascending or descending).","enum":["desc","asc"],"examples":["desc","asc"],"title":"Order","type":"string"},"owner":{"description":"Filter by specific user or organization. Do NOT use this parameter if your 'query' already contains 'user:', 'org:', or 'repo:' qualifiers - they will conflict. Use either 'owner' parameter OR search qualifiers in 'query', not both.","examples":["facebook","microsoft","torvalds"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of results to fetch.","examples":[1,2,3],"title":"Page","type":"integer"},"per_page":{"default":20,"description":"Number of results per page (maximum 100). GitHub caps total results at ~1000 per query; for exhaustive searches, split by `language`, `topic`, `min_stars`/`max_stars`, or `owner`.","examples":[10,20,50],"title":"Per Page","type":"integer"},"query":{"description":"Search query for repository name, description, or README content. Accepts both 'query' and 'q' as parameter names. Supports OR operator for alternatives (e.g., 'bug OR error'). Multi-word phrases in OR expressions are automatically quoted. GitHub limits OR expressions to 6 terms maximum; queries exceeding this limit are truncated. If using GitHub qualifiers like 'repo:', 'user:', or 'org:', they must be properly formatted (e.g., 'repo:owner/name', 'user:username', 'org:orgname'). Note: 'owner:' is not a valid GitHub qualifier; if used, it will be automatically transformed to 'user:'. Must be non-empty; blank strings trigger a 'Search query cannot be empty' validation error.","examples":["react typescript","machine learning python","web scraper","bug OR error OR issue","repo:facebook/react","user:torvalds","org:microsoft node"],"title":"Query","type":"string"},"raw_response":{"default":false,"description":"Return full API response if true, optimized response for AI agents if false.","examples":[true,false],"title":"Raw Response","type":"boolean"},"sort":{"default":"stars","description":"Field to sort results by.","enum":["stars","forks","help-wanted-issues","updated"],"examples":["stars","forks","updated"],"title":"Sort","type":"string"},"topic":{"description":"Filter by repository topic/tag.","examples":["web","api","machine-learning","frontend"],"title":"Topic","type":"string"}},"required":["query"],"title":"FindRepositoriesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to follow a GitHub organization using GraphQL. Use when you need to make the authenticated user follow an organization.","name":"GITHUB_FOLLOW_ORGANIZATION_GRAPHQL","parameters":{"description":"Request parameters for following an organization via GitHub GraphQL.\n\nThis mutation allows the authenticated user to follow an organization.","properties":{"clientMutationId":{"description":"A unique identifier for the client performing the mutation. Used to track requests.","examples":["abc123","mutation-001"],"title":"Client Mutation Id","type":"string"},"organizationId":{"description":"The global GraphQL node ID of the organization to follow. Must be a valid organization node ID.","examples":["MDEyOk9yZ2FuaXphdGlvbjk5MTk=","O_kgDOABCD12"],"title":"Organization Id","type":"string"}},"required":["organizationId"],"title":"FollowOrganizationGraphqlRequest","type":"object"}},"type":"function"},{"function":{"description":"Allows the authenticated user to follow the GitHub user specified by `username`; this action is idempotent and the user cannot follow themselves.","name":"GITHUB_FOLLOW_USER","parameters":{"description":"Specifies the GitHub user to follow.","properties":{"username":{"description":"The GitHub username (handle) of the user to be followed by the authenticated user.","examples":["octocat","torvalds"],"title":"Username","type":"string"}},"required":["username"],"title":"FollowUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to follow a GitHub user using GraphQL. Use when you need to make the authenticated user follow another user.","name":"GITHUB_FOLLOW_USER_GRAPHQL","parameters":{"description":"Request parameters for following a GitHub user via GraphQL.\n\nUse the user's Node ID to follow them. The authenticated user will follow the specified user.","properties":{"clientMutationId":{"description":"A unique identifier for the client performing the mutation. Used to track requests.","examples":["abc123"],"title":"Client Mutation Id","type":"string"},"userId":{"description":"The global Node ID of the user to follow. Must be a valid GitHub user ID in the format 'MDQ6VXNlcjU4MzIzMQ=='.","examples":["MDQ6VXNlcjU4MzIzMQ=="],"title":"User Id","type":"string"}},"required":["userId"],"title":"FollowUserGraphqlRequest","type":"object"}},"type":"function"},{"function":{"description":"Forcefully cancels a queued or in-progress GitHub Actions workflow run, bypassing conditions like always() that would otherwise continue execution. Only use when the standard cancel endpoint fails. Cannot cancel completed workflow runs. Requires write permissions to the repository.","name":"GITHUB_FORCE_CANCEL_WORKFLOW_RUN","parameters":{"description":"Request schema for `ForceCancelWorkflowRun`","properties":{"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive. ","examples":["Hello-World"],"title":"Repo","type":"string"},"run_id":{"description":"The unique identifier of the workflow run. Note: Only workflow runs with status 'queued' or 'in_progress' can be canceled. Completed workflow runs cannot be canceled.","examples":[123456789],"title":"Run Id","type":"integer"}},"required":["owner","repo","run_id"],"title":"ForceCancelWorkflowRunRequest","type":"object"}},"type":"function"},{"function":{"description":"Forks a specified public gist, creating a copy under the authenticated user's account.","name":"GITHUB_FORK_GIST","parameters":{"description":"Request schema for forking a public gist.","properties":{"gist_id":{"description":"The unique identifier of the gist to be forked.","examples":["aa5a315d61ae9438b18d"],"title":"Gist Id","type":"string"}},"required":["gist_id"],"title":"ForkGistRequest","type":"object"}},"type":"function"},{"function":{"description":"Generates Markdown release notes content (listing changes, pull requests, and contributors) for a GitHub repository release, customizable via tags and a configuration file.","name":"GITHUB_GENERATE_RELEASE_NOTES","parameters":{"description":"Request schema for generating release notes content for a GitHub release.","properties":{"configuration_file_path":{"description":"Specifies a path to a configuration file in the repository (e.g., `.github/release.yml`) containing settings for generating release notes. If unspecified, GitHub looks for a configuration file at \".github/release.yml\" or \".github/release.yaml\". If no such file is found, default settings are used.","examples":[".github/release.yml","docs/configs/release-notes-config.yaml"],"title":"Configuration File Path","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"previous_tag_name":{"description":"The name of the previous tag to use as the starting point for the release notes. This manually specifies the range of changes to be included. If omitted, GitHub will attempt to automatically determine the previous release.","examples":["v0.9.0","beta-v2"],"title":"Previous Tag Name","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world","my-project-name"],"title":"Repo","type":"string"},"tag_name":{"description":"The tag name for which the release notes are to be generated. This can be an existing tag or a new tag name.","examples":["v1.0.0","release-candidate-01"],"title":"Tag Name","type":"string"},"target_commitish":{"description":"Specifies the commitish value (e.g., a branch name, tag name, or commit SHA) that will be the target for the release's tag. This is required if the `tag_name` does not reference an existing tag. It is ignored if `tag_name` already exists.","examples":["main","develop","c65e38030b3247b89ac4cc5db5da26c4"],"title":"Target Commitish","type":"string"}},"required":["owner","repo","tag_name"],"title":"GenerateReleaseNotesRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the raw, typically Base64-encoded, content of a file (blob) from a GitHub repository using its SHA hash, if the repository and blob SHA exist.","name":"GITHUB_GET_A_BLOB","parameters":{"description":"Request schema for retrieving a blob (file content) from a GitHub repository.","properties":{"file_sha":{"description":"The SHA-1 hash of the file (blob) to retrieve.","examples":["e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"],"title":"File Sha","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the '.git' extension. This field is not case-sensitive.","examples":["Hello-World","Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","file_sha"],"title":"GetABlobRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for a specified branch within a GitHub repository.","name":"GITHUB_GET_A_BRANCH","parameters":{"description":"Request schema for `GetABranch`","properties":{"branch":{"description":"The name of the branch. Cannot contain wildcard characters. To use wildcard characters in branch names, use [the GraphQL API](https://docs.github.com/graphql). If 'HEAD' is provided, it will be resolved to the repository's default branch.","examples":["main"],"title":"Branch","type":"string"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive. ","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"GetABranchRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists users, teams, and GitHub Apps with push access to a branch; this branch must be protected in repository settings for detailed restrictions, otherwise expect a 404 or empty response.","name":"GITHUB_GET_ACCESS_RESTRICTIONS","parameters":{"description":"Request schema for `GetAccessRestrictions`","properties":{"branch":{"description":"The name of the branch. Wildcard characters are not supported in this field. To manage branch protections with wildcard patterns, please refer to the GitHub GraphQL API documentation.","examples":["main","develop","feature/new-ui"],"title":"Branch","type":"string"},"owner":{"description":"The account owner of the repository (e.g., username or organization name). This name is not case-sensitive.","examples":["octocat","my-github-org"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["hello-world","my-project-repo"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"GetAccessRestrictionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific commit from a repository by its owner, name, and a valid commit reference (SHA, branch, or tag), supporting pagination for large diffs.","name":"GITHUB_GET_A_COMMIT","parameters":{"description":"Request schema for `GetACommit` action, used to retrieve a specific commit from a repository.","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number for paginating the commit's diff if it's too large. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"","title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page when paginating the commit's diff (max 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"","title":"Per Page","type":"integer"},"ref":{"description":"The commit reference. Can be a commit SHA (e.g., '`sha`'), a branch name (e.g., 'heads/`BRANCH_NAME`' or simply '`BRANCH_NAME`'), or a tag name (e.g., 'tags/`TAG_NAME`'). For more information, see \"[Git References](https://git-scm.com/book/en/v2/Git-Internals-Git-References)\" in the Git documentation.","examples":["main","heads/develop","tags/v1.0.0","007a47250555ae82606ac2cb00f8f731976059a5"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","linguist"],"title":"Repo","type":"string"}},"required":["owner","repo","ref"],"title":"GetACommitRequest","type":"object"}},"type":"function"},{"function":{"description":"Checks if repository administrators are subject to the branch protection rules on a specific branch.","name":"GITHUB_GET_ADMIN_BRANCH_PROTECTION","parameters":{"description":"Input parameters for checking admin branch protection.","properties":{"branch":{"description":"Name of the branch (wildcard characters not allowed; use GraphQL API for wildcard support).","examples":["main","develop"],"title":"Branch","type":"string"},"owner":{"description":"Account owner of the repository (case-insensitive).","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (case-insensitive).","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"GetAdminBranchProtectionRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves all officially supported, date-based (e.g., \"2022-11-28\") versions of the GitHub REST API from the /versions endpoint.","name":"GITHUB_GET_ALL_API_VERSIONS","parameters":{"description":"Request model for the GetAllApiVersions action. This action does not require any parameters.","properties":{},"title":"GetAllApiVersionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves commit activity (total commits, weekly additions/deletions/commits) for all contributors to a repository; may require a retry if GitHub returns 202 while preparing data.","name":"GITHUB_GET_ALL_CONTRIBUTOR_COMMIT_ACTIVITY","parameters":{"description":"Request to retrieve commit activity for all contributors to a repository.","properties":{"owner":{"description":"Username of the repository owner (case-insensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"Repository name, excluding `.git` (case-insensitive).","examples":["Spoon-Knife","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetAllContributorCommitActivityRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all enabled custom deployment protection rules for a specific environment in a repository; the environment must exist and be configured for deployments.","name":"GITHUB_GET_ALL_DEPLOYMENT_PROTECTION_RULES_FOR_ENV","parameters":{"description":"Request schema for `GetAllDeploymentProtectionRulesForEnv`","properties":{"environment_name":{"description":"The name of the environment. This name must be URL-encoded. For instance, if the environment name contains slashes (`/`), they should be replaced with `%2F`.","examples":["production","staging%2Fenvironment"],"title":"Environment Name","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","MyOrganization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["my-awesome-repo","Project-X"],"title":"Repo","type":"string"}},"required":["environment_name","repo","owner"],"title":"GetAllDeploymentProtectionRulesForEnvRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for a specific milestone within a GitHub repository by its number.","name":"GITHUB_GET_A_MILESTONE","parameters":{"description":"Request schema for `GetAMilestone`","properties":{"milestone_number":{"description":"The unique sequential number identifying the milestone within the repository.","examples":[1,5,42],"title":"Milestone Number","type":"integer"},"owner":{"description":"The username of the account that owns the repository. This field is not case-sensitive.","examples":["octocat","kubernetes"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","autoscaler"],"title":"Repo","type":"string"}},"required":["owner","repo","milestone_number"],"title":"GetAMilestoneRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves publicly available information for an existing GitHub App, identified by its unique URL-friendly `app_slug`.","name":"GITHUB_GET_AN_APP","parameters":{"description":"Request schema for retrieving detailed information about a specific GitHub App.","properties":{"app_slug":{"description":"The app's unique, URL-friendly, lowercase, hyphenated identifier, derived from its name (e.g., 'my-awesome-app').","examples":["my-github-app","octoapp"],"title":"App Slug","type":"string"}},"required":["app_slug"],"title":"GetAnAppRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets a specific artifact for a repository by `artifact_id`. This action retrieves the details of a specific artifact from a GitHub repository using the artifact's unique identifier. It allows users to access information about artifacts stored in the repository.","name":"GITHUB_GET_AN_ARTIFACT","parameters":{"description":"Request schema for `GetAnArtifact`","properties":{"artifact_id":{"description":"The unique identifier (ID) of the artifact to retrieve. This ID can be obtained from other API calls that list artifacts.","examples":["12345","67890"],"title":"Artifact Id","type":"integer"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive. ","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","artifact_id"],"title":"GetAnArtifactRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for a specific GitHub Classroom assignment if the authenticated user is an administrator of the classroom.","name":"GITHUB_GET_AN_ASSIGNMENT","parameters":{"description":"Request schema for `GetAnAssignment`","properties":{"assignment_id":{"description":"The unique identifier of the GitHub Classroom assignment to retrieve.","examples":["12345"],"title":"Assignment Id","type":"integer"}},"required":["assignment_id"],"title":"GetAnAssignmentRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific autolink reference (which automatically hyperlinks text like 'JIRA-123' to an external system) for a repository using its unique ID; requires administrator access to the repository.","name":"GITHUB_GET_AN_AUTOLINK_REFERENCE_OF_A_REPOSITORY","parameters":{"description":"Request schema for `GetAnAutolinkReferenceOfARepository`","properties":{"autolink_id":{"description":"The unique numeric identifier of the autolink configuration to retrieve. You can get this ID from the 'Get all autolinks of a repository' action.","examples":[123,456],"title":"Autolink Id","type":"integer"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo","autolink_id"],"title":"GetAnAutolinkReferenceOfARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the details of a specific deployment environment for a given repository, including its name, configurations, and current status.","name":"GITHUB_GET_AN_ENVIRONMENT","parameters":{"description":"Request schema for retrieving details of a specific deployment environment in a repository.","properties":{"environment_name":{"description":"The name of the deployment environment. The name must be URL-encoded; for example, any slashes `/` must be replaced with `%2F`.","examples":["production","staging%2Fteam-alpha"],"title":"Environment Name","type":"string"},"owner":{"description":"The username of the account that owns the repository. This name is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","environment_name"],"title":"GetAnEnvironmentRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the public key for a specified GitHub repository environment, used to encrypt secrets for GitHub Actions.","name":"GITHUB_GET_AN_ENVIRONMENT_PUBLIC_KEY","parameters":{"description":"Request schema for retrieving the public key for an environment. This key is used to encrypt secrets.","properties":{"environment_name":{"description":"The name of the environment. The name must be URL encoded. For example, any slashes (`/`) in the name must be replaced with `%2F`.","examples":["production","staging%2Fapp-server"],"title":"Environment Name","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo","environment_name"],"title":"GetAnEnvironmentPublicKeyRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves metadata (name and timestamps) for a single secret in a GitHub Actions environment. Note: The actual secret value is never returned by this API for security reasons.","name":"GITHUB_GET_AN_ENVIRONMENT_SECRET","parameters":{"description":"Request model for retrieving a specific environment secret's metadata from a repository.","properties":{"environment_name":{"description":"Name of the environment (must be URL-encoded if it contains special characters).","examples":["production","staging%2Fv1","dev_environment"],"title":"Environment Name","type":"string"},"owner":{"description":"Username or organization name of the repository owner (not case-sensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (not case-sensitive).","examples":["hello-world","my-awesome-project"],"title":"Repo","type":"string"},"secret_name":{"description":"Name of the secret to retrieve.","examples":["DATABASE_PASSWORD","API_TOKEN_X"],"title":"Secret Name","type":"string"}},"required":["owner","repo","environment_name","secret_name"],"title":"GetAnEnvironmentSecretRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific environment variable from a GitHub Actions environment by repository owner, repository name, environment name, and variable name.","name":"GITHUB_GET_AN_ENVIRONMENT_VARIABLE","parameters":{"description":"Request schema for `GetAnEnvironmentVariable` action, specifying the repository, environment, and variable name.","properties":{"environment_name":{"description":"The name of the GitHub Actions environment. If the name contains special characters (e.g., slashes `/`), it must be URL-encoded (e.g., `staging/feature` becomes `staging%2Ffeature`).","examples":["production","staging%2Fuser_testing"],"title":"Environment Name","type":"string"},"name":{"description":"The name of the specific environment variable to retrieve.","examples":["SERVER_URL","API_TOKEN_STAGING"],"title":"Name","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This is not case-sensitive.","examples":["hello-world","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","environment_name","name"],"title":"GetAnEnvironmentVariableRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information about a specific issue in a repository using the owner, repository name, and issue number.","name":"GITHUB_GET_AN_ISSUE","parameters":{"description":"Request schema for `GetAnIssue`","properties":{"issue_number":{"description":"The identifying number of the issue.","examples":[1347],"title":"Issue Number","type":"integer"},"owner":{"description":"Username of the account owning the repository. Not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository (without `.git` extension). Not case-sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","issue_number"],"title":"GetAnIssueRequest","type":"object"}},"type":"function"},{"function":{"description":"Action to get an issue comment.","name":"GITHUB_GET_AN_ISSUE_COMMENT","parameters":{"description":"Request schema for `GetAnIssueComment`. Defines the parameters to identify and retrieve a specific issue comment.","properties":{"comment_id":{"description":"The unique identifier of the issue comment.","examples":[123456789],"title":"Comment Id","type":"integer"},"owner":{"description":"The username of the account that owns the repository. This field is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","comment_id"],"title":"GetAnIssueCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches details of a specific issue event for a given repository and event ID.","name":"GITHUB_GET_AN_ISSUE_EVENT","parameters":{"description":"Request schema for `GetAnIssueEvent`","properties":{"event_id":{"description":"Unique identifier for the issue event.","examples":[1234567],"title":"Event Id","type":"integer"},"owner":{"description":"Username of the account owning the repository. Not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension. Not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","event_id"],"title":"GetAnIssueEventRequest","type":"object"}},"type":"function"},{"function":{"description":"Get an organization","name":"GITHUB_GET_AN_ORGANIZATION","parameters":{"description":"Request schema for retrieving a GitHub organization.","properties":{"org":{"description":"The name of the organization. This name is not case-sensitive.","examples":["github","microsoft","google"],"title":"Org","type":"string"}},"required":["org"],"title":"GetAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Action for `GetAnOrganizationPublicKey`.","name":"GITHUB_GET_AN_ORGANIZATION_PUBLIC_KEY","parameters":{"description":"Request for `GetAnOrganizationPublicKey`.","properties":{"org":{"description":"Organization name (case-insensitive).","examples":["octo-org"],"title":"Org","type":"string"}},"required":["org"],"title":"GetAnOrganizationPublicKeyRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific GitHub organization role by its ID.","name":"GITHUB_GET_AN_ORGANIZATION_ROLE","parameters":{"description":"Request schema for retrieving a specific organization role by its ID.","properties":{"org":{"description":"The name of the GitHub organization. This name is not case-sensitive.","examples":["github","my-company-org"],"title":"Org","type":"string"},"role_id":{"description":"The unique numerical identifier of the role within the organization.","examples":[123,456],"title":"Role Id","type":"integer"}},"required":["org","role_id"],"title":"GetAnOrganizationRoleRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets an organization secret's metadata (e.g., name, creation/update dates, visibility), but not its encrypted value.","name":"GITHUB_GET_AN_ORGANIZATION_SECRET","parameters":{"description":"Request schema for `GetAnOrganizationSecret`","properties":{"org":{"description":"Organization name (case-insensitive).","examples":["octo-org"],"title":"Org","type":"string"},"secret_name":{"description":"Name of the secret.","examples":["MY_API_TOKEN"],"title":"Secret Name","type":"string"}},"required":["org","secret_name"],"title":"GetAnOrganizationSecretRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves details (name, value, visibility, timestamps) of a specific, existing variable for an existing GitHub organization.","name":"GITHUB_GET_AN_ORGANIZATION_VARIABLE","parameters":{"description":"Request schema for `GetAnOrganizationVariable`","properties":{"name":{"description":"Name of the organization variable.","examples":["CI_ENVIRONMENT"],"title":"Name","type":"string"},"org":{"description":"Name of the organization (case-insensitive).","examples":["octo-org"],"title":"Org","type":"string"}},"required":["org","name"],"title":"GetAnOrganizationVariableRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the full configuration, including subscribed events and delivery settings, for an existing organization webhook.","name":"GITHUB_GET_AN_ORGANIZATION_WEBHOOK","parameters":{"description":"Request model for fetching an organization webhook's details.","properties":{"hook_id":{"description":"The unique identifier of the webhook. You can find this value in the `X-GitHub-Hook-ID` header of a webhook delivery.","examples":[123456789],"title":"Hook Id","type":"integer"},"org":{"description":"The name of the GitHub organization. This field is not case-sensitive.","examples":["octo-org"],"title":"Org","type":"string"}},"required":["org","hook_id"],"title":"GetAnOrganizationWebhookRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific package (by type and name) from an organization, if both the package and organization exist.","name":"GITHUB_GET_A_PACKAGE_FOR_AN_ORGANIZATION","parameters":{"description":"Request schema for retrieving a specific package from a GitHub organization.","properties":{"org":{"description":"Name of the GitHub organization (case-insensitive).","examples":["my-organization"],"title":"Org","type":"string"},"package_name":{"description":"The unique name of the package.","examples":["my-package-name"],"title":"Package Name","type":"string"},"package_type":{"description":"Type of the package. GitHub Gradle packages use `maven` type. Images from `ghcr.io` (Container registry) use `container` type. Use `docker` for images from `docker.pkg.github.com` (Docker registry), even if migrated to the Container registry.","enum":["npm","maven","rubygems","docker","nuget","container"],"examples":["npm","maven","rubygems","docker","nuget","container"],"title":"Package Type","type":"string"}},"required":["package_type","package_name","org"],"title":"GetAPackageForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves metadata for a specific package owned by a GitHub user, using package type, name, and username as identifiers.","name":"GITHUB_GET_A_PACKAGE_FOR_A_USER","parameters":{"description":"Request for retrieving a specific package owned by a GitHub user.","properties":{"package_name":{"description":"Unique name of the package on GitHub Packages.","title":"Package Name","type":"string"},"package_type":{"description":"Specifies the package's type. Note: Gradle packages use 'maven'; ghcr.io images use 'container'; 'docker' can find images migrated from docker.pkg.github.com to the Container registry.","examples":["npm","maven","rubygems","docker","nuget","container"],"title":"Package Type","type":"string"},"username":{"description":"GitHub username of the package owner.","title":"Username","type":"string"}},"required":["package_type","package_name","username"],"title":"GetAPackageForAUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for a specific package owned by the authenticated user.","name":"GITHUB_GET_A_PACKAGE_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema for `GetAPackageForTheAuthenticatedUser`","properties":{"package_name":{"description":"The unique name of the package as it appears in the registry.","examples":["my-web-app","com.example.utils","my-container-image"],"title":"Package Name","type":"string"},"package_type":{"description":"Type of the package. 'maven' for GitHub's Gradle registry; 'container' for Docker images in GitHub's Container registry (`ghcr.io`); 'docker' for images from GitHub's Docker registry (`docker.pkg.github.com`), including those migrated to the Container registry.","examples":["npm","maven","rubygems","docker","nuget","container"],"title":"Package Type","type":"string"}},"required":["package_type","package_name"],"title":"GetAPackageForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for a specific version of a package within an organization.","name":"GITHUB_GET_A_PACKAGE_VERSION_FOR_AN_ORGANIZATION","parameters":{"description":"Request schema for retrieving a specific package version within an organization.","properties":{"org":{"description":"Organization name (case-insensitive).","examples":["github","my-organization"],"title":"Org","type":"string"},"package_name":{"description":"Unique package name.","examples":["my-package","octo-app"],"title":"Package Name","type":"string"},"package_type":{"description":"Package type. `maven` for GitHub Gradle registry. `container` for GitHub Container registry (`ghcr.io`) images. `docker` for images from GitHub Docker registry (`docker.pkg.github.com`), including migrated ones.","examples":["npm","maven","rubygems","docker","nuget","container"],"title":"Package Type","type":"string"},"package_version_id":{"description":"Unique ID of the package version.","examples":[12345,98765],"title":"Package Version Id","type":"integer"}},"required":["package_type","package_name","org","package_version_id"],"title":"GetAPackageVersionForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific public package version associated with a GitHub user.","name":"GITHUB_GET_A_PACKAGE_VERSION_FOR_A_USER","parameters":{"description":"Request schema for retrieving a specific package version for a user on GitHub.","properties":{"package_name":{"description":"The name of the package.","examples":["my-custom-package","express"],"title":"Package Name","type":"string"},"package_type":{"description":"The type of package. 'maven' is used for Gradle packages. 'container' is for images in GitHub's Container registry (ghcr.io). 'docker' can be used for images previously in GitHub's Docker registry (docker.pkg.github.com).","enum":["npm","maven","rubygems","docker","nuget","container"],"examples":["npm","maven","rubygems","docker","nuget","container"],"title":"Package Type","type":"string"},"package_version_id":{"description":"The unique numeric identifier of the specific package version. Obtain this ID by first listing package versions using the 'list_package_versions_for_a_package_owned_by_a_user' action.","examples":[602564428,84039048],"title":"Package Version Id","type":"integer"},"username":{"description":"The GitHub username of the account that owns the package.","examples":["octocat","your-username"],"title":"Username","type":"string"}},"required":["package_type","package_name","package_version_id","username"],"title":"GetAPackageVersionForAUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for an existing specific package version associated with the authenticated user, identified by its type, name, and version ID.","name":"GITHUB_GET_A_PACKAGE_VERSION_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Defines the parameters required to retrieve a specific package version for the authenticated user.","properties":{"package_name":{"description":"The name of the package, which can be case-sensitive depending on the package type.","examples":["my-package","your-awesome-app"],"title":"Package Name","type":"string"},"package_type":{"description":"The package type. Note: GitHub's Gradle registry packages use 'maven'; ghcr.io images use 'container'; 'docker' can refer to images from docker.pkg.github.com.","examples":["npm","maven","rubygems","docker","nuget","container"],"title":"Package Type","type":"string"},"package_version_id":{"description":"The unique numerical identifier (ID) of the specific package version.","examples":["12345","98760"],"title":"Package Version Id","type":"integer"}},"required":["package_type","package_name","package_version_id"],"title":"GetAPackageVersionForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for a specific GitHub project (V2) using its project number and owner. Note: This action uses GitHub's Projects V2 REST API. The legacy Projects (classic) REST API was sunset on April 1, 2025. The project is identified by its number (visible in the project URL) and owner (either a username or organization name). If no owner is specified, the authenticated user is assumed.","name":"GITHUB_GET_A_PROJECT","parameters":{"description":"Request schema for `GetAProject`","properties":{"org":{"description":"The organization that owns the project. If provided, this takes precedence over username.","examples":["github","microsoft"],"title":"Org","type":"string"},"project_number":{"description":"The project's sequential number (e.g., 1, 2, 3). This is displayed in the project URL as https://github.com/users/{username}/projects/{project_number}.","examples":[1,5,10],"title":"Project Number","type":"integer"},"username":{"description":"The GitHub username who owns the project. If not provided, defaults to the authenticated user.","examples":["octocat","composio-dev"],"title":"Username","type":"string"}},"required":["project_number"],"title":"GetAProjectRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves all details of a specific project card, given its unique `card_id`. DEPRECATION NOTICE: GitHub Projects (classic) REST API was sunset on April 1, 2025. This action only works with existing classic project cards that were created before the sunset date. For new projects, use GitHub Projects V2 (GraphQL API) instead.","name":"GITHUB_GET_A_PROJECT_CARD","parameters":{"description":"Request schema for retrieving a specific project card by its ID.","properties":{"card_id":{"description":"The unique identifier of the project card.","examples":[10526908],"title":"Card Id","type":"integer"}},"required":["card_id"],"title":"GetAProjectCardRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for a specific project column from GitHub Projects (classic). DEPRECATION NOTICE: GitHub Classic Projects (V1) and its REST API were sunset on April 1, 2025. This action will return 404 for most requests on GitHub.com. However, it may still work on GitHub Enterprise Server instances where classic projects are enabled. For new projects, use GitHub Projects V2 which uses the GraphQL API instead. See: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/ Returns column details including: id, name, url, project_url, cards_url, node_id, created_at, and updated_at timestamps.","name":"GITHUB_GET_A_PROJECT_COLUMN","parameters":{"description":"Request schema for retrieving a project column from GitHub Projects (classic).","properties":{"column_id":{"description":"The unique integer identifier of the project column to retrieve. This ID can be obtained from the 'list_project_columns' action or from the column's API URL (e.g., /projects/columns/12345).","examples":[367,1024748,2098123],"title":"Column Id","type":"integer"}},"required":["column_id"],"title":"GetAProjectColumnRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific pull request from a GitHub repository using its owner, repository name, and pull request number.","name":"GITHUB_GET_A_PULL_REQUEST","parameters":{"description":"Request schema for `GetAPullRequest`","properties":{"owner":{"description":"The username of the account that owns the repository. This value is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"pull_number":{"description":"The number that identifies the specific pull request.","examples":[1347],"title":"Pull Number","type":"integer"},"repo":{"description":"The name of the repository, without the .git extension. This value is not case sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","pull_number"],"title":"GetAPullRequestRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific Git reference (e.g., a branch, tag, or fully qualified like 'heads/main') from a GitHub repository. The reference must exist in the repository; use 'list_matching_references' first if unsure what references are available.","name":"GITHUB_GET_A_REFERENCE","parameters":{"description":"Request schema for `GetAReference`","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","google"],"title":"Owner","type":"string"},"ref":{"description":"The Git reference to retrieve. Must be formatted as `heads/` for branches, `tags/` for tags, or `pull//head` (or `pull//merge`) for pull requests. Simple branch names (e.g., `main`) are automatically converted to `heads/`. The reference must exist in the repository; a 404 error is returned if not found. If unsure which references exist, use 'list_matching_references' or 'get_a_branch' first. Note: Commit SHAs are not supported by this endpoint; use commit-specific endpoints instead. Not all repositories use 'master'; many now use 'main' as the default branch.","examples":["heads/main","tags/v1.2.3","heads/feature-branch","pull/42/head"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Hello-World","mercury"],"title":"Repo","type":"string"}},"required":["owner","repo","ref"],"title":"GetAReferenceRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets a specific release from a GitHub repository, provided the repository is accessible and the release exists.","name":"GITHUB_GET_A_RELEASE","parameters":{"description":"Request schema for retrieving a specific release from a GitHub repository.","properties":{"owner":{"description":"The username of the account that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"release_id":{"description":"The unique numerical identifier for the release.","examples":["1","12345"],"title":"Release Id","type":"integer"},"repo":{"description":"The name of the repository, without the '.git' extension. This field is not case-sensitive.","examples":["Hello-World","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo","release_id"],"title":"GetAReleaseRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets metadata for a specific release asset in a GitHub repository, including a `browser_download_url` for downloading the asset.","name":"GITHUB_GET_A_RELEASE_ASSET","parameters":{"description":"Request schema for `GetAReleaseAsset`","properties":{"asset_id":{"description":"The unique numeric identifier of the release asset.","examples":["1234567"],"title":"Asset Id","type":"integer"},"owner":{"description":"The account owner of the repository (GitHub username or organization name). This name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","asset_id"],"title":"GetAReleaseAssetRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets a release from a GitHub repository by its tag name; the repository and a release with this tag must already exist.","name":"GITHUB_GET_A_RELEASE_BY_TAG_NAME","parameters":{"description":"Request schema for `GetAReleaseByTagName`","properties":{"owner":{"description":"Account owner of the repository (not case sensitive).","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (not case sensitive).","examples":["Hello-World"],"title":"Repo","type":"string"},"tag":{"description":"Tag identifying the release to fetch.","examples":["v1.0.0"],"title":"Tag","type":"string"}},"required":["owner","repo","tag"],"title":"GetAReleaseByTagNameRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information about an existing and accessible GitHub repository.","name":"GITHUB_GET_A_REPOSITORY","parameters":{"description":"Request schema for retrieving detailed information about a specific GitHub repository.","properties":{"owner":{"description":"The username of the account that owns the repository. This field is case-insensitive.","examples":["octocat","kubernetes"],"minLength":1,"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is case-insensitive.","examples":["Hello-World","kubernetes"],"minLength":1,"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets a repository's public key for encrypting secrets to be used in GitHub Actions, if the repository exists and is accessible.","name":"GITHUB_GET_A_REPOSITORY_PUBLIC_KEY","parameters":{"description":"Request schema for `GetARepositoryPublicKey`","properties":{"owner":{"description":"Account owner of the repository (case-insensitive).","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository without the `.git` extension (case-insensitive).","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetARepositoryPublicKeyRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches the README file (if it exists and is accessible) from a specified GitHub repository, returning its Base64-encoded content and metadata.","name":"GITHUB_GET_A_REPOSITORY_README","parameters":{"description":"Request schema for `GetARepositoryReadme`","properties":{"owner":{"description":"The GitHub account owner of the repository. This name is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"ref":{"description":"The specific git reference (branch name, tag name, or commit SHA) to retrieve the README from. If omitted, the repository's default branch is used.","examples":["main","develop","v2.1.0","c23a31f32747a8e2a13f8c11699a5e4e9148f2be"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository, excluding the `.git` extension. This name is not case-sensitive.","examples":["Hello-World","my-project-name"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetARepositoryReadmeRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the README file from a specified directory within a GitHub repository, optionally at a given commit, branch, or tag.","name":"GITHUB_GET_A_REPOSITORY_README_FOR_A_DIRECTORY","parameters":{"description":"Request schema for `GetARepositoryReadmeForADirectory`","properties":{"dir":{"description":"Path to the directory containing the README file.","examples":["docs","src/my_package"],"title":"Dir","type":"string"},"owner":{"description":"Username of the account owning the repository (not case sensitive).","examples":["octocat"],"title":"Owner","type":"string"},"ref":{"description":"Commit, branch, or tag name; defaults to the repository's default branch if not provided.","examples":["main","v1.0.0","my-feature-branch"],"title":"Ref","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (not case sensitive).","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","dir"],"title":"GetARepositoryReadmeForADirectoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific repository ruleset by its ID; if `includes_parents` is true, the search for this `ruleset_id` also extends to rulesets from parent organizations.","name":"GITHUB_GET_A_REPOSITORY_RULESET","parameters":{"description":"Request to retrieve a specific ruleset for a GitHub repository, which governs interactions with its branches and tags.","properties":{"includes_parents":{"default":true,"description":"If true, also returns rulesets configured at higher levels (e.g., organization) that apply to this repository.","title":"Includes Parents","type":"boolean"},"owner":{"description":"Account owner of the repository (username or organization); case-insensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"Repository name, excluding `.git` extension; case-insensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"},"ruleset_id":{"description":"Unique identifier of the ruleset.","examples":[12345,54321],"title":"Ruleset Id","type":"integer"}},"required":["owner","repo","ruleset_id"],"title":"GetARepositoryRulesetRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets detailed information for a specific repository rule suite by its ID, including its evaluation status and the results of its individual rules.","name":"GITHUB_GET_A_REPOSITORY_RULE_SUITE","parameters":{"description":"Request schema for `GetARepositoryRuleSuite`","properties":{"owner":{"description":"The username of the account or the name of the organization that owns the repository. This name is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, excluding the `.git` extension. This name is not case-sensitive.","examples":["hello-world"],"title":"Repo","type":"string"},"rule_suite_id":{"description":"The unique identifier of the rule suite. To obtain this ID, you can list rule suites for the repository (e.g., via `GET /repos/{owner}/{repo}/rulesets/rule-suites`) or organization (e.g., via `GET /orgs/{org}/rulesets/rule-suites`).","title":"Rule Suite Id","type":"integer"}},"required":["owner","repo","rule_suite_id"],"title":"GetARepositoryRuleSuiteRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets metadata (name, creation/update timestamps) for an existing repository secret, excluding its encrypted value.","name":"GITHUB_GET_A_REPOSITORY_SECRET","parameters":{"description":"Request schema for `GetARepositorySecret`","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive. ","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"},"secret_name":{"description":"The name of the secret to retrieve.","examples":["GH_TOKEN","API_KEY"],"title":"Secret Name","type":"string"}},"required":["owner","repo","secret_name"],"title":"GetARepositorySecretRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the authenticated user's subscription details for a repository, indicating if they receive notifications.","name":"GITHUB_GET_A_REPOSITORY_SUBSCRIPTION","parameters":{"description":"Request schema for `GetARepositorySubscription`","properties":{"owner":{"description":"The username of the account that owns the repository. This is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This is not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetARepositorySubscriptionRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets a specific GitHub Actions variable by name from an accessible repository.","name":"GITHUB_GET_A_REPOSITORY_VARIABLE","parameters":{"description":"Request schema for `GetARepositoryVariable`.","properties":{"name":{"description":"The name of the GitHub Actions variable to retrieve.","examples":["CI_TOKEN","DEPLOYMENT_SERVER_URL"],"title":"Name","type":"string"},"owner":{"description":"The username or organization that owns the repository.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension.","examples":["hello-world","my-private-repo"],"title":"Repo","type":"string"}},"required":["owner","repo","name"],"title":"GetARepositoryVariableRequest","type":"object"}},"type":"function"},{"function":{"description":"Returns the configuration of an existing webhook for a given repository.","name":"GITHUB_GET_A_REPOSITORY_WEBHOOK","parameters":{"description":"Request schema for `GetARepositoryWebhook`","properties":{"hook_id":{"description":"The unique identifier of the hook. You can find this value in the `X-GitHub-Hook-ID` header of a webhook delivery.","examples":[12345678,87654321],"title":"Hook Id","type":"integer"},"owner":{"description":"The account owner of the repository (e.g., a user or organization). The name is not case-sensitive.","examples":["octocat","microsoft"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case-sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","hook_id"],"title":"GetARepositoryWebhookRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific pull request review comment by its ID, provided the repository exists, is accessible, and the comment ID is valid.","name":"GITHUB_GET_A_REVIEW_COMMENT_FOR_A_PULL_REQUEST","parameters":{"description":"Specifies the repository owner, repository name, and comment ID to retrieve a pull request review comment.","properties":{"comment_id":{"description":"Unique identifier of the pull request review comment.","examples":["12345"],"title":"Comment Id","type":"integer"},"owner":{"description":"The account owner of the repository (GitHub username or organization name). Not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository (without the `.git` extension). Not case-sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","comment_id"],"title":"GetAReviewCommentForAPullRequestRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific review for a pull request using its owner, repository, pull request number, and review ID.","name":"GITHUB_GET_A_REVIEW_FOR_A_PULL_REQUEST","parameters":{"description":"Request schema for retrieving a specific review for a pull request.","properties":{"owner":{"description":"The username of the account that owns the repository. This is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"pull_number":{"description":"The numeric identifier of the pull request.","examples":[42],"title":"Pull Number","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This is not case sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"},"review_id":{"description":"The unique numeric identifier of the review.","examples":[80],"title":"Review Id","type":"integer"}},"required":["owner","repo","pull_number","review_id"],"title":"GetAReviewForAPullRequestRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves metadata (name, timestamps, visibility; not the value) for a specific, existing development environment secret associated with the authenticated user's GitHub Codespaces.","name":"GITHUB_GET_A_SECRET_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema for `GetASecretForTheAuthenticatedUser`","properties":{"secret_name":{"description":"The name of the secret to retrieve. This is case-sensitive.","examples":["GH_PAT","AWS_SECRET_ACCESS_KEY","MY_CUSTOM_SECRET"],"title":"Secret Name","type":"string"}},"required":["secret_name"],"title":"GetASecretForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information about a specific self-hosted runner registered within a GitHub organization.","name":"GITHUB_GET_A_SELF_HOSTED_RUNNER_FOR_AN_ORGANIZATION","parameters":{"description":"Specifies the parameters to retrieve a specific self-hosted runner for an organization.","properties":{"org":{"description":"The login name of the GitHub organization. This name is not case-sensitive.","examples":["octo-org"],"title":"Org","type":"string"},"runner_id":{"description":"Unique identifier (ID) of the self-hosted runner.","examples":[123,42],"title":"Runner Id","type":"integer"}},"required":["org","runner_id"],"title":"GetASelfHostedRunnerForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets a specific self-hosted runner for a repository by its unique ID.","name":"GITHUB_GET_A_SELF_HOSTED_RUNNER_FOR_A_REPOSITORY","parameters":{"description":"Request schema for retrieving details of a specific self-hosted runner within a repository.","properties":{"owner":{"description":"The username of the account that owns the repository. This is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This is not case-sensitive.","examples":["hello-world"],"title":"Repo","type":"string"},"runner_id":{"description":"The unique identifier (ID) of the self-hosted runner.","examples":["5"],"title":"Runner Id","type":"integer"}},"required":["owner","repo","runner_id"],"title":"GetASelfHostedRunnerForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves all grades for an existing GitHub Classroom assignment.","name":"GITHUB_GET_ASSIGNMENT_GRADES","parameters":{"description":"Request schema for retrieving grades for a specific GitHub Classroom assignment.\n\nRequires the authenticated user to be an administrator of the GitHub Classroom\nthat contains the assignment.","properties":{"assignment_id":{"description":"The unique identifier of the classroom assignment. This can be obtained from the list_assignments_for_a_classroom action or from the assignment's URL in GitHub Classroom.","examples":[101,20345],"title":"Assignment Id","type":"integer"}},"required":["assignment_id"],"title":"GetAssignmentGradesRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for a specific Git tag object from a GitHub repository, using the SHA of the tag object itself.","name":"GITHUB_GET_A_TAG","parameters":{"description":"Defines the repository and the specific Git tag SHA required to retrieve tag details.","properties":{"owner":{"description":"Username or organization that owns the repository (case-insensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (case-insensitive).","examples":["Spoon-Knife","my-awesome-project"],"title":"Repo","type":"string"},"tag_sha":{"description":"SHA of the Git tag object to retrieve; this is the SHA of the tag object, not the commit it may point to.","examples":["940bd336248efae0f9ee5bc7b2d5c985887b16ac","cfe393729303049576d4f771639b57cfc1973a81"],"title":"Tag Sha","type":"string"}},"required":["owner","repo","tag_sha"],"title":"GetATagRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a GitHub team by its slug from a specific organization.","name":"GITHUB_GET_A_TEAM_BY_NAME","parameters":{"description":"Request schema to get a GitHub team using its slug and organization name.","properties":{"org":{"description":"The organization's name (case-insensitive).","examples":["octo-org"],"title":"Org","type":"string"},"team_slug":{"description":"The slug (URL-friendly version) of the team name.","examples":["justice-league"],"title":"Team Slug","type":"string"}},"required":["org","team_slug"],"title":"GetATeamByNameRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific GitHub notification thread using its unique `thread_id`.","name":"GITHUB_GET_A_THREAD","parameters":{"description":"Request schema for `GetAThread`","properties":{"thread_id":{"description":"The unique identifier of the notification thread, typically obtained from a list of notifications.","examples":["123","4567"],"title":"Thread Id","type":"integer"}},"required":["thread_id"],"title":"GetAThreadRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the authenticated user's subscription details for a specific notification thread, identified by `thread_id`.","name":"GITHUB_GET_A_THREAD_SUBSCRIPTION_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema for `GetAThreadSubscriptionForTheAuthenticatedUser`","properties":{"thread_id":{"description":"The unique identifier of the notification thread. This ID corresponds to the `id` field returned when retrieving notifications, for example, through the 'List notifications for the authenticated user' (GET /notifications) operation.","examples":["12345","67890"],"title":"Thread Id","type":"integer"}},"required":["thread_id"],"title":"GetAThreadSubscriptionForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Browse and list all files/directories in a GitHub repository. Efficiently retrieves the complete repository structure in a single API call when used with recursive mode. Perfect for analyzing codebase structure, finding specific files, or getting an overview of repository contents without cloning.","name":"GITHUB_GET_A_TREE","parameters":{"description":"Request schema for `GetATree`","properties":{"owner":{"description":"Repository owner username or organization name (e.g., for github.com/kubernetes/kubernetes, owner is 'kubernetes').","examples":["octocat","kubernetes","ComposioHQ"],"title":"Owner","type":"string"},"recursive":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"Set to True (or '1'/'true') to fetch the ENTIRE repository file tree recursively (all files and directories in one call). Set to False or leave empty to fetch only the top-level files/folders. For browsing or analyzing the full repository structure, use recursive=True.","examples":[true,false,"1","true"],"title":"Recursive"},"repo":{"description":"Repository name without owner or .git extension (e.g., for github.com/kubernetes/kubernetes, repo is 'kubernetes').","examples":["Spoon-Knife","enhancements","mercury"],"title":"Repo","type":"string"},"tree_sha":{"description":"Branch name (e.g., 'main', 'master'), tag name (e.g., 'v1.0.0'), commit SHA, or tree SHA. Directory paths are NOT supported - use a branch/tag to get the full tree, then extract the directory's SHA from results.","examples":["main","master","develop","v1.25.0","a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"],"title":"Tree Sha","type":"string"}},"required":["owner","repo","tree_sha"],"title":"GetATreeRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the public profile information for an existing GitHub user, specified by their username.","name":"GITHUB_GET_A_USER","parameters":{"description":"Request to retrieve a GitHub user's public profile information.","properties":{"username":{"description":"The GitHub username (handle) of the user to retrieve. This is case-sensitive.","examples":["octocat","torvalds","defunkt"],"title":"Username","type":"string"}},"required":["username"],"title":"GetAUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the configuration for a specific webhook associated with a GitHub organization.","name":"GITHUB_GET_A_WEBHOOK_CONFIGURATION_FOR_AN_ORGANIZATION","parameters":{"description":"Request schema for retrieving the configuration of a specific webhook for a GitHub organization.","properties":{"hook_id":{"description":"Unique ID of the webhook (see `X-GitHub-Hook-ID` header in webhook deliveries).","examples":[123456789],"title":"Hook Id","type":"integer"},"org":{"description":"The GitHub organization's name (case-insensitive).","examples":["octo-org"],"title":"Org","type":"string"}},"required":["org","hook_id"],"title":"GetAWebhookConfigurationForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Returns the configuration for an existing webhook on the specified repository.","name":"GITHUB_GET_A_WEBHOOK_CONFIGURATION_FOR_A_REPOSITORY","parameters":{"description":"Request schema for `GetAWebhookConfigurationForARepository`","properties":{"hook_id":{"description":"The unique identifier of the hook. You can find this value in the `X-GitHub-Hook-ID` header of a webhook delivery.","examples":["123456789","987654321"],"title":"Hook Id","type":"integer"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","hook_id"],"title":"GetAWebhookConfigurationForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Returns detailed information for a specific delivery attempt of a webhook configured for the specified GitHub organization.","name":"GITHUB_GET_A_WEBHOOK_DELIVERY_FOR_AN_ORGANIZATION_WEBHOOK","parameters":{"description":"Request schema for `GetAWebhookDeliveryForAnOrganizationWebhook`","properties":{"delivery_id":{"description":"The unique identifier of the specific webhook delivery attempt.","examples":[12345678901,98765432100],"title":"Delivery Id","type":"integer"},"hook_id":{"description":"The unique identifier of the organization webhook. This ID can be found in the `X-GitHub-Hook-ID` header of a webhook delivery.","examples":[12345678,98765432],"title":"Hook Id","type":"integer"},"org":{"description":"The name of the GitHub organization. This field is not case-sensitive.","examples":["github","my-company-org"],"title":"Org","type":"string"}},"required":["org","hook_id","delivery_id"],"title":"GetAWebhookDeliveryForAnOrganizationWebhookRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for a specific GitHub Actions workflow in a repository, identified by either its numeric ID or its filename.","name":"GITHUB_GET_A_WORKFLOW","parameters":{"description":"Defines the parameters for retrieving a specific GitHub Actions workflow from a repository.","properties":{"owner":{"description":"Username or organization name owning the repository (case-insensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (case-insensitive).","examples":["Spoon-Knife","my-repo-name"],"title":"Repo","type":"string"},"workflow_id":{"description":"Unique numeric identifier of the workflow; use this or `workflow_name`.","examples":[1234567,9876543],"title":"Workflow Id","type":"integer"},"workflow_name":{"description":"Full name of the workflow file (e.g., `ci.yml`); use this or `workflow_id`.","examples":["main.yml","ci-pipeline.yaml","build.yml"],"title":"Workflow Name","type":"string"}},"required":["owner","repo"],"title":"GetWorkflowRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets a specific workflow run by its ID from a GitHub repository.","name":"GITHUB_GET_A_WORKFLOW_RUN","parameters":{"description":"Request schema for `GetAWorkflowRun`","properties":{"exclude_pull_requests":{"default":false,"description":"If true, excludes pull request data; the `pull_requests` array in the response will be empty.","examples":["true","false"],"title":"Exclude Pull Requests","type":"boolean"},"owner":{"description":"The username or organization name that owns the repository (not case-sensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository (case-insensitive, without .git extension).","examples":["Spoon-Knife","my-awesome-project"],"title":"Repo","type":"string"},"run_id":{"description":"Unique ID of the workflow run.","examples":["123456789","987654321"],"title":"Run Id","type":"integer"}},"required":["owner","repo","run_id"],"title":"GetAWorkflowRunRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for a specific attempt of a workflow run in a GitHub repository, including its status, conclusion, and timings.","name":"GITHUB_GET_A_WORKFLOW_RUN_ATTEMPT","parameters":{"description":"Request schema for `GetAWorkflowRunAttempt`.","properties":{"attempt_number":{"description":"The attempt number of the specific workflow run. Each re-run of a workflow creates a new attempt number, starting from 1.","examples":["1","2"],"title":"Attempt Number","type":"integer"},"exclude_pull_requests":{"default":false,"description":"If `true`, excludes pull request data from the API response; the `pull_requests` array in the response will then be empty.","examples":["true","false"],"title":"Exclude Pull Requests","type":"boolean"},"owner":{"description":"The account owner of the repository, such as a GitHub username or organization name. This name is not case sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case sensitive.","examples":["Spoon-Knife","my-awesome-project"],"title":"Repo","type":"string"},"run_id":{"description":"The unique identifier (ID) of the workflow run. This ID is specific to a repository and can be obtained from API calls that list workflow runs.","examples":["123456789"],"title":"Run Id","type":"integer"}},"required":["owner","repo","run_id","attempt_number"],"title":"GetAWorkflowRunAttemptRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the billing usage report for a specified GitHub user. Use when you need to analyze billing costs and usage patterns.","name":"GITHUB_GET_BILLING_USAGE_REPORT_USER","parameters":{"description":"Request to get billing usage report for a GitHub user.","properties":{"day":{"description":"If specified, only return results for a single day. The value of `day` is an integer between `1` and `31`. If no `year` or `month` is specified, the default `year` and `month` are used.","examples":[1,15,31],"maximum":31,"minimum":1,"title":"Day","type":"integer"},"month":{"description":"If specified, only return results for a single month. The value of `month` is an integer between `1` and `12`. If no year is specified the default `year` is used.","examples":[1,6,12],"maximum":12,"minimum":1,"title":"Month","type":"integer"},"username":{"description":"The handle for the GitHub user account.","examples":["octocat","composio-dev"],"title":"Username","type":"string"},"year":{"description":"If specified, only return results for a single year. The value of `year` is an integer with four digits representing a year. For example, `2025`. Default value is the current year.","examples":[2025,2024],"title":"Year","type":"integer"}},"required":["username"],"title":"GetBillingUsageReportUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves branch protection settings for a specific, existing, and accessible branch in a GitHub repository; protection feature availability varies by GitHub product plan.","name":"GITHUB_GET_BRANCH_PROTECTION","parameters":{"description":"Specifies the owner, repository, and branch for retrieving branch protection settings.","properties":{"branch":{"description":"Name of the branch; wildcard characters are not supported (use GitHub GraphQL API for wildcard matching).","examples":["main","develop","feature/new-login"],"title":"Branch","type":"string"},"owner":{"description":"Account owner of the repository (username or organization name); not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension; not case-sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"GetBranchProtectionRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve the list of AI models available in the GitHub Models catalog. Use when you need to discover available models, their capabilities, token limits, and supported modalities.","name":"GITHUB_GET_CATALOG_MODELS","parameters":{"description":"Request parameters for getting catalog models.","properties":{},"title":"GetCatalogModelsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for a specific check run within a GitHub repository.","name":"GITHUB_GET_CHECK_RUN","parameters":{"description":"Request schema for retrieving a specific check run within a repository.","properties":{"check_run_id":{"description":"The unique numerical identifier of the check run.","examples":[12345,67890],"title":"Check Run Id","type":"integer"},"owner":{"description":"The username of the account that owns the repository. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","check_run_id"],"title":"GetCheckRunRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific check suite (a collection of check runs) by its ID from a repository accessible to the authenticated user.","name":"GITHUB_GET_CHECK_SUITE","parameters":{"description":"Request schema for `GetCheckSuite`","properties":{"check_suite_id":{"description":"The unique identifier of the check suite.","examples":[12345],"title":"Check Suite Id","type":"integer"},"owner":{"description":"The username of the account that owns the repository. This value is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This value is not case sensitive. ","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","check_suite_id"],"title":"GetCheckSuiteRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves details for a specific GitHub Classroom. Requires the authenticated user to be an administrator of the classroom.","name":"GITHUB_GET_CLASSROOM","parameters":{"description":"Request schema for retrieving details of a specific GitHub Classroom.","properties":{"classroom_id":{"description":"The unique identifier of the classroom.","examples":[1001,20345],"title":"Classroom Id","type":"integer"}},"required":["classroom_id"],"title":"GetClassroomRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the full details of a specific GitHub code of conduct using its unique key.","name":"GITHUB_GET_CODE_OF_CONDUCT","parameters":{"description":"Request schema for `GetCodeOfConduct`","properties":{"key":{"description":"Unique key for a specific code of conduct.","examples":["contributor_covenant","citizen_code_of_conduct"],"title":"Key","type":"string"}},"required":["key"],"title":"GetCodeOfConductRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to look up a code of conduct by its key using GitHub's GraphQL API. Use when you need to fetch code of conduct details as part of a GraphQL workflow.","name":"GITHUB_GET_CODE_OF_CONDUCT_GRAPH_QL","parameters":{"description":"Request parameters for looking up a GitHub code of conduct using GraphQL.","properties":{"key":{"description":"The unique key identifier for the code of conduct to retrieve. Common keys include 'contributor_covenant', 'citizen_code_of_conduct', and 'django'.","examples":["contributor_covenant","citizen_code_of_conduct","django"],"title":"Key","type":"string"}},"required":["key"],"title":"GetCodeOfConductGraphQLRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets an existing CodeQL database (including a download URL) for a specified language in an accessible repository, if one has been successfully built for that language.","name":"GITHUB_GET_CODEQL_DATABASE","parameters":{"description":"Request schema for retrieving a CodeQL database for a repository, specifying the owner, repository name, and programming language.","properties":{"language":{"description":"The programming language of the CodeQL database to retrieve.","examples":["csharp","cpp","go","java","javascript","python","ruby"],"title":"Language","type":"string"},"owner":{"description":"The account owner of the repository. This name is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","language"],"title":"GetCodeqlDatabaseRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific code scanning alert, which identifies potential code vulnerabilities or errors, by its number from the specified GitHub repository.","name":"GITHUB_GET_CODE_SCANNING_ALERT","parameters":{"description":"Parameters to identify and retrieve a specific code scanning alert.","properties":{"alert_number":{"description":"Unique number identifying the code scanning alert (must be >= 1), found in the alert's URL or API responses.","examples":[25,101],"minimum":1,"title":"Alert Number","type":"integer"},"owner":{"description":"Username of the account owning the repository (case-insensitive).","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"Repository name, without the `.git` extension (case-insensitive).","examples":["Hello-World","linguist"],"title":"Repo","type":"string"}},"required":["owner","repo","alert_number"],"title":"GetCodeScanningAlertRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for a specific code scanning analysis on an accessible repository, identified by its `analysis_id`.","name":"GITHUB_GET_CODE_SCANNING_ANALYSIS","parameters":{"description":"Request schema for `GetCodeScanningAnalysis`","properties":{"analysis_id":{"description":"Unique ID of the code scanning analysis, obtained by listing all analyses for the repository.","examples":["25","101"],"title":"Analysis Id","type":"integer"},"owner":{"description":"Username or organization name owning the repository (not case-sensitive).","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (not case-sensitive).","examples":["Hello-World","linguist"],"title":"Repo","type":"string"}},"required":["owner","repo","analysis_id"],"title":"GetCodeScanningAnalysisRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the default setup configuration for code scanning in a repository, including state, languages, query suite, and schedule for a repository if it exists.","name":"GITHUB_GET_CODE_SCANNING_DEFAULT_SETUP","parameters":{"description":"Request schema for `GetCodeScanningDefaultSetup`","properties":{"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octo-org"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["security-lab"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetCodeScanningDefaultSetupRequest","type":"object"}},"type":"function"},{"function":{"description":"Call to retrieve detailed information for a `codespace_name` belonging to the authenticated user, ensuring the codespace exists and is accessible.","name":"GITHUB_GET_CODESPACE","parameters":{"description":"Request schema for `GetCodespace`","properties":{"codespace_name":{"description":"Unique name or identifier of the codespace, typically auto-generated upon creation.","examples":["monalisa-octocat-gjr79v2pqx2r"],"title":"Codespace Name","type":"string"}},"required":["codespace_name"],"title":"GetCodespaceRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches commit authors identified during a repository import, used to map authors from an external VCS to GitHub accounts. NOTE: This endpoint has been deprecated by GitHub as of April 12, 2024, and is no longer available. The Source Imports REST API has been retired due to very low usage levels. Please use the GitHub Importer tool at https://github.com/new/import for repository imports.","name":"GITHUB_GET_COMMIT_AUTHORS","parameters":{"description":"Request schema for retrieving commit authors during a repository import.","properties":{"owner":{"description":"The username of the account that owns the repository. This name is not case-sensitive.","examples":["octocat","microsoft"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Spoon-Knife","vscode"],"title":"Repo","type":"string"},"since":{"description":"An optional author ID. If provided, only authors with an ID greater than this specified ID will be returned. This ID refers to the `id` field of an author object in the response, and can be used for paginating through the list of authors.","examples":["0","123"],"title":"Since","type":"integer"}},"required":["owner","repo"],"title":"GetCommitAuthorsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the full details of a specific commit comment in a GitHub repository, using its unique identifier.","name":"GITHUB_GET_COMMIT_COMMENT","parameters":{"description":"Request schema for retrieving a specific commit comment from a repository.","properties":{"comment_id":{"description":"The unique identifier of the commit comment.","examples":[1420582,8675309],"title":"Comment Id","type":"integer"},"owner":{"description":"The account owner of the repository. This name is not case-sensitive.","examples":["octocat","google"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","comment_id"],"title":"GetCommitCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information (including author, committer, message, tree, parents, verification) for a specific commit in a GitHub repository, identified by its SHA.","name":"GITHUB_GET_COMMIT_OBJECT","parameters":{"description":"Request schema for `GetCommitObject`","properties":{"commit_sha":{"description":"SHA identifier of the commit.","examples":["7638417db6d59f3c431d3e1f261cc637155684cd","c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c"],"title":"Commit Sha","type":"string"},"owner":{"description":"Account owner of the repository. The name is not case sensitive.","examples":["octocat","torvalds"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository without the `.git` extension. The name is not case sensitive.","examples":["Spoon-Knife","linux"],"title":"Repo","type":"string"}},"required":["owner","repo","commit_sha"],"title":"GetCommitObjectRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the commit signature protection status for a branch in a repository.","name":"GITHUB_GET_COMMIT_SIGNATURE_PROTECTION","parameters":{"description":"Request schema for retrieving commit signature protection status for a branch.","properties":{"branch":{"description":"The name of the branch. This name IS case-sensitive (unlike owner and repo). Wildcard characters are not allowed. To use wildcard characters in branch names, consider using the GraphQL API.","examples":["main"],"title":"Branch","type":"string"},"owner":{"description":"The account owner of the repository. This name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"GetCommitSignatureProtectionRequest","type":"object"}},"type":"function"},{"function":{"description":"List all statuses for a commit reference (SHA, branch, or tag) in reverse chronological order. Use when you need to check CI/CD status results from various systems for a specific commit.","name":"GITHUB_GET_COMMIT_STATUSES","parameters":{"description":"Request parameters for retrieving commit statuses.","properties":{"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat","microsoft"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of results to fetch. Default: 1","examples":[1,2,3],"minimum":1,"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page, maximum 100. Default: 30","examples":[10,30,100],"maximum":100,"minimum":1,"title":"Per Page","type":"integer"},"ref":{"description":"The commit reference. Can be a commit SHA, branch name (heads/BRANCH_NAME), or tag name (tags/TAG_NAME).","examples":["master","main","6dcb09b5b57875f334f61aebed695e2e4193db5e","heads/main","tags/v1.0.0"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository without the .git extension. The name is not case sensitive.","examples":["Hello-World","vscode"],"title":"Repo","type":"string"}},"required":["owner","repo","ref"],"title":"GetCommitStatusesRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a repository's community profile metrics, including health percentage and the presence of key community files (e.g., README, LICENSE).","name":"GITHUB_GET_COMMUNITY_PROFILE_METRICS","parameters":{"description":"Specifies the target repository for community health metrics.","properties":{"owner":{"description":"Username of the account owning the repository. Not case-sensitive.","examples":["octocat","google"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without '.git' extension. Not case-sensitive.","examples":["Spoon-Knife","guava"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetCommunityProfileMetricsRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets contextual hovercard information for a GitHub user; `subject_type` and `subject_id` can be jointly provided for more specific details.","name":"GITHUB_GET_CONTEXTUAL_INFORMATION_FOR_A_USER","parameters":{"description":"Request to fetch contextual hovercard information for a GitHub user.","properties":{"subject_id":{"description":"Entity ID for `subject_type` for more specific hovercard context; required if `subject_type` is also given.","examples":["12345","org_id_abc"],"title":"Subject Id","type":"string"},"subject_type":{"description":"Entity type for more specific hovercard context (e.g., 'repository'); required if `subject_id` is also given.","enum":["organization","repository","issue","pull_request"],"examples":["organization","repository","issue","pull_request"],"title":"SubjectTypeEnm","type":"string"},"username":{"description":"GitHub username for whom to retrieve hovercard data.","examples":["octocat","torvalds"],"title":"Username","type":"string"}},"required":["username"],"title":"GetContextualInformationForAUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific custom deployment protection rule (used by GitHub Apps for external validation or manual approval of deployments) for a given environment in a repository.","name":"GITHUB_GET_CUSTOM_DEPLOYMENT_PROTECTION_RULE","parameters":{"description":"Request schema for `GetCustomDeploymentProtectionRule`","properties":{"environment_name":{"description":"The name of the environment. The name must be URL encoded if it contains special characters (e.g., any slashes `/` must be replaced with `%2F`).","examples":["production","staging%2Ffeature-branch"],"title":"Environment Name","type":"string"},"owner":{"description":"The account owner of the repository (username or organization name). This name is not case sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"protection_rule_id":{"description":"The unique identifier of the custom deployment protection rule. Get this ID from GITHUB_GET_ALL_DEPLOYMENT_PROTECTION_RULES_FOR_AN_ENVIRONMENT action.","examples":[3515,12345],"title":"Protection Rule Id","type":"integer"},"repo":{"description":"The name of the repository without the `.git` extension. This name is not case sensitive.","examples":["linguist","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","environment_name","protection_rule_id"],"title":"GetCustomDeploymentProtectionRuleRequest","type":"object"}},"type":"function"},{"function":{"description":"Get pre-flight data (e.g., default location, devcontainer path) for creating a Codespace in a given repository (must exist and be accessible), optionally for a specific Git ref.","name":"GITHUB_GET_DEFAULT_ATTRIBUTES_FOR_A_CODESPACE","parameters":{"description":"Request schema.","properties":{"client_ip":{"description":"Optional IP address to override default location auto-detection (e.g., for proxied requests). If unspecified, location is inferred from source IP.","examples":["192.0.2.1","203.0.113.25"],"title":"Client Ip","type":"string"},"owner":{"description":"Username of the account owning the repository (case-insensitive).","examples":["octocat","github"],"title":"Owner","type":"string"},"ref":{"description":"Git reference (branch name, tag name, or commit SHA) for devcontainer configuration. If omitted, the repository's default branch is used.","examples":["main","v1.2.3","c3d0be41ec9ae96945425e2d399739c8998e9afd"],"title":"Ref","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (case-insensitive).","examples":["hello-world","Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetDefaultAttributesForACodespaceRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the default GITHUB_TOKEN workflow permissions and settings for a GitHub organization.","name":"GITHUB_GET_DEFAULT_WORKFLOW_PERMISSIONS_FOR_AN_ORGANIZATION","parameters":{"description":"Request schema for `GetDefaultWorkflowPermissionsForAnOrganization`","properties":{"org":{"description":"The name of the organization. This name is not case-sensitive.","examples":["my-org-name"],"title":"Org","type":"string"}},"required":["org"],"title":"GetDefaultWorkflowPermissionsForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the default workflow permissions (`read` or `write`) for the GITHUB_TOKEN and whether it can approve pull request reviews in an existing and accessible repository.","name":"GITHUB_GET_DEFAULT_WORKFLOW_PERMISSIONS_FOR_A_REPOSITORY","parameters":{"description":"Request schema for `GetDefaultWorkflowPermissionsForARepository`","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetDefaultWorkflowPermissionsForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the dependency diff between two Git revisions in a repository, where 'basehead' specifies the revisions and 'name' can optionally scope to a specific manifest file.","name":"GITHUB_GET_DEPENDENCY_DIFF","parameters":{"description":"Request schema for `GetDependencyDiff`","properties":{"basehead":{"description":"A string specifying the base and head Git revisions to compare, in the format `BASE_REF...HEAD_REF`. `BASE_REF` and `HEAD_REF` can be commit SHAs, branch names, or tags. For example, `main...develop` or `v1.0.0...v1.1.0`.","examples":["main...develop","sha111abc...sha222def","v1.0.0...HEAD"],"title":"Basehead","type":"string"},"name":{"description":"The optional full path, relative to the repository root, of a specific dependency manifest file (e.g., `package-lock.json`, `pom.xml`). If provided, the diff will be scoped to this file.","examples":["package-lock.json","app/requirements.txt","subdir/pom.xml"],"title":"Name","type":"string"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","my-cool-project"],"title":"Repo","type":"string"}},"required":["owner","repo","basehead"],"title":"GetDependencyDiffRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets a specific deploy key, identified by its `key_id`, for the GitHub repository specified by `owner` and `repo`.","name":"GITHUB_GET_DEPLOY_KEY","parameters":{"description":"Request schema to get a specific deploy key for a repository.","properties":{"key_id":{"description":"The unique numerical identifier of the deploy key.","examples":[12345,67890],"title":"Key Id","type":"integer"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world","my-repo"],"title":"Repo","type":"string"}},"required":["owner","repo","key_id"],"title":"GetDeployKeyRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets a specific deployment by ID from a repository, provided the repository and deployment ID exist.","name":"GITHUB_GET_DEPLOYMENT","parameters":{"description":"Request schema for retrieving a specific deployment within a GitHub repository.","properties":{"deployment_id":{"description":"The unique numeric identifier of the deployment to retrieve.","examples":[12345],"title":"Deployment Id","type":"integer"},"owner":{"description":"The username of the account that owns the repository. This field is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the '.git' extension. This field is not case-sensitive.","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo","deployment_id"],"title":"GetDeploymentRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific deployment branch policy for an environment in a repository, identified by its unique ID.","name":"GITHUB_GET_DEPLOYMENT_BRANCH_POLICY","parameters":{"description":"Request schema for retrieving a specific deployment branch policy for an environment.","properties":{"branch_policy_id":{"description":"The unique identifier of the branch policy.","examples":[36147260],"title":"Branch Policy Id","type":"integer"},"environment_name":{"description":"The name of the environment. The name must be URL encoded; for example, replace any slashes in the name with `%2F`.","examples":["production","staging%2Fdeploy"],"title":"Environment Name","type":"string"},"owner":{"description":"The account owner of the repository. This name is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo","environment_name","branch_policy_id"],"title":"GetDeploymentBranchPolicyRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific deployment status by its ID for a given deployment within a GitHub repository.","name":"GITHUB_GET_DEPLOYMENT_STATUS","parameters":{"description":"Request schema for `GetDeploymentStatus`","properties":{"deployment_id":{"description":"The unique identifier of the deployment.","examples":["1","42"],"title":"Deployment Id","type":"integer"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"},"status_id":{"description":"The unique identifier of the deployment status.","examples":["10","253"],"title":"Status Id","type":"integer"}},"required":["owner","repo","deployment_id","status_id"],"title":"GetDeploymentStatusRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information about a specific export of a codespace.","name":"GITHUB_GET_DETAILS_ABOUT_A_CODESPACE_EXPORT","parameters":{"description":"Request schema for `GetDetailsAboutACodespaceExport`","properties":{"codespace_name":{"description":"The unique name of the codespace.","examples":["monalisa-glorious-space-engine-vx96rp797j92r7x"],"title":"Codespace Name","type":"string"},"export_id":{"description":"The ID of the export operation. Currently, only 'latest' is supported, which refers to the most recent export for the specified codespace.","examples":["latest"],"title":"Export Id","type":"string"}},"required":["codespace_name","export_id"],"title":"GetDetailsAboutACodespaceExportRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches a specific discussion by its number from a team within an organization. This is a read-only action that retrieves discussion details including title, body, author information, comment count, and reactions. The authenticated user must be a member of the organization to access team discussions.","name":"GITHUB_GET_DISCUSSION","parameters":{"description":"Request schema for retrieving a specific discussion within a team.","properties":{"discussion_number":{"description":"The discussion's unique number within the team.","examples":[1,42,123],"title":"Discussion Number","type":"integer"},"org":{"description":"The organization's name (case-insensitive).","examples":["octo-org"],"title":"Org","type":"string"},"team_slug":{"description":"The team's slug (URL-friendly name).","examples":["justice-league","engineering-team"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","discussion_number"],"title":"GetDiscussionRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches a specific comment from a team discussion within a specific organization.","name":"GITHUB_GET_DISCUSSION_COMMENT","parameters":{"description":"Request schema for `GetDiscussionComment`","properties":{"comment_number":{"description":"The unique number identifying the comment within the discussion.","examples":[101],"title":"Comment Number","type":"integer"},"discussion_number":{"description":"The unique number identifying the discussion.","examples":[42],"title":"Discussion Number","type":"integer"},"org":{"description":"The name of the organization. This field is not case-sensitive.","examples":["github"],"title":"Org","type":"string"},"team_slug":{"description":"The slug of the team name. This is the team name converted to lowercase, with spaces and special characters replaced by hyphens. For example, 'Developer Tools Team' becomes 'developer-tools-team'.","examples":["justice-league","developers"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","discussion_number","comment_number"],"title":"GetDiscussionCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all emojis available for use on GitHub, including custom and Unicode emojis.","name":"GITHUB_GET_EMOJIS","parameters":{"description":"Request schema for the `GetEmojis` action. This action does not require any parameters.","properties":{},"title":"GetEmojisRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to look up a pending enterprise unaffiliated member invitation by invitee and enterprise. Use when you need to check the status of a specific invitation.","name":"GITHUB_GET_ENTERPRISE_MEMBER_INVITATION","parameters":{"description":"Request parameters for looking up a pending enterprise member invitation.","properties":{"enterprise_slug":{"description":"The slug of the enterprise the user was invited to join. Enterprise slugs are used to identify enterprises in GitHub URLs (e.g., 'acme-corp').","examples":["acme-corp","my-enterprise"],"title":"Enterprise Slug","type":"string"},"user_login":{"description":"The login (username) of the user invited to join the enterprise. This is the GitHub username of the invitee.","examples":["octocat","monalisa"],"title":"User Login","type":"string"}},"required":["enterprise_slug","user_login"],"title":"GetEnterpriseMemberInvitationRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches a list of available GitHub feed URLs for the authenticated user.","name":"GITHUB_GET_FEEDS","parameters":{"description":"Request schema for the `GetFeeds` action. This action does not require any request parameters.","properties":{},"title":"GetFeedsRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches a specific GitHub gist by its `gist_id`, returning comprehensive details if the gist exists.","name":"GITHUB_GET_GIST","parameters":{"description":"Request schema for `GetGist`","properties":{"gist_id":{"description":"The unique hexadecimal string identifier of the gist, found in its URL.","examples":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0","gist_id_example"],"title":"Gist Id","type":"string"}},"required":["gist_id"],"title":"GetGistRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific Gist comment by its ID and the Gist's ID.","name":"GITHUB_GET_GIST_COMMENT","parameters":{"description":"Request to retrieve a specific comment on a Gist.","properties":{"comment_id":{"description":"The unique numeric identifier of the comment. Obtain this from listing gist comments or from the comment URL.","examples":[12345],"title":"Comment Id","type":"integer"},"gist_id":{"description":"The unique alphanumeric identifier of the Gist (found in the Gist URL after gist.github.com/username/).","examples":["aa5a315d61ae9438b18d"],"title":"Gist Id","type":"string"}},"required":["gist_id","comment_id"],"title":"GetGistCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific revision of a gist.","name":"GITHUB_GET_GIST_REVISION","parameters":{"description":"Request schema for `GetGistRevision`","properties":{"gist_id":{"description":"The unique identifier of the gist.","examples":["aa5a315d61ae9438b18d"],"title":"Gist Id","type":"string"},"sha":{"description":"The SHA (Secure Hash Algorithm) identifier of a specific gist revision. This is a 40-character hexadecimal string.","examples":["039209f0822a1e45614df232d979608b00b4e287"],"title":"Sha","type":"string"}},"required":["gist_id","sha"],"title":"GetGistRevisionRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves total GitHub Actions cache usage statistics for an organization, including active cache count and size across all repositories.","name":"GITHUB_GET_GITHUB_ACTIONS_CACHE_USAGE_FOR_AN_ORGANIZATION","parameters":{"description":"Request schema for retrieving the GitHub Actions cache usage for a specific organization.","properties":{"org":{"description":"Name of the organization (case-insensitive).","examples":["octo-org"],"title":"Org","type":"string"}},"required":["org"],"title":"GetGithubActionsCacheUsageForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the total count of active GitHub Actions caches and their combined size in bytes for a specified repository.","name":"GITHUB_GET_GITHUB_ACTIONS_CACHE_USAGE_FOR_A_REPOSITORY","parameters":{"description":"Request schema for `GetGithubActionsCacheUsageForARepository`","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetGithubActionsCacheUsageForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the GitHub Actions permissions for a specified organization, detailing repository enablement and allowed actions policies.","name":"GITHUB_GET_GITHUB_ACTIONS_PERMISSIONS_FOR_AN_ORGANIZATION","parameters":{"description":"Request to retrieve GitHub Actions permissions for an organization.","properties":{"org":{"description":"The name of the GitHub organization. This field is not case-sensitive.","examples":["github","my-company-org"],"title":"Org","type":"string"}},"required":["org"],"title":"GetGithubActionsPermissionsForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the GitHub Actions permissions policy for a repository, including its enabled status and the scope of allowed actions.","name":"GITHUB_GET_GITHUB_ACTIONS_PERMISSIONS_FOR_A_REPOSITORY","parameters":{"description":"Input schema for GetGithubActionsPermissionsForARepository.","properties":{"owner":{"description":"The username of the account that owns the repository. This is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This is not case-sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetGithubActionsPermissionsForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get billing premium request usage report for a GitHub user. Use when you need to retrieve usage data for premium features like Copilot or AI models.","name":"GITHUB_GET_GITHUB_BILLING_PREMIUM_REQUEST_USAGE_REPORT_USER","parameters":{"description":"Request to get billing premium request usage report for a user.","properties":{"day":{"description":"If specified, only return results for a single day. The value of `day` is an integer between `1` and `31`. If no `year` or `month` is specified, the default `year` and `month` are used.","examples":[1,15,31],"maximum":31,"minimum":1,"title":"Day","type":"integer"},"model":{"description":"The model name to query usage for. The name is not case sensitive.","examples":["gpt-4","claude-3","gemini-pro"],"title":"Model","type":"string"},"month":{"description":"If specified, only return results for a single month. The value of `month` is an integer between `1` and `12`. Default value is the current month. If no year is specified the default `year` is used.","examples":[1,6,12],"maximum":12,"minimum":1,"title":"Month","type":"integer"},"product":{"description":"The product name to query usage for. The name is not case sensitive.","examples":["copilot","models","actions"],"title":"Product","type":"string"},"username":{"description":"The handle for the GitHub user account.","examples":["octocat","composio-dev","torvalds"],"title":"Username","type":"string"},"year":{"description":"If specified, only return results for a single year. The value of `year` is an integer with four digits representing a year. For example, `2025`. Default value is the current year.","examples":[2025,2024,2023],"title":"Year","type":"integer"}},"required":["username"],"title":"GetGithubBillingPremiumRequestUsageReportUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve billing usage summary for a GitHub user account. Use when tracking usage costs, monitoring billing details, or generating usage reports for a specific user. Note: This endpoint only returns data for the past 24 months and is currently in public preview.","name":"GITHUB_GET_GITHUB_BILLING_USAGE_SUMMARY_FOR_USER","parameters":{"description":"Request schema for retrieving billing usage summary for a GitHub user.","properties":{"day":{"description":"If specified, only return results for a single day. The value of day is an integer between 1 and 31. If no year or month is specified, the default year and month are used.","examples":[1,15,31],"maximum":31,"minimum":1,"title":"Day","type":"integer"},"month":{"description":"If specified, only return results for a single month. The value of month is an integer between 1 and 12. Default value is the current month. If no year is specified the default year is used.","examples":[1,6,12],"maximum":12,"minimum":1,"title":"Month","type":"integer"},"product":{"description":"The product name to query usage for. The name is not case sensitive.","examples":["actions","packages","copilot"],"title":"Product","type":"string"},"repository":{"description":"The repository name to query for usage in the format owner/repository.","examples":["octocat/Hello-World","composio-dev/composio"],"title":"Repository","type":"string"},"sku":{"description":"The SKU to query for usage.","examples":["actions-compute","copilot-business"],"title":"Sku","type":"string"},"username":{"description":"The handle for the GitHub user account.","examples":["octocat","composio-dev"],"title":"Username","type":"string"},"year":{"description":"If specified, only return results for a single year. The value of year is an integer with four digits representing a year (e.g., 2025). Default value is the current year.","examples":[2024,2025,2026],"title":"Year","type":"integer"}},"required":["username"],"title":"GetGithubBillingUsageSummaryForUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches GitHub's publicly available metadata, useful for configuring network security policies or IP allow-listing.","name":"GITHUB_GET_GITHUB_META_INFORMATION","parameters":{"description":"Request schema for `GetGithubMetaInformation`; does not require any request parameters.","properties":{},"title":"GetGithubMetaInformationRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information about a specific GitHub Pages build for a repository, which must have GitHub Pages enabled.","name":"GITHUB_GET_GITHUB_PAGES_BUILD","parameters":{"description":"Request schema for `GetGithubPagesBuild`","properties":{"build_id":{"description":"The unique identifier of the GitHub Pages build to retrieve.","examples":[12345,98765],"title":"Build Id","type":"integer"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","linguist"],"title":"Repo","type":"string"}},"required":["owner","repo","build_id"],"title":"GetGithubPagesBuildRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific .gitignore template from GitHub by its name, which must be an existing template in GitHub's collection.","name":"GITHUB_GET_GITIGNORE_TEMPLATE","parameters":{"description":"Request schema for `GetGitignoreTemplate`","properties":{"name":{"description":"The name of the .gitignore template to retrieve (e.g., 'Python', 'Node'). This is case-sensitive.","examples":["Python","Java","Node","Go","Rails"],"title":"Name","type":"string"}},"required":["name"],"title":"GetGitignoreTemplateRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieve a global GitHub security advisory by its GHSA identifier. Use this to get detailed information about vulnerabilities including severity, affected packages, CVSS scores, and references.","name":"GITHUB_GET_GLOBAL_SECURITY_ADVISORY","parameters":{"description":"Request parameters for retrieving a global GitHub security advisory.","properties":{"ghsa_id":{"description":"The GHSA (GitHub Security Advisory) identifier of the advisory.","examples":["GHSA-24rp-q3w6-vc56","GHSA-abcd-1234-wxyz"],"title":"Ghsa Id","type":"string"}},"required":["ghsa_id"],"title":"GetGlobalSecurityAdvisoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to fetch any GitHub object by its global node ID. Use when you have a node_id and need to retrieve the corresponding object details.","name":"GITHUB_GET_GRAPHQL_NODE","parameters":{"description":"Request parameters for fetching a GitHub GraphQL node by its global ID.\n\nid: The global node ID of the object to fetch (e.g., User, Repository, Issue).\nfragment: Optional GraphQL fragment to specify which fields to retrieve from the returned object.","properties":{"fragment":{"description":"Optional GraphQL fragment to specify which fields to retrieve from the returned node. Use GraphQL inline fragment syntax (e.g., '... on User { login name }'). If omitted, only the 'id' field will be returned.","examples":["... on User { login name bio }","... on Repository { name owner { login } }","... on Issue { title state number }"],"title":"Fragment","type":"string"},"id":{"description":"The global node ID of the object to fetch. This is the GraphQL global identifier (node_id) returned by GitHub's API, not the numeric ID.","examples":["U_kgDOCNqc1g","MDQ6VXNlcjE=","R_kgDOGw8pTA"],"title":"Id","type":"string"}},"required":["id"],"title":"GetGraphqlNodeRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve the authenticated client's GitHub GraphQL API rate limit information. Use when you need to check remaining quota, current usage, or reset time for GraphQL requests.","name":"GITHUB_GET_GRAPHQL_RATE_LIMIT","parameters":{"description":"Request parameters for fetching GitHub GraphQL API rate limit information.","properties":{"dry_run":{"default":false,"description":"If true, calculate the cost for the query without evaluating it. Use this to estimate query costs without consuming actual quota.","examples":[false,true],"title":"Dry Run","type":"boolean"}},"title":"GetGraphqlRateLimitRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information, including processing status and results URL, about a specific SARIF (Static Analysis Results Interchange Format) upload for a repository, uniquely identified by its sarif_id.","name":"GITHUB_GET_INFORMATION_ABOUT_A_SARIF_UPLOAD","parameters":{"description":"Request schema for getting information about a SARIF upload.","properties":{"owner":{"description":"Username of the account that owns the repository (not case-sensitive).","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (not case-sensitive).","examples":["Hello-World"],"title":"Repo","type":"string"},"sarif_id":{"description":"Unique identifier of the SARIF upload, returned when a SARIF file is successfully uploaded.","examples":["fb2cce85-340f-4d93-9498-26018bddd7eb"],"title":"Sarif Id","type":"string"}},"required":["owner","repo","sarif_id"],"title":"GetInformationAboutASarifUploadRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves interaction restrictions for an organization, showing which GitHub user types can interact with its public repositories and when restrictions expire; returns an empty response if no restrictions are set.","name":"GITHUB_GET_INTERACTION_RESTRICTIONS_FOR_AN_ORGANIZATION","parameters":{"description":"Request schema for `GetInteractionRestrictionsForAnOrganization`","properties":{"org":{"description":"The name of the organization. This name is not case-sensitive.","examples":["github"],"title":"Org","type":"string"}},"required":["org"],"title":"GetInteractionRestrictionsForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves active interaction restrictions for a repository, detailing which user groups are limited from activities like commenting or creating pull requests, and when these restrictions expire.","name":"GITHUB_GET_INTERACTION_RESTRICTIONS_FOR_A_REPOSITORY","parameters":{"description":"Request schema for retrieving interaction restrictions for a repository.","properties":{"owner":{"description":"The username of the account that owns the repository. This is case-insensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This is case-insensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetInteractionRestrictionsForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves currently active interaction restrictions for the authenticated user's public repositories.","name":"GITHUB_GET_INTERACTION_RESTRICTIONS_FOR_PUBLIC_REPOS","parameters":{"description":"Request schema for `GetInteractionRestrictionsForPublicRepos`. This action does not require any request parameters.","properties":{},"title":"GetInteractionRestrictionsForPublicReposRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific label by its name from a specified GitHub repository.","name":"GITHUB_GET_LABEL","parameters":{"description":"Request schema for retrieving a specific label from a repository by its name.","properties":{"name":{"description":"The name of the label to retrieve. GitHub's API treats label names as case-insensitive for this operation.","examples":["bug","enhancement","good first issue"],"title":"Name","type":"string"},"owner":{"description":"The account owner of the repository (e.g., a username or organization name). The name is not case-sensitive.","examples":["octocat","kubernetes"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. The name is not case-sensitive.","examples":["Spoon-Knife","documentation"],"title":"Repo","type":"string"}},"required":["owner","repo","name"],"title":"GetLabelRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists files larger than 100MB identified during a previous source import for the specified repository. NOTE: This endpoint has been deprecated by GitHub as of April 12, 2024, and is no longer available. The Source Imports REST API has been retired due to very low usage levels. Please use the GitHub Importer tool at https://github.com/new/import for repository imports.","name":"GITHUB_GET_LARGE_FILES","parameters":{"description":"Request schema for `GetLargeFiles`","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetLargeFilesRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves information about the most recent GitHub Pages build for a repository, which must exist, be accessible, have GitHub Pages enabled, and have at least one prior build.","name":"GITHUB_GET_LATEST_PAGES_BUILD","parameters":{"description":"Request schema for `GetLatestPagesBuild`","properties":{"owner":{"description":"The username of the account or the name of the organization that owns the repository. This name is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the '.git' extension. This name is not case-sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetLatestPagesBuildRequest","type":"object"}},"type":"function"},{"function":{"description":"Call this action to retrieve comprehensive details for a specific software license recognized by GitHub, using its unique license key.","name":"GITHUB_GET_LICENSE","parameters":{"description":"Request schema for `GetLicense`","properties":{"license":{"description":"The unique identifier (key) of the license. This is typically the SPDX license identifier (e.g., 'mit', 'apache-2.0').","examples":["mit","apache-2.0","gpl-3.0"],"title":"License","type":"string"}},"required":["license"],"title":"GetLicenseRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to look up an open source license by its SPDX ID using GitHub's GraphQL API. Use when you need to fetch license details for compliance tracking or repository setup.","name":"GITHUB_GET_LICENSE_GRAPH_QL","parameters":{"description":"Request parameters for looking up an open source license using GraphQL.","properties":{"key":{"description":"The license's downcased SPDX ID. Common keys include 'mit', 'apache-2.0', 'gpl-3.0', 'bsd-3-clause', 'lgpl-3.0', 'mpl-2.0', 'agpl-3.0', 'unlicense', 'isc', 'bsd-2-clause'.","examples":["mit","apache-2.0","gpl-3.0","bsd-3-clause"],"title":"Key","type":"string"}},"required":["key"],"title":"GetLicenseGraphQLRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches an ASCII art representation of GitHub's Octocat, suitable for text-based displays.","name":"GITHUB_GET_OCTOCAT","parameters":{"description":"Specifies an optional custom message for Octocat's speech bubble in the ASCII art.","properties":{"s":{"description":"Custom message for Octocat's speech bubble. If omitted or empty, a random 'Zen of GitHub' message will be displayed instead.","examples":["Hello, Octocat!","GitHub is awesome!","Keep on coding!"],"title":"S","type":"string"}},"title":"GetOctocatRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the OpenID Connect (OIDC) subject claim customization template for a repository, which defines the `sub` claim structure in OIDC tokens for GitHub Actions workflows; returns the default configuration if no customization is applied.","name":"GITHUB_GET_OIDC_SUBJECT_CLAIM_TEMPLATE","parameters":{"description":"Request schema for `GetOidcSubjectClaimTemplate`","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetOidcSubjectClaimTemplateRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the list of allowed actions and reusable workflows for an organization when the 'allowed_actions' policy is set to 'selected'.","name":"GITHUB_GET_ORG_ALLOWED_ACTIONS","parameters":{"description":"Request schema for retrieving the settings for allowed actions and reusable workflows in an organization.","properties":{"org":{"description":"The unique identifier or name of the organization. This field is not case sensitive.","examples":["my-organization","github"],"title":"Org","type":"string"}},"required":["org"],"title":"GetAllowedActionsAndReusableWorkflowsForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve an organization's audit log events for security and compliance investigations. Use when tracking organizational changes, security audits, or compliance monitoring. Requires organization owner permissions and read:audit_log scope.","name":"GITHUB_GET_ORGANIZATION_AUDIT_LOG","parameters":{"description":"Request schema for retrieving organization audit log events.","properties":{"after":{"description":"A cursor for pagination. Returns events after this cursor. Use the cursor from the response to fetch the next page.","examples":["MTYzMjg1NjQwMDAwMA=="],"title":"After","type":"string"},"before":{"description":"A cursor for pagination. Returns events before this cursor. Use the cursor from the response to fetch the previous page.","examples":["MTYzMjg1NjQwMDAwMA=="],"title":"Before","type":"string"},"include":{"description":"The event types to include. Can be 'web' (web interface events), 'git' (Git events), or 'all'. Defaults to 'web'.","examples":["web","git","all"],"title":"Include","type":"string"},"order":{"description":"The order of audit log events. Can be 'asc' (ascending, oldest first) or 'desc' (descending, newest first). Defaults to 'desc'.","examples":["desc","asc"],"title":"Order","type":"string"},"org":{"description":"The organization name. The name is not case sensitive.","examples":["github","octocat-org"],"title":"Org","type":"string"},"per_page":{"description":"The number of results per page (max 100). Defaults to 30.","examples":[30,50,100],"maximum":100,"minimum":1,"title":"Per Page","type":"integer"},"phrase":{"description":"A search phrase to filter audit log events. For example, 'action:org' for organization-related events, or 'actor:octocat' for events by a specific user.","examples":["action:org","actor:octocat","repo:my-org/my-repo"],"title":"Phrase","type":"string"}},"required":["org"],"title":"GetOrganizationAuditLogRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the definition (schema) of a specific, existing custom property for an organization.","name":"GITHUB_GET_ORGANIZATION_CUSTOM_PROPERTY","parameters":{"description":"Request to retrieve a specific custom property definition for an organization.","properties":{"custom_property_name":{"description":"Name of the custom property to retrieve (case-sensitive).","examples":["environment","team-ownership","project_status"],"title":"Custom Property Name","type":"string"},"org":{"description":"Organization's login name (not case-sensitive).","examples":["octo-org","my-company"],"title":"Org","type":"string"}},"required":["org","custom_property_name"],"title":"GetOrganizationCustomPropertyRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get an item from an organization-owned GitHub Projects V2 project. Use when you need to retrieve details about a specific project item including its content, fields, timestamps, and creator information.","name":"GITHUB_GET_ORGANIZATION_PROJECT_ITEM","parameters":{"description":"Request schema for getting an organization project item.","properties":{"fields":{"description":"Limit results to specific fields, by their IDs. If not specified, the title field will be returned. Format: fields[]=123&fields[]=456 or fields=123,456,789","examples":["123,456,789","field1,field2,field3"],"title":"Fields","type":"string"},"item_id":{"description":"The unique identifier of the project item.","examples":[67089720,12345678],"title":"Item Id","type":"integer"},"org":{"description":"The organization name. The name is not case sensitive.","examples":["github","composio","microsoft"],"title":"Org","type":"string"},"project_number":{"description":"The project's number.","examples":[1,5,10],"title":"Project Number","type":"integer"}},"required":["org","project_number","item_id"],"title":"GetOrganizationProjectItemRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves an organization's public key, which must be used to encrypt secret values before they are configured for Codespaces.","name":"GITHUB_GET_ORGANIZATION_PUBLIC_KEY","parameters":{"description":"Request schema for retrieving an organization's public key for encrypting Codespaces secrets.","properties":{"org":{"description":"The name of the GitHub organization. This field is not case-sensitive.","examples":["MyAwesomeOrg","github"],"title":"Org","type":"string"}},"required":["org"],"title":"GetOrganizationPublicKeyRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the public key for an existing GitHub organization, required for encrypting Dependabot secrets. Requires admin:org scope.","name":"GITHUB_GET_ORGANIZATION_PUBLIC_KEY_FOR_DEPENDABOT","parameters":{"description":"Request model for fetching the public key used to encrypt Dependabot secrets for an organization.","properties":{"org":{"description":"The name of the GitHub organization. Requires admin:org scope (must be an organization admin). This field is not case-sensitive.","examples":["github","microsoft"],"title":"Org","type":"string"}},"required":["org"],"title":"GetOrganizationPublicKeyForDependabotRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves metadata for a specific secret available to an organization's GitHub Codespaces without exposing its encrypted value.","name":"GITHUB_GET_ORG_DEV_ENVIRONMENT_SECRET_SAFELY","parameters":{"description":"Request schema for retrieving metadata for an organization's Codespaces secret.","properties":{"org":{"description":"The organization name (login). The name is not case-sensitive.","examples":["my-organization"],"title":"Org","type":"string"},"secret_name":{"description":"The name of the development environment secret to retrieve.","examples":["MY_API_KEY"],"title":"Secret Name","type":"string"}},"required":["org","secret_name"],"title":"GetOrgDevEnvironmentSecretSafelyRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the OpenID Connect (OIDC) subject claim customization template for a GitHub organization, which defines how the `sub` claim in OIDC tokens for workflows is constructed.","name":"GITHUB_GET_ORG_OIDC_SUBJECT_CLAIM_TEMPLATE","parameters":{"description":"Request schema for retrieving the OpenID Connect (OIDC) subject claim customization template for a GitHub organization.","properties":{"org":{"description":"The name of the GitHub organization (case-insensitive). This is the organization's login/username, not a numeric ID.","examples":["github","my-actions-org"],"title":"Org","type":"string"}},"required":["org"],"title":"GetOrgOidcSubjectClaimTemplateRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the DNS health check status (e.g., CNAME/A records, HTTPS) for a GitHub Pages site; the check may be pending (HTTP 202) on initial calls or after site changes.","name":"GITHUB_GET_PAGES_DNS_HEALTH_CHECK","parameters":{"description":"Request schema for `GetPagesDnsHealthCheck`","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetPagesDnsHealthCheckRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves information for a GitHub Pages site, which must be enabled for the repository.","name":"GITHUB_GET_PAGES_SITE","parameters":{"description":"Request schema for retrieving information about a GitHub Pages site.","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetPagesSiteRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves page view statistics for a repository over the last 14 days, including total views, unique visitors, and a daily or weekly breakdown.","name":"GITHUB_GET_PAGE_VIEWS","parameters":{"description":"Request schema for retrieving repository page view statistics.","properties":{"owner":{"description":"The username of the account that owns the repository. This field is case-insensitive.","examples":["octocat"],"title":"Owner","type":"string"},"per":{"default":"day","description":"The time unit for which to aggregate page views.","enum":["day","week"],"examples":["day","week"],"title":"Per","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is case-insensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetPageViewsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves pending deployment environments for a specific workflow run that are awaiting approval due to protection rules.","name":"GITHUB_GET_PENDING_DEPLOYMENTS_FOR_A_WORKFLOW_RUN","parameters":{"description":"Request model for retrieving pending deployments for a specific workflow run.","properties":{"owner":{"description":"Account owner of the repository (user or organization); not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension; not case-sensitive.","examples":["Spoon-Knife","my-awesome-project"],"title":"Repo","type":"string"},"run_id":{"description":"Unique numerical identifier of the workflow run.","examples":["12345","67890"],"title":"Run Id","type":"integer"}},"required":["owner","repo","run_id"],"title":"GetPendingDeploymentsForAWorkflowRunRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves permission information for a GitHub project (classic) collaborator. Returns the permission level and full user object for a collaborator on a GitHub project (classic). The permission returned can be admin, write, read, or none.","name":"GITHUB_GET_PROJECT_PERMISSION_FOR_A_USER","parameters":{"description":"Request schema for retrieving a user's permission level for a specific GitHub project (V2).","properties":{"project_id":{"description":"The unique identifier (number) of the project.","examples":[1,5,42],"title":"Project Id","type":"integer"},"username":{"description":"The GitHub username of the project owner or the user whose permission is being checked.","examples":["octocat"],"title":"Username","type":"string"}},"required":["project_id","username"],"title":"GetProjectPermissionForAUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a repository's public key for encrypting GitHub Codespaces secrets; requires `repo` scope or equivalent read access to codespaces secrets for private repositories.","name":"GITHUB_GET_PUBLIC_KEY_FOR_SECRET_ENCRYPTION","parameters":{"description":"Parameters to get a repository's public key for encrypting Codespaces secrets.","properties":{"owner":{"description":"Username or organization name of the repository owner (not case-sensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"Repository name, without the `.git` extension (not case-sensitive).","examples":["Spoon-Knife","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetPublicKeyForSecretEncryptionRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the authenticated user's public key for encrypting GitHub Codespaces secrets. The returned key must be used with libsodium sealed box encryption before creating or updating secrets via the API.","name":"GITHUB_GET_PUBLIC_KEY_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema for retrieving the authenticated user's public key for encrypting GitHub Codespaces secrets. No parameters are required.","properties":{},"title":"GetPublicKeyForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the pull request review protection settings for a specific branch in a GitHub repository, if such protection is configured.","name":"GITHUB_GET_PULL_REQUEST_REVIEW_PROTECTION","parameters":{"description":"Request schema for retrieving pull request review protection settings for a branch.","properties":{"branch":{"description":"The name of the branch. Wildcard characters are not allowed. To use wildcard characters in branch names, refer to the GitHub GraphQL API.","examples":["main","develop"],"title":"Branch","type":"string"},"owner":{"description":"The account owner of the repository. This name is not case-sensitive. For example, in 'octocat/Hello-World', 'octocat' is the owner.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive. For example, in 'octocat/Hello-World', 'Hello-World' is the repository name.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"GetPullRequestReviewProtectionRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the authenticated user's current GitHub API rate limit status, including usage and limits across different resource categories.","name":"GITHUB_GET_RATE_LIMIT_STATUS_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema to retrieve the GitHub API rate limit status for the authenticated user.","properties":{},"title":"GetRateLimitStatusForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to fetch raw file content from a GitHub repository. Returns raw bytes in whatever format the file uses (JSON, CSV, binary, etc.) — parsing and validation are the caller's responsibility. Ensure owner, repo, ref, and path are consistent when combining with other GitHub tools to avoid mismatched-ref errors.","name":"GITHUB_GET_RAW_REPOSITORY_CONTENT","parameters":{"description":"Request model for fetching raw repository file content.","properties":{"owner":{"description":"The GitHub username or organization name that owns the repository. This is the account name shown in the repository URL (e.g., for github.com/torvalds/linux, the owner is 'torvalds'). Case-insensitive.","examples":["octocat","torvalds","facebook"],"title":"Owner","type":"string"},"path":{"description":"The file path within the repository, relative to the repository root. Use forward slashes for directory separators (e.g., 'src/utils/helper.js'). Do not include leading slash. Do NOT pass a full GitHub URL - only the relative path within the repo. Must exactly match the file path as it exists in the repository — use GITHUB_GET_A_TREE to discover valid paths rather than guessing directory structure.","examples":["README.md","docs/index.html","src/main.py"],"title":"Path","type":"string"},"ref":{"description":"The branch name, tag name, or commit SHA to fetch the file from. Defaults to the repository's default branch (usually 'main' or 'master'). Recommended to pass explicitly — omitting it fetches from the default branch, which may not match the ref used in other tool calls and can yield unexpected or missing content.","examples":["main","master","v1.0.0","develop"],"title":"Ref","type":"string"},"repo":{"description":"The repository name (not the full URL). This is the repository name shown in the repository URL (e.g., for github.com/torvalds/linux, the repo is 'linux'). Do not include '.git' suffix. Case-insensitive.","examples":["Hello-World","linux","react"],"title":"Repo","type":"string"}},"required":["owner","repo","path"],"title":"GetRawRepositoryContentRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the settings for allowed actions and reusable workflows in a repository. Requires the repository's `allowed_actions` policy to be set to `selected` (returns 409 if set to `all` or `local_only`).","name":"GITHUB_GET_REPO_ALLOWED_ACTIONS","parameters":{"description":"Request schema for `GetAllowedActionsAndReusableWorkflowsForARepository`","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetAllowedActionsAndReusableWorkflowsForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets metadata (name, creation/update timestamps) for a specific, existing development environment secret (Codespaces secret) in a repository, without exposing its value.","name":"GITHUB_GET_REPO_DEV_ENV_SECRET","parameters":{"description":"Request schema for retrieving a specific development environment secret for a repository.","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is case-insensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is case-insensitive. ","examples":["hello-world","docs"],"title":"Repo","type":"string"},"secret_name":{"description":"The name of the development environment secret to retrieve.","examples":["MY_API_KEY","DATABASE_URL"],"title":"Secret Name","type":"string"}},"required":["owner","repo","secret_name"],"title":"GetRepoDevEnvSecretRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve attestations by subject digest from a GitHub repository. Use when you need to verify or check attestations for a specific artifact identified by its SHA256 digest.","name":"GITHUB_GET_REPOS_ATTESTATIONS","parameters":{"description":"Request schema for retrieving attestations by subject digest.","properties":{"after":{"description":"A cursor, as given in the Link header. If specified, the query only searches for results after this cursor. For more information, see \"Using pagination in the REST API\".","title":"After","type":"string"},"before":{"description":"A cursor, as given in the Link header. If specified, the query only searches for results before this cursor. For more information, see \"Using pagination in the REST API\".","title":"Before","type":"string"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["cli"],"title":"Owner","type":"string"},"per_page":{"default":30,"description":"The number of results per page (max 100). For more information, see \"Using pagination in the REST API\".","maximum":100,"minimum":1,"title":"Per Page","type":"integer"},"predicate_type":{"description":"Optional filter for fetching attestations with a given predicate type. This option accepts `provenance`, `sbom`, `release`, or freeform text for custom predicate types.","examples":["provenance","sbom","release"],"title":"Predicate Type","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["cli"],"title":"Repo","type":"string"},"subject_digest":{"description":"The parameter should be set to the attestation's subject's SHA256 digest, in the form `sha256:HEX_DIGEST`.","examples":["sha256:fdb77f31b8a6dd23c3fd858758d692a45f7fc76383e37d475bdcae038df92afc"],"title":"Subject Digest","type":"string"}},"required":["owner","repo","subject_digest"],"title":"GetReposAttestationsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the total number of clones and a breakdown of clone activity (daily or weekly) for a specified repository over the preceding 14 days.","name":"GITHUB_GET_REPOSITORY_CLONES","parameters":{"description":"Request schema for retrieving repository clone statistics.","properties":{"owner":{"description":"The username of the account that owns the repository. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"per":{"default":"day","description":"Specifies the time frame for aggregating clone data: `day` for daily clone counts, or `week` for weekly clone counts (a week starts on Monday).","enum":["day","week"],"examples":["day","week"],"title":"Per","type":"string"},"repo":{"description":"The name of the repository, without the '.git' extension. This field is not case-sensitive.","examples":["Hello-World","mercury"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetRepositoryClonesRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a file's Base64 encoded content or lists a directory's contents from a GitHub repository.","name":"GITHUB_GET_REPOSITORY_CONTENT","parameters":{"description":"Request schema for retrieving content from a GitHub repository.","properties":{"owner":{"description":"Required. The account owner of the repository. This name is not case sensitive. Can also accept full repository path in format 'owner/repo' - the repo part will be extracted automatically.","examples":["octocat","octocat/Hello-World"],"title":"Owner","type":"string"},"path":{"description":"Required. The path to the content in the repository. This can be a file or a directory path. Use an empty string to retrieve the contents of the repository's root directory. Leading slashes are automatically stripped (e.g., '/src/main.js' becomes 'src/main.js'). CRITICAL: Do NOT pass branch names here (e.g., 'feat/godlocal-dev', 'main', 'develop'). Branch names belong in the `ref` parameter, not the `path` parameter. The path should be the file or directory path within the repository (e.g., 'src/main.js', 'README.md'). Do NOT include the branch or ref name as a prefix in the path. For example, use 'src/main.js' not 'main/src/main.js' - the branch is specified separately via the ref parameter. File paths must include the file extension (e.g., 'README.md', not 'README'). For common files like README, LICENSE, or CHANGELOG without extensions, the action will automatically try common extensions (.md, .txt, .rst). Paths are case-sensitive and must match the exact casing in the repository (e.g., 'Docker' is different from 'docker'). If you receive a 404 'Not Found' error, verify the exact path by first listing the parent directory contents.","examples":["README.md","src/main.js","docs",""],"title":"Path","type":"string"},"ref":{"description":"The name of the commit, branch, or tag to read from. Use this parameter to specify which branch (e.g., 'feat/godlocal-dev', 'main', 'develop'), tag (e.g., 'v1.2.0'), or commit SHA you want to access. If not provided, the repository's default branch will be used. Note: Branch names should be passed here, NOT in the path parameter.","examples":["main","feat/godlocal-dev","develop","v1.2.0","c8bca7c6a66f490c70b29cf3ac3d64070049ea73"],"title":"Ref","type":"string"},"repo":{"description":"Required. The name of the repository, without the `.git` extension. This name is not case sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","path"],"title":"GetRepositoryContentRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to lookup a repository by owner and name using GitHub's GraphQL API. Use when you need comprehensive repository information.","name":"GITHUB_GET_REPOSITORY_GRAPH_QL","parameters":{"description":"Request parameters for looking up a repository via GraphQL.","properties":{"followRenames":{"description":"Follow repository renames. If true, the query will follow repository renames to find the current repository.","title":"Follow Renames","type":"boolean"},"name":{"description":"The name of the repository.","examples":["Hello-World","react","vscode"],"title":"Name","type":"string"},"owner":{"description":"The login field of a user or organization that owns the repository.","examples":["octocat","facebook","microsoft"],"title":"Owner","type":"string"}},"required":["owner","name"],"title":"GetRepositoryGraphQLRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to lookup a repository owner (User or Organization) by login using GitHub's GraphQL API. Use when you need to determine whether a login is a user or organization and retrieve basic profile information.","name":"GITHUB_GET_REPOSITORY_OWNER","parameters":{"description":"Request parameters for looking up a repository owner (User or Organization) by login.","properties":{"login":{"description":"The username or organization name to lookup. This is case-sensitive and must match the exact GitHub login.","examples":["github","octocat","microsoft","torvalds"],"title":"Login","type":"string"}},"required":["login"],"title":"GetRepositoryOwnerRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific user's permission level ('admin', 'write', 'read', or 'none') for a given repository, where 'maintain' role is reported as 'write' and 'triage' as 'read'.","name":"GITHUB_GET_REPOSITORY_PERMISSIONS_FOR_A_USER","parameters":{"description":"Request schema for `GetRepositoryPermissionsForAUser`","properties":{"owner":{"description":"Account owner of the repository (case-insensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (case-insensitive).","examples":["Spoon-Knife","my-repo-name"],"title":"Repo","type":"string"},"username":{"description":"GitHub user's handle (case-insensitive).","examples":["octocat","monalisa"],"title":"Username","type":"string"}},"required":["owner","repo","username"],"title":"GetRepositoryPermissionsForAUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets a repository's public key, used to encrypt secrets for Dependabot.","name":"GITHUB_GET_REPOSITORY_PUBLIC_KEY_FOR_ENCRYPTION","parameters":{"description":"Request schema for `GetRepositoryPublicKeyForEncryption`","properties":{"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["hello-world","my-repo"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetRepositoryPublicKeyForEncryptionRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves metadata for an existing Dependabot secret in a repository, without exposing its encrypted value.","name":"GITHUB_GET_REPOSITORY_SECRET_SECURELY","parameters":{"description":"Request schema for retrieving a specific Dependabot secret from a repository.\nThis action fetches metadata about the secret, not its encrypted value.","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world","my-private-repo"],"title":"Repo","type":"string"},"secret_name":{"description":"The name of the Dependabot secret to retrieve.","examples":["NPM_TOKEN","DOCKER_HUB_PASSWORD"],"title":"Secret Name","type":"string"}},"required":["owner","repo","secret_name"],"title":"GetRepositorySecretSecurelyRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve a repository security advisory using its GHSA identifier. Use when you need detailed information about a specific security vulnerability.","name":"GITHUB_GET_REPOSITORY_SECURITY_ADVISORY","parameters":{"description":"Request schema for GetRepositorySecurityAdvisory.","properties":{"ghsa_id":{"description":"The GHSA (GitHub Security Advisory) identifier of the advisory.","examples":["GHSA-428q-q3vv-3fq3"],"title":"Ghsa Id","type":"string"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","ghsa_id"],"title":"GetRepositorySecurityAdvisoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific delivery for a repository webhook, identified by its `hook_id` and `delivery_id`.","name":"GITHUB_GET_REPOSITORY_WEBHOOK_DELIVERY","parameters":{"description":"Request schema for `GetRepositoryWebhookDelivery`","properties":{"delivery_id":{"description":"The unique identifier of a specific delivery for the webhook. This ID corresponds to a single delivery attempt. You can find this by listing webhook deliveries.","examples":[193416293975,189876589405],"title":"Delivery Id","type":"integer"},"hook_id":{"description":"The unique identifier of the webhook. You can find this value in the `X-GitHub-Hook-ID` header of a webhook delivery, or by listing repository webhooks.","examples":[123456789,481552437],"title":"Hook Id","type":"integer"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","hook_id","delivery_id"],"title":"GetRepositoryWebhookDeliveryRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves all active rules for a specific branch in a GitHub repository, excluding rules in 'evaluate' or 'disabled' status.","name":"GITHUB_GET_RULES_FOR_A_BRANCH","parameters":{"description":"Request schema for `GetRulesForABranch`","properties":{"branch":{"description":"The name of the branch. Wildcard characters are not supported for this parameter; to use wildcards, refer to the GitHub GraphQL API.","examples":["main","develop","feature/new-login"],"title":"Branch","type":"string"},"owner":{"description":"The GitHub account owner of the repository. This name is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of results to fetch.","examples":["1","2","5"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (max 100).","examples":["30","50","100"],"title":"Per Page","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Spoon-Knife","my-repo"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"GetRulesForABranchRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets a single organization Dependabot secret's metadata (name, timestamps, visibility) without revealing its encrypted value. Requires admin:org scope.","name":"GITHUB_GET_SINGLE_ORG_SECRET_WITHOUT_DECRYPTION","parameters":{"description":"Request schema for `GetSingleOrgSecretWithoutDecryption`","properties":{"org":{"description":"The name of the GitHub organization (case-insensitive).","examples":["octo-org"],"title":"Org","type":"string"},"secret_name":{"description":"The name of the Dependabot secret to retrieve (case-insensitive).","examples":["MY_API_TOKEN","NPM_TOKEN"],"title":"Secret Name","type":"string"}},"required":["org","secret_name"],"title":"GetSingleOrgSecretWithoutDecryptionRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the status check protection settings for a specific branch in a GitHub repository, if status check protection is enabled for it.","name":"GITHUB_GET_STATUS_CHECKS_PROTECTION","parameters":{"description":"Request schema for retrieving the status check protection settings of a branch.","properties":{"branch":{"description":"The name of the branch. Wildcard characters are not supported in branch names for this endpoint; for wildcard support, please refer to the GitHub GraphQL API.","examples":["main"],"title":"Branch","type":"string"},"owner":{"description":"The account owner of the repository (e.g., a GitHub username or organization name). This field is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"GetStatusChecksProtectionRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a user's role and membership status within a specific team in an organization. Returns membership details including role ('member' or 'maintainer') and state ('active' or 'pending'). If the user is not a member of the team, returns is_member=False with a descriptive message. Requires the authenticated user to be an organization member with visibility into the team.","name":"GITHUB_GET_TEAM_MEMBERSHIP_FOR_A_USER","parameters":{"description":"Request schema for `GetTeamMembershipForAUser`","properties":{"org":{"description":"The name of the GitHub organization. This field is not case-sensitive.","examples":["octo-org","github"],"title":"Org","type":"string"},"team_slug":{"description":"The URL-friendly version of the team name (slug).","examples":["justice-league","all-developers"],"title":"Team Slug","type":"string"},"username":{"description":"The GitHub username of the user.","examples":["octocat","monalisa"],"title":"Username","type":"string"}},"required":["org","team_slug","username"],"title":"GetTeamMembershipForAUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists teams with explicit push access to a protected branch, provided team restrictions are configured in the branch's protection settings; returns an empty list otherwise.","name":"GITHUB_GET_TEAMS_WITH_ACCESS_TO_THE_PROTECTED_BRANCH","parameters":{"description":"Request to list teams with access to a protected branch.","properties":{"branch":{"description":"Name of the branch; does not support wildcard characters (for wildcard support, use the GraphQL API).","examples":["main","develop"],"title":"Branch","type":"string"},"owner":{"description":"Username of the repository owner; not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"Repository name, without the `.git` extension; not case-sensitive.","examples":["Hello-World","linguist"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"GetTeamsWithAccessToTheProtectedBranchRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the profile information for the currently authenticated GitHub user, including potentially private details based on user settings.","name":"GITHUB_GET_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema for `GetTheAuthenticatedUser`.","properties":{},"title":"GetTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the aggregated commit status (e.g., success, failure, pending) from all checks for a specific reference (SHA, branch, or tag) in a GitHub repository.","name":"GITHUB_GET_THE_COMBINED_STATUS_FOR_A_SPECIFIC_REFERENCE","parameters":{"description":"Request schema for retrieving the combined status of a commit reference in a GitHub repository.","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"page":{"default":1,"description":"The page number for the results to retrieve. See \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)\" for more information.","examples":["1","5"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"The number of results to display per page, with a maximum of 100. Details on pagination can be found in \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"","examples":["30","100"],"title":"Per Page","type":"integer"},"ref":{"description":"The specific commit reference to query. This can be a commit SHA, a branch name (e.g., `heads/main`), or a tag name (e.g., `tags/v1.0.0`). See \"[Git References](https://git-scm.com/book/en/v2/Git-Internals-Git-References)\" for more details.","examples":["main","heads/feature-branch","tags/v1.0.0","069c5735a24b09215071404c2a536657079d3aca"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","ref"],"title":"GetTheCombinedStatusForASpecificReferenceRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the 'punch card' data, showing hourly commit counts for each day of the week for an existing and accessible repository.","name":"GITHUB_GET_THE_HOURLY_COMMIT_COUNT_FOR_EACH_DAY","parameters":{"description":"Request schema for retrieving the hourly commit count for each day of the week for a repository.","properties":{"owner":{"description":"The account owner of the repository. This is typically the username or organization name. The name is not case sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. The name is not case sensitive.","examples":["Spoon-Knife","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetTheHourlyCommitCountForEachDayRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches weekly commit totals and daily commit counts for the last 52 weeks for a specified GitHub repository.","name":"GITHUB_GET_THE_LAST_YEAR_OF_COMMIT_ACTIVITY","parameters":{"description":"Request schema for retrieving the last year of commit activity for a repository.","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","kubernetes"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","kubernetes"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetTheLastYearOfCommitActivityRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches the latest official (non-prerelease, non-draft) release for a GitHub repository; requires at least one such published release.","name":"GITHUB_GET_THE_LATEST_RELEASE","parameters":{"description":"Request schema for retrieving the latest release of a GitHub repository.","properties":{"owner":{"description":"The account owner of the repository (e.g., a GitHub username or organization name). This field is not case-sensitive.","examples":["octocat","kubernetes"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Hello-World","community"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetTheLatestReleaseRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the license file and its details for a repository, optionally from a specific Git reference (branch, tag, or commit SHA).","name":"GITHUB_GET_THE_LICENSE_FOR_A_REPOSITORY","parameters":{"description":"Request schema for `GetTheLicenseForARepository`","properties":{"owner":{"description":"The account owner of the repository (username or organization name). This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"ref":{"description":"The specific Git reference (branch name, tag name, or commit SHA) to retrieve the license from. For a branch, it can be formatted as `refs/heads/` or simply ``. To reference a pull request's merge commit, use `refs/pull//merge`. If omitted, the license from the repository's default branch is used.","examples":["main","refs/heads/develop","v1.2.3","0c476bfc7EC7330390FCIF9761F27890123ABCD"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","linguist"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetTheLicenseForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the detailed approval history for a specific workflow run in a GitHub repository, detailing each review's environment, state, reviewer, and comments, to track the approval process for workflows, particularly automated deployments.","name":"GITHUB_GET_THE_REVIEW_HISTORY_FOR_A_WORKFLOW_RUN","parameters":{"description":"Request schema for `GetTheReviewHistoryForAWorkflowRun`","properties":{"owner":{"description":"The username of the account or the name of the organization that owns the repository. This name is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"},"run_id":{"description":"The unique identifier of the workflow run for which to retrieve the review history.","examples":[123456789],"title":"Run Id","type":"integer"}},"required":["owner","repo","run_id"],"title":"GetTheReviewHistoryForAWorkflowRunRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the status of a specific GitHub Pages deployment for a repository, which must have GitHub Pages enabled.","name":"GITHUB_GET_THE_STATUS_OF_A_GITHUB_PAGES_DEPLOYMENT","parameters":{"description":"Request schema for `GetTheStatusOfAGithubPagesDeployment`","properties":{"owner":{"description":"The account owner of the repository (username or organization name). This field is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"pages_deployment_id":{"anyOf":[{"type":"integer"},{"type":"string"}],"description":"The unique identifier of the GitHub Pages deployment. This can be the numeric ID of the deployment or the commit SHA that triggered the deployment.","examples":[42,"123abc456def789ghi012jkl345mno678pqr90st"],"title":"Pages Deployment Id"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","pages_deployment_id"],"title":"GetTheStatusOfAGithubPagesDeploymentRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches the weekly commit activity (additions and deletions per week) for a repository over the past year; best for repositories with under 10,000 commits.","name":"GITHUB_GET_THE_WEEKLY_COMMIT_ACTIVITY","parameters":{"description":"Defines the request parameters for fetching weekly commit activity for a repository.","properties":{"owner":{"description":"The account owner of the repository (e.g., a user or organization). This name is not case-sensitive.","examples":["octocat","kubernetes"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Spoon-Knife","sig-release"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetTheWeeklyCommitActivityRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the weekly commit count for a repository, detailing commits by the owner and all contributors over the last 52 weeks; GitHub may return a 202 status or an empty response if statistics are being computed.","name":"GITHUB_GET_THE_WEEKLY_COMMIT_COUNT","parameters":{"description":"Request schema for `GetTheWeeklyCommitCount`","properties":{"owner":{"description":"The account owner of the repository. This name is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetTheWeeklyCommitCountRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a random quote from GitHub's 'Zen of GitHub' collection, reflecting GitHub's design philosophies and offering humorous insights, useful for displaying GitHub wisdom or a lighthearted message.","name":"GITHUB_GET_THE_ZEN_OF_GITHUB","parameters":{"description":"Request model for retrieving a Zen of GitHub quote.","properties":{},"title":"GetTheZenOfGithubRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches the top 10 most viewed content paths for a repository from the last 14 days.","name":"GITHUB_GET_TOP_REFERRAL_PATHS","parameters":{"description":"Request to fetch the top referral paths for a repository.","properties":{"owner":{"description":"Username of the account or organization owning the repository (not case-sensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"Repository name, without the `.git` extension (not case-sensitive).","examples":["Spoon-Knife","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetTopReferralPathsRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches the top 10 websites that referred traffic to a repository within the last 14 days.","name":"GITHUB_GET_TOP_REFERRAL_SOURCES","parameters":{"description":"Parameters to fetch top referral sources for a repository.","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is case-insensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is case-insensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetTopReferralSourcesRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a GitHub user's profile information by their unique numeric account ID. Use when you know the user's numeric ID rather than their username.","name":"GITHUB_GET_USER_BY_ID","parameters":{"description":"Request to retrieve a GitHub user's information using their numeric account ID.","properties":{"account_id":{"description":"The unique numeric identifier of the GitHub user account to retrieve.","examples":[1,583231,12345678],"title":"Account Id","type":"integer"}},"required":["account_id"],"title":"GetUserByIdRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get an item from a user-owned project in GitHub Projects V2. Use when you need to retrieve details about a specific item (issue, pull request, or draft issue) in a user's project board.","name":"GITHUB_GET_USER_PROJECT_ITEM","parameters":{"description":"Request parameters for getting a user project item.","properties":{"fields":{"description":"Limit results to specific fields, by their IDs. If not specified, the title field will be returned. Example: fields[]=123&fields[]=456&fields[]=789 or fields=123,456,789","examples":["123,456,789","123"],"title":"Fields","type":"string"},"item_id":{"description":"The unique identifier of the project item.","examples":[157096956],"title":"Item Id","type":"integer"},"project_number":{"description":"The project's number.","examples":[1,22],"title":"Project Number","type":"integer"},"username":{"description":"The handle for the GitHub user account.","examples":["octocat","composio-dev"],"title":"Username","type":"string"}},"required":["username","project_number","item_id"],"title":"GetUserProjectItemRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get attestations by subject digest for a GitHub user. Use when you need to retrieve attestation data for a specific artifact or resource identified by its subject digest.","name":"GITHUB_GET_USERS_ATTESTATIONS","parameters":{"description":"Request parameters for getting attestations by subject digest.","properties":{"after":{"description":"A cursor, as given in the Link header. If specified, the query only searches for results after this cursor.","examples":["Y3Vyc29yOnYyOpK5MjAyNC0wMS0wMVQwMDowMDowMCswMDowMM4AAAAA"],"title":"After","type":"string"},"before":{"description":"A cursor, as given in the Link header. If specified, the query only searches for results before this cursor.","examples":["Y3Vyc29yOnYyOpK5MjAyNC0wMS0wMVQwMDowMDowMCswMDowMM4AAAAA"],"title":"Before","type":"string"},"per_page":{"default":30,"description":"The number of results per page (max 100). For more information, see 'Using pagination in the REST API'.","examples":[30,50,100],"maximum":100,"minimum":1,"title":"Per Page","type":"integer"},"predicate_type":{"description":"Optional filter for fetching attestations with a given predicate type. This option accepts 'provenance', 'sbom', 'release', or freeform text for custom predicate types.","examples":["provenance","sbom","release"],"title":"Predicate Type","type":"string"},"subject_digest":{"description":"Subject digest for the attestation. Must include the algorithm prefix (e.g., 'sha256:' or 'sha512:').","examples":["sha256:360587aa9781d76b825f65f56f40738ceaf79b5ef5996b4b121c7544c9f7d662"],"title":"Subject Digest","type":"string"},"username":{"description":"The handle for the GitHub user account.","examples":["grafana","octocat"],"title":"Username","type":"string"}},"required":["username","subject_digest"],"title":"GetUsersAttestationsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list GitHub Projects v2 for a specified user. Use when you need to retrieve all projects owned by a user with pagination support.","name":"GITHUB_GET_USERS_PROJECTS_V2","parameters":{"description":"Request schema for listing projects for a user.","properties":{"after":{"description":"A cursor, as given in the Link header. If specified, the query only searches for results after this cursor. For more information, see 'Using pagination in the REST API'.","examples":["Y3Vyc29yOnYyOpK5MjAyMS0wMS0wMVQwMDowMDowMC0wNzowMM4AAA=="],"title":"After","type":"string"},"before":{"description":"A cursor, as given in the Link header. If specified, the query only searches for results before this cursor. For more information, see 'Using pagination in the REST API'.","examples":["Y3Vyc29yOnYyOpK5MjAyMS0wMS0wMVQwMDowMDowMC0wNzowMM4AAA=="],"title":"Before","type":"string"},"per_page":{"description":"The number of results per page (max 100). For more information, see 'Using pagination in the REST API'.","examples":[30,50,100],"maximum":100,"minimum":1,"title":"Per Page","type":"integer"},"q":{"description":"Limit results to projects of the specified type.","examples":["github"],"title":"Q","type":"string"},"username":{"description":"The handle for the GitHub user account.","examples":["octocat","torvalds"],"title":"Username","type":"string"}},"required":["username"],"title":"GetUsersProjectsV2Request","type":"object"}},"type":"function"},{"function":{"description":"Lists users with explicit push access to a protected branch, provided its protection rule restricts pushes to specific users.","name":"GITHUB_GET_USERS_WITH_ACCESS_TO_THE_PROTECTED_BRANCH","parameters":{"description":"Request schema to list users with access to a protected branch.","properties":{"branch":{"description":"The name of the protected branch. Wildcard characters are not supported. To use wildcard characters in branch names, refer to the GitHub GraphQL API.","examples":["main","develop","feature/integration"],"title":"Branch","type":"string"},"owner":{"description":"The account owner of the repository (e.g., user or organization). This name is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"GetUsersWithAccessToTheProtectedBranchRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve the authenticated user's profile information via GitHub GraphQL. Use when working with GraphQL queries or need viewer details in GraphQL format.","name":"GITHUB_GET_VIEWER_GRAPHQL","parameters":{"description":"Request parameters for retrieving the authenticated viewer's information via GraphQL.","properties":{},"title":"GetViewerGraphqlRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the access level settings for a private repository, determining how workflows outside this repository can use its actions and reusable workflows.","name":"GITHUB_GET_WORKFLOW_EXTERNAL_ACCESS","parameters":{"description":"Request schema for `GetWorkflowExternalAccess` action, specifying the repository owner and name.","properties":{"owner":{"description":"The account owner of the repository. This name is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"GetWorkflowExternalAccessRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for a specific job within a GitHub Actions workflow run, given its `job_id` which must be valid for the specified repository's workflow.","name":"GITHUB_GET_WORKFLOW_RUN_JOB","parameters":{"description":"Request schema for retrieving detailed information about a specific job within a GitHub Actions workflow run.","properties":{"job_id":{"description":"The unique numerical identifier of the job to retrieve.","examples":[123456789],"title":"Job Id","type":"integer"},"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo","job_id"],"title":"GetWorkflowRunJobRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the billable time, in milliseconds, for a specific workflow run, detailing time spent on various operating systems.","name":"GITHUB_GET_WORKFLOW_RUN_USAGE","parameters":{"description":"Request schema for `GetWorkflowRunUsage`","properties":{"owner":{"description":"Account owner of the repository (username or organization name); not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive. ","examples":["Hello-World"],"title":"Repo","type":"string"},"run_id":{"description":"Unique identifier of the workflow run.","examples":[123456789],"title":"Run Id","type":"integer"}},"required":["owner","repo","run_id"],"title":"GetWorkflowRunUsageRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the billable time (in milliseconds, broken down by runner OS) for a specific workflow within a repository for the current billing cycle.","name":"GITHUB_GET_WORKFLOW_USAGE","parameters":{"description":"Request schema for `GetWorkflowUsage`, providing details to identify the specific workflow.","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world","my-project"],"title":"Repo","type":"string"},"workflow_id":{"anyOf":[{"type":"integer"},{"type":"string"}],"description":"The unique identifier (ID) of the workflow or the workflow's file name (e.g., 'main.yml').","examples":[12345,"ci-workflow.yml"],"title":"Workflow Id"}},"required":["owner","repo","workflow_id"],"title":"GetWorkflowUsageRequest","type":"object"}},"type":"function"},{"function":{"description":"Use to determine if the authenticated user has starred a specific GitHub repository, which is confirmed by an HTTP 204 status (resulting in an empty dictionary in the response data); the action fails (e.g., HTTP 404) if the repository is not starred or does not exist.","name":"GITHUB_IS_REPOSITORY_STARRED_BY_THE_USER","parameters":{"description":"Request model for specifying the repository to check for a star by the authenticated user.","properties":{"owner":{"description":"The account owner of the repository (e.g., a user or organization). This name is not case sensitive.","examples":["octocat","example-org"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case sensitive.","examples":["Spoon-Knife","my-project"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"CheckIfRepoStarredByAuthUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists accepted assignments (student repositories created after acceptance) for an existing GitHub Classroom assignment, identified by its unique `assignment_id`.","name":"GITHUB_LIST_ACCEPTED_ASSIGNMENTS_FOR_AN_ASSIGNMENT","parameters":{"description":"Request schema for `ListAcceptedAssignmentsForAnAssignment`","properties":{"assignment_id":{"description":"The unique identifier of the classroom assignment for which to list accepted assignments.","examples":["12345"],"title":"Assignment Id","type":"integer"},"page":{"default":1,"description":"Page number of the results to retrieve.","examples":["1","2"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results to return per page (maximum 100).","examples":["30","50","100"],"title":"Per Page","type":"integer"}},"required":["assignment_id"],"title":"ListAcceptedAssignmentsForAnAssignmentRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists repositories that the authenticated user can access through a specific GitHub App installation. Returns repositories where the user has explicit :read, :write, or :admin permission through the installation. The response includes permission details for each repository. Prerequisites: - Requires a GitHub App user access token (not a standard OAuth token) - Use GITHUB_LIST_APP_INSTALLATIONS first to get valid installation IDs","name":"GITHUB_LIST_ACCESSIBLE_REPOSITORIES","parameters":{"description":"Request for listing repositories accessible via a GitHub App installation.\n\nNOTE: This endpoint requires a GitHub App user access token (not a standard OAuth token).\nFirst use GITHUB_LIST_APP_INSTALLATIONS to get valid installation IDs.","properties":{"installation_id":{"description":"The unique identifier of the GitHub App installation. Get this from GITHUB_LIST_APP_INSTALLATIONS.","examples":[1234567,8765432],"title":"Installation Id","type":"integer"},"page":{"default":1,"description":"Page number of the results to fetch, starting from 1.","examples":[1,2,5],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of repositories to return per page. Maximum is 100.","examples":[30,50,100],"title":"Per Page","type":"integer"}},"required":["installation_id"],"title":"ListRepositoriesAccessibleToTheUserAccessTokenRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists GitHub App installations accessible to the authenticated user via their access token, including installation details, permissions, and repository access.","name":"GITHUB_LIST_APP_INSTALLATIONS","parameters":{"description":"Request schema for `ListAppInstallationsUser`","properties":{"page":{"default":1,"description":"Page number of results to retrieve.","title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (max 100).","title":"Per Page","type":"integer"}},"title":"ListAppInstallationsUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists GitHub Apps with push access to a repository's protected branch.","name":"GITHUB_LIST_APPS_WITH_ACCESS_TO_THE_PROTECTED_BRANCH","parameters":{"description":"Request schema for retrieving GitHub Apps with access to a protected branch.","properties":{"branch":{"description":"The name of the protected branch. This name cannot contain wildcard characters. To work with branch names containing wildcard characters, please use the GitHub GraphQL API.","examples":["main","develop","release/v1.0"],"title":"Branch","type":"string"},"owner":{"description":"The username of the account that owns the repository. This field is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the '.git' extension. This field is not case-sensitive.","examples":["Spoon-Knife","linguist"],"title":"Repo","type":"string"}},"required":["owner","repo","branch"],"title":"ListAppsWithAccessToTheProtectedBranchRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists GitHub Actions workflow artifacts for a specified repository, which must exist.","name":"GITHUB_LIST_ARTIFACTS_FOR_A_REPOSITORY","parameters":{"description":"Request schema for the `ListArtifactsForARepository` action, detailing parameters to list workflow artifacts from a GitHub repository.","properties":{"name":{"description":"The name of an artifact. If specified, only artifacts with this exact name will be returned. If omitted or null, all artifacts in the repository are listed (subject to pagination).","examples":["my-build-artifact","coverage-report-linux"],"title":"Name","type":"string"},"owner":{"description":"The account owner of the repository (username or organization name). This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"page":{"default":1,"description":"The page number of the results to fetch, starting from 1.","examples":["1","2","5"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"The number of artifacts to return per page; maximum is 100.","examples":["30","50","100"],"title":"Per Page","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Hello-World","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"ListArtifactsForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists users who can be assigned to issues in a repository, typically those with push access.","name":"GITHUB_LIST_ASSIGNEES","parameters":{"description":"Request schema to list assignees for a repository, including pagination.","properties":{"owner":{"description":"The username of the account that owns the repository. This is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of results (1-indexed).","examples":[1,2],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page. Max 100.","examples":[30,100],"title":"Per Page","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This is not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"ListAssigneesRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all assignments for a given GitHub Classroom `classroom_id`; the classroom must exist and be accessible.","name":"GITHUB_LIST_ASSIGNMENTS_FOR_A_CLASSROOM","parameters":{"description":"Request schema for `ListAssignmentsForAClassroom`","properties":{"classroom_id":{"description":"The unique identifier of the classroom for which assignments are to be listed.","examples":["12345","67890"],"title":"Classroom Id","type":"integer"},"page":{"default":1,"description":"Specifies the page number of the results to retrieve. For more information, refer to GitHub's documentation on [Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).","examples":["1","2","10"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Specifies the number of results to return per page (maximum is 100). For more information, refer to GitHub's documentation on [Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).","examples":["30","50","100"],"title":"Per Page","type":"integer"}},"required":["classroom_id"],"title":"ListAssignmentsForAClassroomRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list attestation repositories for an organization. Use when you need to discover which repositories in an organization have attestations. Attestations provide verifiable metadata about software artifacts.","name":"GITHUB_LIST_ATTESTATION_REPOSITORIES","parameters":{"description":"Request schema for listing attestation repositories for an organization.","properties":{"after":{"description":"A cursor, as given in the Link header. If specified, the query only searches for results after this cursor. For more information, see 'Using pagination in the REST API'.","examples":["Y3Vyc29yOnYyOpK5MjAyMS0wMS0wMVQwMDowMDowMC0wNzowMAo="],"title":"After","type":"string"},"before":{"description":"A cursor, as given in the Link header. If specified, the query only searches for results before this cursor. For more information, see 'Using pagination in the REST API'.","examples":["Y3Vyc29yOnYyOpK5MjAyMS0wMS0wMVQwMDowMDowMC0wNzowMAo="],"title":"Before","type":"string"},"org":{"description":"The organization name. The name is not case sensitive.","examples":["github","octocat-org"],"title":"Org","type":"string"},"per_page":{"description":"The number of results per page (max 100). For more information, see 'Using pagination in the REST API'.","examples":[30,50,100],"maximum":100,"minimum":1,"title":"Per Page","type":"integer"}},"required":["org"],"title":"ListAttestationRepositoriesRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists machine types available for GitHub Codespaces in a repository, optionally using a Git ref to check compatibility based on prebuild availability and devcontainer configurations.","name":"GITHUB_LIST_AVAILABLE_MACHINE_TYPES_FOR_A_REPOSITORY","parameters":{"description":"Request schema for listing available machine types for GitHub Codespaces in a repository.","properties":{"client_ip":{"description":"An IP address used for auto-detecting the location if `location` is not specified. This is particularly useful when requests are proxied, to ensure location-based machine availability is accurate.","title":"Client Ip","type":"string"},"location":{"description":"The geographic location to check for available machine types. If not provided, the location may be inferred. Specifying a location can help find machines in a preferred region.","examples":["EastUs","WestUs","EuropeWest"],"title":"Location","type":"string"},"owner":{"description":"The account owner of the repository. This is typically the username (for personal repositories) or the organization name (for organization-owned repositories). The name is not case sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"ref":{"description":"The Git reference (branch name, tag name, or commit SHA) to check for prebuild availability and devcontainer configuration restrictions. This ensures listed machine types are compatible with the specified repository version.","examples":["main","develop","v1.0.0","07a006b914801f699926087f317a910f07610547"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. The name is not case sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"ListAvailableMachineTypesForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists branches for an existing GitHub repository, with an option to filter by protection status.","name":"GITHUB_LIST_BRANCHES","parameters":{"description":"Request schema for listing branches in a GitHub repository.","properties":{"owner":{"description":"Account owner's username (case-insensitive).","examples":["octocat","torvalds"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number for paginated results.","title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (max 100).","title":"Per Page","type":"integer"},"protected":{"description":"Filter by protection status: `true` for protected, `false` for unprotected; omit for all branches.","title":"Protected","type":"boolean"},"repo":{"description":"Repository name, excluding `.git` extension (case-insensitive).","examples":["Spoon-Knife","linux"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"ListBranchesRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists branches in an accessible repository where the provided commit SHA is the head, useful for identifying development lines based on that commit.","name":"GITHUB_LIST_BRANCHES_FOR_HEAD_COMMIT","parameters":{"description":"Request schema to list branches where a specific commit is the head.","properties":{"commit_sha":{"description":"The full SHA-1 hash of the commit. This action will find branches where this commit is the most recent one (the head).","examples":["c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc","0123456789abcdef0123456789abcdef01234567"],"title":"Commit Sha","type":"string"},"owner":{"description":"The account owner of the repository (e.g., a user or organization). This name is not case-sensitive.","examples":["octocat","my-github-org"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Hello-World","my-repository"],"title":"Repo","type":"string"}},"required":["owner","repo","commit_sha"],"title":"ListBranchesForHeadCommitRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists annotations for a specific check run in a GitHub repository, detailing issues like errors or warnings on particular code lines.","name":"GITHUB_LIST_CHECK_RUN_ANNOTATIONS","parameters":{"description":"Request schema for listing annotations for a check run in a GitHub repository.","properties":{"check_run_id":{"description":"The unique identifier of the check run for which annotations are to be listed.","examples":[21031067,12345],"title":"Check Run Id","type":"integer"},"owner":{"description":"The account owner of the repository. This is typically the username or organization name. The name is not case sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"page":{"default":1,"description":"The page number of the results to fetch. See \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)\" for more details.","examples":[1,2,5],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"The number of results per page (maximum 100). See \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)\" for more details.","examples":[30,50,100],"title":"Per Page","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. The name is not case sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","check_run_id"],"title":"ListCheckRunAnnotationsRequest","type":"object"}},"type":"function"},{"function":{"description":"List GitHub check runs for a commit SHA, branch, or tag to assess CI status and conclusions. Use when you need reliable CI pass/fail signals beyond commit metadata.","name":"GITHUB_LIST_CHECK_RUNS_FOR_A_REF","parameters":{"properties":{"app_id":{"description":"Filter by GitHub App identifier.","examples":[12345],"title":"App Id","type":"integer"},"check_name":{"description":"Filters results to check runs with the specified name.","examples":["build","test","lint"],"title":"Check Name","type":"string"},"filter":{"default":"latest","description":"Filter by completion timestamp: 'latest' returns the most recent check runs, 'all' returns all check runs.","examples":["latest","all"],"title":"Filter","type":"string"},"owner":{"description":"The account owner of the repository (username or organization name). Case-insensitive.","examples":["octocat","microsoft"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of results to fetch.","examples":[1,2,3],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page, maximum 100.","examples":[10,30,100],"title":"Per Page","type":"integer"},"ref":{"description":"The git reference - can be a commit SHA, branch name, or tag name.","examples":["main","develop","v1.0.0","d6fde92930d4715a2b49857d24b940956b26d2d3"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository without .git extension. Case-insensitive.","examples":["hello-world","vscode"],"title":"Repo","type":"string"},"status":{"description":"Filter by check run status: queued, in_progress, or completed.","examples":["queued","in_progress","completed"],"title":"Status","type":"string"}},"required":["owner","repo","ref"],"title":"ListCheckRunsForARefRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists check runs for a specific check suite in a GitHub repository, optionally filtering by check name or status.","name":"GITHUB_LIST_CHECK_RUNS_IN_A_CHECK_SUITE","parameters":{"description":"Request schema for `ListCheckRunsInACheckSuite`","properties":{"check_name":{"description":"Filter check runs by this name; returns all names if omitted.","examples":["LinterTest","unit-tests"],"title":"Check Name","type":"string"},"check_suite_id":{"description":"Numeric ID of the check suite.","examples":[1234567890],"title":"Check Suite Id","type":"integer"},"filter":{"default":"latest","description":"Filter by `completed_at` timestamp: 'latest' for most recent, 'all' for all check runs.","enum":["latest","all"],"examples":["latest","all"],"title":"Filter","type":"string"},"owner":{"description":"Username or organization name of the repository owner (case-insensitive).","examples":["octocat","github"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of results to fetch (starts at 1).","title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of check runs per page (max 100).","title":"Per Page","type":"integer"},"repo":{"description":"Repository name, without the `.git` extension (case-insensitive).","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"},"status":{"description":"Filter check runs by status; returns all statuses if omitted.","enum":["queued","in_progress","completed"],"examples":["queued","in_progress","completed"],"title":"StatusEnm","type":"string"}},"required":["owner","repo","check_suite_id"],"title":"ListCheckRunsInACheckSuiteRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists check suites for a Git reference (commit SHA, branch, or tag) in a repository, optionally filtering by GitHub App ID or check run name.","name":"GITHUB_LIST_CHECK_SUITES_FOR_A_GIT_REFERENCE","parameters":{"description":"Request schema for `ListCheckSuitesForAGitReference`","properties":{"app_id":{"description":"Filters check suites by the `id` of the GitHub App that created them. If omitted, check suites from all apps are returned.","title":"App Id","type":"integer"},"check_name":{"description":"Filters check suites by the name of a check run. Only check suites that contain at least one check run with this name will be returned. If omitted, check suites are not filtered by check run name.","title":"Check Name","type":"string"},"owner":{"description":"The account owner of the repository (username or organization name). This name is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of results to fetch (1-indexed).","title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (max 100).","title":"Per Page","type":"integer"},"ref":{"description":"Git reference (commit SHA, branch name like `heads/BRANCH_NAME` or `BRANCH_NAME`, or tag name like `tags/TAG_NAME` or `TAG_NAME`) to list check suites for.","examples":["main","heads/feature-branch","tags/v1.2.3","066d8ef129c1eb7c2756098a52604399d4577551"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo","ref"],"title":"ListCheckSuitesForAGitReferenceRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists the immediate child teams of a parent team within an organization.","name":"GITHUB_LIST_CHILD_TEAMS","parameters":{"description":"Request schema for listing immediate child teams of a parent team within an organization.","properties":{"org":{"description":"The organization name (not case-sensitive).","examples":["octo-org"],"title":"Org","type":"string"},"page":{"default":1,"description":"Page number of the results to retrieve.","examples":["1","2","10"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (maximum 100).","examples":["30","50","100"],"title":"Per Page","type":"integer"},"team_slug":{"description":"The slug (URL-friendly version) of the parent team's name.","examples":["justice-league"],"title":"Team Slug","type":"string"}},"required":["org","team_slug"],"title":"ListChildTeamsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists GitHub Classrooms to which the authenticated user has administrative access.","name":"GITHUB_LIST_CLASSROOMS","parameters":{"description":"Pagination parameters for listing classrooms.","properties":{"page":{"default":1,"description":"Page number for the results.","examples":["1","2","5"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (maximum 100).","examples":["30","50","100"],"title":"Per Page","type":"integer"}},"title":"ListClassroomsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists syntax errors in a repository's CODEOWNERS file, which must be located at the root, `.github/`, or `docs/` directory for the specified ref.","name":"GITHUB_LIST_CODEOWNERS_ERRORS","parameters":{"description":"Parameters to specify the repository and the ref for checking its CODEOWNERS file.","properties":{"owner":{"description":"Username of the account owning the repository (not case-sensitive).","examples":["octocat"],"title":"Owner","type":"string"},"ref":{"description":"Branch name, tag, or commit SHA for the CODEOWNERS file; defaults to the repository's default branch if unspecified.","examples":["main","v1.0.0","c7615726cb55b377c824671ea10ea0e7c695b5f7"],"title":"Ref","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (not case-sensitive).","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"ListCodeownersErrorsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all CodeQL databases for a repository where CodeQL analysis has been previously run and completed.","name":"GITHUB_LIST_CODEQL_DATABASES_FOR_A_REPOSITORY","parameters":{"description":"Request model for listing CodeQL databases for a repository.","properties":{"owner":{"description":"Username of the account owning the repository (not case-sensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"repo":{"description":"Name of the repository, without the `.git` extension (not case-sensitive).","examples":["hello-world","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"ListCodeqlDatabasesForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists code scanning alerts for a GitHub organization; use EITHER `tool_name` OR `tool_guid` if filtering by tool, not both.","name":"GITHUB_LIST_CODE_SCANNING_ALERTS_FOR_AN_ORGANIZATION","parameters":{"description":"Defines the parameters for listing code scanning alerts within a GitHub organization.","properties":{"after":{"description":"A pagination cursor to retrieve results appearing after this.","examples":["Y3Vyc29yOnYyOpHAAexM3A=="],"title":"After","type":"string"},"before":{"description":"A pagination cursor to retrieve results appearing before this.","examples":["Y3Vyc29yOnYyOpHPRb_PyQ=="],"title":"Before","type":"string"},"direction":{"default":"desc","description":"Sort direction.","enum":["asc","desc"],"title":"Direction","type":"string"},"org":{"description":"The GitHub organization name (case-insensitive).","examples":["github","my-company-org"],"title":"Org","type":"string"},"page":{"default":1,"description":"Page number for results. Used if `before` or `after` cursors are not provided.","examples":["1","5","10"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (maximum 100).","examples":["30","50","100"],"title":"Per Page","type":"integer"},"severity":{"description":"Filter alerts by severity.","enum":["critical","high","medium","low","warning","note","error"],"title":"SeverityEnm","type":"string"},"sort":{"default":"created","description":"Sort field.","enum":["created","updated"],"title":"Sort","type":"string"},"state":{"description":"Filter alerts by state.","enum":["open","closed","dismissed","fixed"],"title":"StateEnm","type":"string"},"tool_guid":{"description":"GUID of the code scanning tool. Some tools may not report a GUID. Cannot be used with `tool_name`.","examples":["cb192f00-main-32f9-4383-87e8-0f1813000619"],"title":"Tool Guid","type":"string"},"tool_name":{"description":"Name of the code scanning tool (e.g., 'CodeQL'). Cannot be used with `tool_guid`.","examples":["CodeQL","Snyk"],"title":"Tool Name","type":"string"}},"required":["org"],"title":"ListCodeScanningAlertsForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists code scanning alerts for a repository, optionally filtering by tool (which must have produced scan results for the repository), Git reference, state, or severity.","name":"GITHUB_LIST_CODE_SCANNING_ALERTS_FOR_A_REPOSITORY","parameters":{"description":"Request schema for `ListCodeScanningAlertsForARepository`","properties":{"direction":{"default":"desc","description":"Sort direction: `asc` (ascending) or `desc` (descending).","enum":["asc","desc"],"title":"Direction","type":"string"},"owner":{"description":"The account owner of the repository (username or organization name); not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number for paginated results, starting at 1.","examples":["1","2","5"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (max 100).","examples":["30","50","100"],"title":"Per Page","type":"integer"},"ref":{"description":"Git reference (branch, tag, or pull request merge reference, e.g., `refs/pull/42/merge`) for retrieving alerts; defaults to the repository's default branch if unspecified.","examples":["refs/heads/main","develop","refs/pull/123/merge"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension; not case-sensitive.","examples":["Hello-World","linguist"],"title":"Repo","type":"string"},"severity":{"description":"Filters alerts by severity.","enum":["critical","high","medium","low","warning","note","error"],"title":"SeverityEnm","type":"string"},"sort":{"default":"created","description":"Sort property: `created` (alert creation time) or `updated` (last update time).","enum":["created","updated"],"title":"Sort","type":"string"},"state":{"description":"Filters alerts by state.","enum":["open","closed","dismissed","fixed"],"title":"StateEnm","type":"string"},"tool_guid":{"description":"The GUID of a code scanning tool to filter alerts by; use either `tool_guid` or `tool_name`, not both. Some tools may not provide a GUID.","examples":["01234567-89ab-cdef-0123-456789abcdef"],"title":"Tool Guid","type":"string"},"tool_name":{"description":"The name of a code scanning tool to filter alerts by; use either `tool_name` or `tool_guid`, not both.","examples":["CodeQL","Semgrep"],"title":"Tool Name","type":"string"}},"required":["owner","repo"],"title":"ListCodeScanningAlertsForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists code scanning analyses for an existing repository, optionally filtering by tool (name or GUID), Git reference, or SARIF ID.","name":"GITHUB_LIST_CODE_SCANNING_ANALYSES_FOR_A_REPOSITORY","parameters":{"description":"Request schema for `ListCodeScanningAnalysesForARepository`","properties":{"direction":{"default":"desc","description":"Direction to sort results. 'asc' for ascending, 'desc' for descending.","enum":["asc","desc"],"title":"Direction","type":"string"},"owner":{"description":"The account owner of the repository. This name is not case-sensitive.","title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of the results to retrieve.","title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results to return per page (maximum 100).","title":"Per Page","type":"integer"},"ref":{"description":"The Git reference for which to list analyses. This can be a branch name (e.g., 'main' or 'refs/heads/main') or a pull request merge reference (e.g., 'refs/pull/123/merge').","examples":["main","refs/heads/develop","refs/pull/42/merge"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","title":"Repo","type":"string"},"sarif_id":{"description":"Filter analyses to those associated with a specific SARIF upload ID.","title":"Sarif Id","type":"string"},"sort":{"default":"created","description":"Property by which to sort the results. Currently, only 'created' is a supported sort field.","enum":["created"],"title":"Sort","type":"string"},"tool_guid":{"description":"The GUID of a code scanning tool used to filter analyses. Only results from this tool will be listed. Some tools may not provide a GUID. Mutually exclusive with `tool_name`.","examples":["01234567-89ab-cdef-0123-456789abcdef"],"title":"Tool Guid","type":"string"},"tool_name":{"description":"The name of a code scanning tool used to filter analyses. Only results from this tool will be listed. Mutually exclusive with `tool_guid`.","examples":["CodeQL","Dependabot","Snyk"],"title":"Tool Name","type":"string"}},"required":["owner","repo"],"title":"ListCodeScanningAnalysesForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves all available codes of conduct from GitHub, often used to select one for a repository.","name":"GITHUB_LIST_CODES_OF_CONDUCT","parameters":{"description":"Request to retrieve all codes of conduct; this action requires no input parameters.","properties":{},"title":"ListCodesOfConductRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to fetch all available codes of conduct using GitHub's GraphQL API. Use when you need to retrieve the complete list of codes of conduct that can be applied to repositories.","name":"GITHUB_LIST_CODES_OF_CONDUCT_GRAPHQL","parameters":{"description":"Request parameters for fetching codes of conduct via GitHub GraphQL API.","properties":{},"title":"ListCodesOfConductGraphqlRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all GitHub Codespaces owned by a specified member of a given organization.","name":"GITHUB_LIST_CODESPACES_FOR_A_USER_IN_ORGANIZATION","parameters":{"description":"Request schema for `ListCodespacesForAUserInOrganization`","properties":{"org":{"description":"Name of the GitHub organization (case-insensitive).","examples":["github","my-company-org"],"title":"Org","type":"string"},"page":{"default":1,"description":"Page number of the results to retrieve (starts from 1).","examples":["1","2","5"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of codespaces to return per page (maximum 100).","examples":["30","50","100"],"title":"Per Page","type":"integer"},"username":{"description":"GitHub username of the organization member.","examples":["octocat","john-doe"],"title":"Username","type":"string"}},"required":["org","username"],"title":"ListCodespacesForAUserInOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists GitHub Codespaces for the authenticated user, optionally filtering by repository ID and supporting pagination.","name":"GITHUB_LIST_CODESPACES_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Parameters for listing GitHub Codespaces accessible to the authenticated user.","properties":{"page":{"default":1,"description":"Page number for results (starts at 1). For pagination details, see: https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api.","examples":["1","2","10"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of codespaces per page (max 100). For pagination details, see: https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api.","examples":["30","50","100"],"title":"Per Page","type":"integer"},"repository_id":{"description":"If provided, filters codespaces to this repository ID.","examples":["12345678","98765432"],"title":"Repository Id","type":"integer"}},"title":"ListCodespacesForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists active/pending GitHub Codespaces for an existing organization; admins list all, members list their own.","name":"GITHUB_LIST_CODESPACES_FOR_THE_ORGANIZATION","parameters":{"description":"Request to list Codespaces for a GitHub organization.","properties":{"org":{"description":"Non-case-sensitive unique identifier of the GitHub organization.","examples":["github","my-organization"],"title":"Org","type":"string"},"page":{"default":1,"description":"Page number of results. Details: '[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)'.","examples":["1","2","5"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (max 100). Details: '[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)'.","examples":["30","50","100"],"title":"Per Page","type":"integer"}},"required":["org"],"title":"ListCodespacesForTheOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list issue and PR comment changes across an organization's repositories efficiently. Use when monitoring comment activity without per-PR/per-issue polling. Filters organization events to return only comment-related events (IssueCommentEvent, PullRequestReviewCommentEvent, CommitCommentEvent). Note: Events are limited to the past 30 days and up to 300 events per timeline. Use ETag header for efficient polling to avoid rate limits.","name":"GITHUB_LIST_COMMENT_CHANGES","parameters":{"description":"Request parameters for listing comment changes across repositories.","properties":{"org":{"description":"Organization name to list comment events for. Not case-sensitive.","examples":["github","octocat"],"title":"Org","type":"string"},"page":{"default":1,"description":"Page number of results to fetch.","examples":[1,2,3],"minimum":1,"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of events to return per page (maximum 100).","examples":[30,50,100],"maximum":100,"minimum":1,"title":"Per Page","type":"integer"}},"required":["org"],"title":"ListCommentChangesRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all comments for a specific review on a GitHub pull request.","name":"GITHUB_LIST_COMMENTS_FOR_A_PULL_REQUEST_REVIEW","parameters":{"description":"Input model for listing comments on a pull request review.","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of the results to fetch. See GitHub's [pagination guide](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).","examples":["1"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of comments to retrieve per page (max 100). See GitHub's [pagination guide](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).","examples":["50"],"title":"Per Page","type":"integer"},"pull_number":{"description":"The unique number that identifies the pull request within the repository.","examples":["123"],"title":"Pull Number","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"},"review_id":{"description":"The unique identifier of the pull request review.","examples":["42"],"title":"Review Id","type":"integer"}},"required":["owner","repo","pull_number","review_id"],"title":"ListCommentsForAPullRequestReviewRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves all comments for a specific commit in a GitHub repository, supporting pagination.","name":"GITHUB_LIST_COMMIT_COMMENTS","parameters":{"description":"Request schema for listing comments on a specific commit in a repository.","properties":{"commit_sha":{"description":"The SHA hash of the commit for which comments are to be listed.","examples":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"],"title":"Commit Sha","type":"string"},"owner":{"description":"The account owner of the repository. This name is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"page":{"default":1,"description":"The page number of the results to retrieve. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"","title":"Page","type":"integer"},"per_page":{"default":30,"description":"The number of comments to return per page. Maximum value is 100. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"","title":"Per Page","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","commit_sha"],"title":"ListCommitCommentsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all commit comments for a specified repository, which must exist and be accessible.","name":"GITHUB_LIST_COMMIT_COMMENTS_FOR_A_REPOSITORY","parameters":{"description":"Request schema for `ListCommitCommentsForARepository`","properties":{"owner":{"description":"The account owner of the repository (not case-sensitive).","examples":["octocat","kubernetes"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of the results to fetch (starts at 1).","examples":["1","2","10"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results to return per page (max 100).","examples":["30","50","100"],"title":"Per Page","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension (not case-sensitive).","examples":["Spoon-Knife","website"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"ListCommitCommentsForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists commits for a GitHub repository. Requires 'owner' (username/org) and 'repo' (repository name) parameters. Optionally filter by SHA/branch, path, author, committer, or date range.","name":"GITHUB_LIST_COMMITS","parameters":{"additionalProperties":false,"description":"Request schema for `ListCommits`. Note: Commits are always returned in reverse chronological order (newest first). Sorting options are not available - do not use 'sort' parameter.","properties":{"author":{"description":"Filter commits by the commit author's GitHub login or email address.","examples":["octocat","mona@github.com"],"title":"Author","type":"string"},"committer":{"description":"Filter commits by the commit committer's GitHub login or email address. The committer is the user who applied the patch and may differ from the original author.","examples":["web-flow","octocat@github.com"],"title":"Committer","type":"string"},"owner":{"description":"The account owner of the repository (username or organization name only, not the full 'owner/repo' path). Must contain only alphanumeric characters and hyphens, cannot start/end with a hyphen, max 39 characters. Wildcards are not supported.","examples":["octocat","my-organization"],"pattern":"^[a-zA-Z0-9]([a-zA-Z0-9-]{0,37}[a-zA-Z0-9])?$|^[a-zA-Z0-9]$","title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of the results to fetch when using pagination.","examples":["1","2"],"title":"Page","type":"integer"},"path":{"description":"Only commits modifying this specific file path will be returned.","examples":["README.md","src/utils/helpers.py"],"title":"Path","type":"string"},"per_page":{"default":1,"description":"Number of results to return per page (max 100).","examples":["30","100"],"title":"Per Page","type":"integer"},"repo":{"description":"The name of the repository without the `.git` extension (repository name only, not the full 'owner/repo' path). Must contain only alphanumeric characters, hyphens (-), underscores (_), and periods (.). Wildcards like '*' are not supported.","examples":["Spoon-Knife","my-project"],"pattern":"^[a-zA-Z0-9._-]+$","title":"Repo","type":"string"},"sha":{"description":"SHA hash or branch name to start listing commits from. If not provided, the GitHub API uses the repository's default branch (usually `main` or `master`).","examples":["main","develop","a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"],"title":"Sha","type":"string"},"since":{"description":"Only commits created on or after this timestamp will be returned. This is a timestamp in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`.","examples":["2023-01-01T00:00:00Z"],"title":"Since","type":"string"},"until":{"description":"Only commits created before this timestamp will be returned. This is a timestamp in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`.","examples":["2023-12-31T23:59:59Z"],"title":"Until","type":"string"}},"required":["owner","repo"],"title":"ListCommitsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists commits for a pull request; requires the repository and pull request to exist and be accessible, and supports pagination.","name":"GITHUB_LIST_COMMITS_ON_A_PULL_REQUEST","parameters":{"description":"Request schema for `ListCommitsOnAPullRequest`","properties":{"owner":{"description":"Account owner of the repository. This name is not case-sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"page":{"default":1,"description":"The page number of the results to fetch.","title":"Page","type":"integer"},"per_page":{"default":30,"description":"The number of results per page (maximum 100).","title":"Per Page","type":"integer"},"pull_number":{"description":"The number that identifies the pull request.","examples":[1347],"title":"Pull Number","type":"integer"},"repo":{"description":"Repository name, without the `.git` extension. This name is not case-sensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","pull_number"],"title":"ListCommitsOnAPullRequestRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a list of commonly used software licenses from GitHub, optionally filtering for 'featured' licenses whose specific selection criteria by GitHub may vary.","name":"GITHUB_LIST_COMMONLY_USED_LICENSES","parameters":{"description":"Request schema for retrieving a list of commonly used licenses from GitHub.","properties":{"featured":{"description":"If true, filters for licenses that GitHub considers 'featured', such as popular or recommended licenses. If false or not provided, returns all commonly used licenses.","examples":[true,false],"title":"Featured","type":"boolean"},"page":{"default":1,"description":"The page number for the set of results to retrieve (must be an integer starting from 1). Used for paginating through the list of licenses.","examples":["1","2","5"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"The number of license results to return per page (must be an integer between 1 and 100, inclusive). Used for paginating through the list of licenses.","examples":["20","50","100"],"title":"Per Page","type":"integer"}},"title":"ListCommonlyUsedLicensesRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets the schema definitions for all custom properties configured for an organization, not the specific values assigned to repositories.","name":"GITHUB_LIST_CUSTOM_PROPERTIES_FOR_AN_ORGANIZATION","parameters":{"description":"Request schema for `ListCustomPropertiesForAnOrganization`","properties":{"org":{"description":"The unique identifier (login name) of the GitHub organization. This name is not case-sensitive.","examples":["github","my-company-org"],"title":"Org","type":"string"}},"required":["org"],"title":"ListCustomPropertiesForAnOrganizationRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets all custom property values for a repository. Custom properties are defined at the organization level, so this endpoint works with organization-owned repositories. Returns an empty array if no custom properties are set.","name":"GITHUB_LIST_CUSTOM_PROPERTY_VALUES_FOR_A_REPOSITORY","parameters":{"description":"Request schema for `ListCustomPropertyValuesForARepository`","properties":{"owner":{"description":"The organization name that owns the repository. Custom properties are an organization-level feature, so this endpoint primarily works with organization-owned repositories. This field is not case-sensitive.","examples":["microsoft","github","google"],"title":"Owner","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","docs"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"ListCustomPropertyValuesForARepositoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists repositories in an organization with their custom property values. Requires 'Custom properties' organization permission (read).","name":"GITHUB_LIST_CUSTOM_PROPERTY_VALUES_FOR_ORG_REPOS","parameters":{"description":"Request schema for listing custom property values for repositories in an organization.","properties":{"org":{"description":"The organization name (login). Not case-sensitive. Example: 'github', 'microsoft'.","examples":["octo-org","github"],"title":"Org","type":"string"},"page":{"default":1,"description":"Page number of results to fetch (default 1).","title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (max 100, default 30).","title":"Per Page","type":"integer"},"repository_query":{"description":"Optional query string to filter repositories. Uses GitHub's search syntax with keywords and qualifiers like 'is:public', 'topic:security', 'language:python', 'archived:false'. Leave empty to list all repositories.","examples":["is:public language:python","archived:false topic:javascript"],"title":"Repository Query","type":"string"}},"required":["org"],"title":"ListCustomPropertyValuesForOrgReposRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a list of webhook deliveries for a specific webhook in an organization, allowing inspection of delivery history and details.","name":"GITHUB_LIST_DELIVERIES_FOR_AN_ORGANIZATION_WEBHOOK","parameters":{"description":"Request schema for `ListDeliveriesForAnOrganizationWebhook`","properties":{"cursor":{"description":"Pagination cursor specifying the starting delivery for the page.","examples":["vZHVyY29yOnYyOpHOB0hNaCJ6ZQ=="],"title":"Cursor","type":"string"},"hook_id":{"description":"Unique identifier of the webhook.","examples":[123456789],"title":"Hook Id","type":"integer"},"org":{"description":"Name of the organization (case-insensitive).","examples":["github"],"title":"Org","type":"string"},"per_page":{"default":30,"description":"Number of results to return per page (max 100).","examples":[50],"title":"Per Page","type":"integer"},"redelivery":{"description":"Filter for redeliveries: `true` for only redeliveries, `false` to exclude them.","examples":[true],"title":"Redelivery","type":"boolean"}},"required":["org","hook_id"],"title":"ListDeliveriesForAnOrganizationWebhookRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves delivery attempts for a specific repository webhook to inspect its history; ensure the webhook ID exists.","name":"GITHUB_LIST_DELIVERIES_FOR_A_REPOSITORY_WEBHOOK","parameters":{"description":"Request schema for `ListDeliveriesForARepositoryWebhook`","properties":{"cursor":{"description":"Specifies the starting delivery for pagination. The `Link` header in the response provides cursors for the next and previous pages.","examples":["dW5pbFRoZW5EYXRhbWF0aW9u"],"title":"Cursor","type":"string"},"hook_id":{"description":"The unique identifier of the webhook. This ID can be found in the `X-GitHub-Hook-ID` header of a webhook delivery.","examples":[123456789],"title":"Hook Id","type":"integer"},"owner":{"description":"The username or organization name that owns the repository. This field is case-insensitive.","examples":["octocat"],"title":"Owner","type":"string"},"per_page":{"default":30,"description":"Maximum 100 results per page. For more details, refer to \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)\".","examples":[50],"title":"Per Page","type":"integer"},"redelivery":{"description":"If set to `true`, the response will include the latest redelivery attempt for each delivery, rather than the original delivery.","examples":[true],"title":"Redelivery","type":"boolean"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is case-insensitive.","examples":["Hello-World"],"title":"Repo","type":"string"}},"required":["owner","repo","hook_id"],"title":"ListDeliveriesForARepositoryWebhookRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists deploy SSH keys for a specified repository; the repository must exist.","name":"GITHUB_LIST_DEPLOY_KEYS","parameters":{"description":"Specifies the repository and pagination parameters for fetching deploy keys.","properties":{"owner":{"description":"The account owner of the repository. This name is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"page":{"default":1,"description":"The page number of the results to fetch, starting from 1.","examples":["1","2","10"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"The number of deploy keys to return per page. Maximum value is 100.","examples":["30","50","100"],"title":"Per Page","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive.","examples":["Hello-World","my-internal-project"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"ListDeployKeysRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all deployment branch policies for a specified environment in a GitHub repository.","name":"GITHUB_LIST_DEPLOYMENT_BRANCH_POLICIES","parameters":{"description":"Request to list deployment branch policies for a repository environment.","properties":{"environment_name":{"description":"Name of the environment; URL encode if it contains special characters (e.g., slashes to `%2F`).","examples":["production","staging%2Ffeature-x"],"title":"Environment Name","type":"string"},"owner":{"description":"Account owner of the repository; not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of results (starts at 1).","title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (max 100).","title":"Per Page","type":"integer"},"repo":{"description":"Repository name, without the `.git` extension; not case sensitive.","examples":["hello-world"],"title":"Repo","type":"string"}},"required":["owner","repo","environment_name"],"title":"ListDeploymentBranchPoliciesRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists deployments for a specified repository; repository must exist.","name":"GITHUB_LIST_DEPLOYMENTS","parameters":{"description":"Defines the parameters for listing deployments in a repository.","properties":{"environment":{"description":"Filter by the environment name to which deployed.","examples":["production","staging","development"],"title":"Environment","type":"string"},"owner":{"description":"The account owner of the repository. This name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"page":{"default":1,"description":"The page number of the results to retrieve. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"","title":"Page","type":"integer"},"per_page":{"default":30,"description":"The number of results to display per page (maximum 100). For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"","title":"Per Page","type":"integer"},"ref":{"description":"Filter by the ref name (branch, tag, or commit SHA).","examples":["main","users/USERNAME/featureBranch","v1.2.3","c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc"],"title":"Ref","type":"string"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case sensitive.","examples":["hello-world"],"title":"Repo","type":"string"},"sha":{"description":"Filter by the commit SHA recorded when the deployment was created.","examples":["c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc","0000000000000000000000000000000000000000"],"title":"Sha","type":"string"},"task":{"description":"Filter by the task name specified for the deployment.","examples":["deploy","deploy:migrations"],"title":"Task","type":"string"}},"required":["owner","repo"],"title":"ListDeploymentsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all statuses for a given deployment in a repository.","name":"GITHUB_LIST_DEPLOYMENT_STATUSES","parameters":{"description":"Request schema for retrieving the list of statuses for a specific deployment.","properties":{"deployment_id":{"description":"The unique identifier of the deployment for which statuses are being requested.","examples":[42],"title":"Deployment Id","type":"integer"},"owner":{"description":"The account owner of the repository. The name is not case sensitive.","examples":["octocat"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of the results to fetch.","title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (maximum 100).","title":"Per Page","type":"integer"},"repo":{"description":"The name of the repository without the `.git` extension. The name is not case sensitive. ","examples":["Spoon-Knife"],"title":"Repo","type":"string"}},"required":["owner","repo","deployment_id"],"title":"ListDeploymentStatusesRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all comments for a specific team discussion within an organization. Note: Team discussions are deprecated as of 2023-11-28. Consider using GitHub Discussions instead. This endpoint requires the authenticated user to be a member of the organization and have access to the team's discussions.","name":"GITHUB_LIST_DISCUSSION_COMMENTS","parameters":{"description":"Input model for retrieving comments from a team discussion.","properties":{"direction":{"default":"desc","description":"Sort direction for comments: 'asc' (oldest first) or 'desc' (newest first).","enum":["asc","desc"],"title":"Direction","type":"string"},"discussion_number":{"description":"The unique number identifying the team discussion.","examples":[42,153],"title":"Discussion Number","type":"integer"},"org":{"description":"The organization name (case-insensitive).","examples":["github","octo-org"],"title":"Org","type":"string"},"page":{"default":1,"description":"Page number of the results.","title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of comments per page (max 100).","title":"Per Page","type":"integer"},"team_slug":{"description":"The team's slug (URL-friendly identifier).","examples":["justice-league","developers"],"title":"Team Slug","type":"string"}},"required":["org","team_slug","discussion_number"],"title":"ListDiscussionCommentsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists discussions for a specific team within an organization, with options for sorting, pagination, and filtering by pinned status. Note: Team discussions are deprecated as of 2023-11-28. Consider using GitHub Discussions instead. This endpoint requires the authenticated user to be a member of the organization and have access to the team's discussions.","name":"GITHUB_LIST_DISCUSSIONS","parameters":{"description":"Request to list discussions for a team in an organization.","properties":{"direction":{"default":"desc","description":"Sort direction for results: 'asc' (oldest first) or 'desc' (newest first). Defaults to 'desc'.","enum":["asc","desc"],"title":"Direction","type":"string"},"org":{"description":"The organization's name (case-insensitive).","examples":["octo-org","my-company"],"title":"Org","type":"string"},"page":{"default":1,"description":"Page number for pagination. Defaults to 1.","title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (max 100). Defaults to 30.","title":"Per Page","type":"integer"},"pinned":{"description":"Filter for pinned discussions. Use 'true' to show only pinned discussions. Omit to show all discussions.","examples":["true"],"title":"Pinned","type":"string"},"team_slug":{"description":"The team's slug (URL-friendly name).","examples":["justice-league","engineering-team"],"title":"Team Slug","type":"string"}},"required":["org","team_slug"],"title":"ListDiscussionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all email addresses for the authenticated user, including their primary status, verification status, and visibility. This action retrieves the complete list of email addresses associated with the authenticated user, providing important details such as which email is primary and whether the emails are verified.","name":"GITHUB_LIST_EMAIL_ADDRESSES_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema for listing email addresses for the authenticated user.","properties":{"page":{"default":1,"description":"Page number of the results to retrieve.","examples":["1","2","5"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (max 100).","examples":["30","50","100"],"title":"Per Page","type":"integer"}},"title":"ListEmailAddressesForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all custom deployment protection rule integrations for a repository environment; the `environment_name` must be URL-encoded.","name":"GITHUB_LIST_ENVIRONMENT_CUSTOM_DEPLOYMENT_RULES","parameters":{"description":"Request to list custom deployment protection rule integrations for a repository environment.","properties":{"environment_name":{"description":"Name of the environment, which must be URL-encoded (e.g., slashes `/` replaced with `%2F`).","examples":["production","staging%2Fdev","feature%2Fnew-login"],"title":"Environment Name","type":"string"},"owner":{"description":"Account owner of the repository (user or organization); not case-sensitive.","examples":["octocat","my-organization","user123"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of the results to fetch, starting from 1.","examples":["1","2","10"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page, with a maximum of 100.","examples":["30","50","100"],"title":"Per Page","type":"integer"},"repo":{"description":"Name of the repository, without the `.git` extension; not case-sensitive.","examples":["my-app","web-platform","DataProcessor"],"title":"Repo","type":"string"}},"required":["environment_name","repo","owner"],"title":"ListEnvironmentCustomDeploymentRulesRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves all deployment environments for a specified repository, which are used to configure protection rules and secrets for different software lifecycle stages.","name":"GITHUB_LIST_ENVIRONMENTS","parameters":{"description":"Request schema for retrieving all deployment environments for a repository.","properties":{"owner":{"description":"The username or organization name that owns the repository. This field is not case-sensitive.","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"page":{"default":1,"description":"The page number of the results to retrieve. Starts from 1.","examples":["1","2","5"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"The number of results to return per page. Maximum value is 100.","examples":["30","50","100"],"title":"Per Page","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["hello-world","my-action-repo"],"title":"Repo","type":"string"}},"required":["owner","repo"],"title":"ListEnvironmentsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists the names and metadata (not values) of secrets for a specified, existing environment within an existing GitHub repository.","name":"GITHUB_LIST_ENVIRONMENT_SECRETS","parameters":{"description":"Request schema for `ListEnvironmentSecrets`","properties":{"environment_name":{"description":"Name of the environment; URL-encode if it contains special characters (e.g., '/' becomes '%2F').","examples":["production","staging%2Fapp-server"],"title":"Environment Name","type":"string"},"owner":{"description":"The account owner's username (case-insensitive).","examples":["octocat","my-organization"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number for results (1-indexed).","examples":["1","2"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of secrets per page (maximum 100).","examples":["30","50","100"],"title":"Per Page","type":"integer"},"repo":{"description":"Repository name, without the `.git` extension (case-insensitive).","examples":["hello-world","my-awesome-project"],"title":"Repo","type":"string"}},"required":["owner","repo","environment_name"],"title":"ListEnvironmentSecretsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all environment variables, which are plaintext key-value pairs for GitHub Actions workflows, for a specified environment within a GitHub repository.","name":"GITHUB_LIST_ENVIRONMENT_VARIABLES","parameters":{"description":"Request schema for listing environment variables in a repository's environment.","properties":{"environment_name":{"description":"The name of the environment. The name must be URL-encoded. For example, any slashes `/` in the name must be replaced with `%2F`. ","examples":["production","development","staging%2Fv1"],"title":"Environment Name","type":"string"},"owner":{"description":"The account owner of the repository (e.g., a user or organization). This name is not case-sensitive.","examples":["octocat","github"],"title":"Owner","type":"string"},"page":{"default":1,"description":"Page number of the results to fetch.","examples":["1","2"],"title":"Page","type":"integer"},"per_page":{"default":10,"description":"Number of results per page (maximum 30).","examples":["10","25","30"],"title":"Per Page","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This name is not case-sensitive. ","examples":["hello-world","linguist"],"title":"Repo","type":"string"}},"required":["owner","repo","environment_name"],"title":"ListEnvironmentVariablesRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists public events for the specified GitHub user, or private events if authenticated as that user, in reverse chronological order.","name":"GITHUB_LIST_EVENTS_FOR_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema for listing events for a specified GitHub user.","properties":{"page":{"default":1,"description":"Page number of the results to fetch.","title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of events to return per page (maximum 100).","title":"Per Page","type":"integer"},"username":{"description":"The GitHub username for whom to list events. For example, 'octocat' or 'torvalds'.","examples":["octocat","torvalds"],"title":"Username","type":"string"}},"required":["username"],"title":"ListEventsForTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists events a specific GitHub user received from followed users and watched repositories; returns private events if authenticated for `username`, otherwise public.","name":"GITHUB_LIST_EVENTS_RECEIVED_BY_THE_AUTHENTICATED_USER","parameters":{"description":"Request schema for listing events received by a GitHub user.","properties":{"page":{"default":1,"description":"Indicates the page number of the results to fetch. For more information, see GitHub's REST API pagination guide.","examples":["1","2","5"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Specifies the number of events to return per page (maximum 100). For more information, see GitHub's REST API pagination guide.","examples":["30","50","100"],"title":"Per Page","type":"integer"},"username":{"description":"The GitHub username for whom to fetch received events.","examples":["octocat","torvalds"],"title":"Username","type":"string"}},"required":["username"],"title":"ListEventsReceivedByTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists followers for a specified, existing GitHub user.","name":"GITHUB_LIST_FOLLOWERS_OF_A_USER","parameters":{"description":"Request schema for listing the followers of a specified GitHub user.","properties":{"page":{"default":1,"description":"Page number for pagination of results (starts at 1).","examples":["1","2","5"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (maximum 100). Used for pagination.","examples":["30","50","100"],"title":"Per Page","type":"integer"},"username":{"description":"The GitHub username (e.g., 'octocat', 'torvalds').","examples":["octocat","torvalds"],"title":"Username","type":"string"}},"required":["username"],"title":"ListFollowersOfAUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists users following the authenticated GitHub user, returning an empty list if the user has no followers.","name":"GITHUB_LIST_FOLLOWERS_OF_THE_AUTHENTICATED_USER","parameters":{"description":"Request model for listing followers of the authenticated user, allowing pagination.","properties":{"page":{"default":1,"description":"Page number of the results to fetch.","examples":["1","2","10"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (max 100).","examples":["30","50","100"],"title":"Per Page","type":"integer"}},"title":"ListFollowersOfTheAuthenticatedUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists forks for a specified repository, which must exist, with options for sorting and pagination.","name":"GITHUB_LIST_FORKS","parameters":{"description":"Parameters for listing repository forks.","properties":{"owner":{"description":"The username of the account that owns the repository. This field is not case-sensitive.","examples":["octocat","microsoft"],"title":"Owner","type":"string"},"page":{"default":1,"description":"The page number of the results to retrieve, used for pagination. Defaults to 1.","examples":["1","2","5"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"The number of fork results to return per page. Maximum value is 100. Defaults to 30.","examples":["30","50","100"],"title":"Per Page","type":"integer"},"repo":{"description":"The name of the repository, without the `.git` extension. This field is not case-sensitive.","examples":["Spoon-Knife","vscode"],"title":"Repo","type":"string"},"sort":{"default":"newest","description":"The sort order for the returned forks. `stargazers` sorts by the number of stars. Defaults to `newest`.","enum":["newest","oldest","stargazers","watchers"],"examples":["newest","oldest","stargazers","watchers"],"title":"Sort","type":"string"}},"required":["owner","repo"],"title":"ListForksRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists comments for a specified GitHub Gist.","name":"GITHUB_LIST_GIST_COMMENTS","parameters":{"description":"Request parameters to list comments on a GitHub Gist.","properties":{"gist_id":{"description":"The unique identifier of the Gist for which comments are to be listed.","examples":["039c1767462645fe28f1489919486795"],"title":"Gist Id","type":"string"},"page":{"default":1,"description":"Page number of the results to fetch.","examples":["1","2","5"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of comments to return per page (max 100).","examples":["30","50","100"],"title":"Per Page","type":"integer"}},"required":["gist_id"],"title":"ListGistCommentsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all commits for a specified gist.","name":"GITHUB_LIST_GIST_COMMITS","parameters":{"description":"Request schema for `ListGistCommits`","properties":{"gist_id":{"description":"The unique identifier of the gist.","examples":["aa5a315d61ae9438b18d"],"title":"Gist Id","type":"string"},"page":{"default":1,"description":"Page number of the results to fetch.","examples":[1,2,3],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"Number of results per page (maximum 100).","examples":[30,50,100],"title":"Per Page","type":"integer"}},"required":["gist_id"],"title":"ListGistCommitsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all forks for a given GitHub gist ID.","name":"GITHUB_LIST_GIST_FORKS","parameters":{"description":"Request schema for listing forks of a GitHub gist.","properties":{"gist_id":{"description":"The unique identifier (ID) of the gist for which to list forks.","examples":["aa5a315d61ae9438b18d","gist_identifier_123"],"title":"Gist Id","type":"string"},"page":{"default":1,"description":"The page number of the results to retrieve, starting from 1. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"","examples":["1","2","10"],"title":"Page","type":"integer"},"per_page":{"default":30,"description":"The number of fork results to display per page. Maximum value is 100. For more information, see \"[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api).\"","examples":["30","50","100"],"title":"Per Page","type":"integer"}},"required":["gist_id"],"title":"ListGistForksRequest","type":"object"}},"type":"function"}]}}} \ No newline at end of file diff --git a/tests/fixtures/composio_gmail.json b/tests/fixtures/composio_gmail.json new file mode 100644 index 000000000..a46577412 --- /dev/null +++ b/tests/fixtures/composio_gmail.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"logs":["composio: 62 tool(s) listed"],"result":{"tools":[{"function":{"description":"Adds and/or removes specified Gmail labels for a message; ensure `message_id` and all `label_ids` are valid (use 'listLabels' for custom label IDs).","name":"GMAIL_ADD_LABEL_TO_EMAIL","parameters":{"properties":{"add_label_ids":{"default":[],"description":"IMPORTANT: Label IDs are NOT the same as label names shown in Gmail UI. MODIFIABLE SYSTEM LABELS (use these exact IDs): INBOX, SPAM, TRASH, UNREAD, STARRED, IMPORTANT, CATEGORY_PERSONAL, CATEGORY_SOCIAL, CATEGORY_PROMOTIONS, CATEGORY_UPDATES, CATEGORY_FORUMS. Note: 'UPDATES', 'SOCIAL', 'PROMOTIONS', 'FORUMS', 'PERSONAL' are INVALID - you must use the full CATEGORY_ prefix (e.g., 'CATEGORY_UPDATES' not 'UPDATES'). CUSTOM LABELS: You MUST call 'listLabels' action first to get the label ID (format: 'Label_', e.g., 'Label_1', 'Label_123'). Do NOT use the label name displayed in Gmail UI - the API requires the ID, not the name. Example: if listLabels returns {\"id\": \"Label_5\", \"name\": \"Work Projects\"}, use 'Label_5' (NOT 'Work Projects'). IMMUTABLE LABELS (cannot be added or removed): SENT, DRAFT, and CHAT are system labels managed by Gmail and cannot be modified via the API. Attempting to use these will return 'Invalid label' errors. A label cannot appear in both add_label_ids and remove_label_ids. At least one of 'add_label_ids' or 'remove_label_ids' must be non-empty.","examples":["STARRED","IMPORTANT","CATEGORY_UPDATES","Label_1"],"items":{"type":"string"},"title":"Add Label Ids","type":"array"},"message_id":{"description":"Immutable ID of the message to modify. Gmail message IDs are 15-16 character hexadecimal strings (e.g., '1a2b3c4d5e6f7890'). IMPORTANT: Do NOT use UUIDs (32-character strings like '093ca4662b214d5eba8f4ceeaad63433'), thread IDs, or internal system IDs - these will cause 'Invalid id value' errors. Obtain valid message IDs from: (1) 'GMAIL_FETCH_EMAILS' response 'messageId' field, (2) 'GMAIL_FETCH_MESSAGE_BY_THREAD_ID' response, or (3) 'GMAIL_LIST_THREADS' and then fetching thread messages.","examples":["1a2b3c4d5e6f7890","abcd1234efab5678"],"pattern":"^[0-9a-fA-F]+$","title":"Message Id","type":"string"},"remove_label_ids":{"default":[],"description":"IMPORTANT: Label IDs are NOT the same as label names shown in Gmail UI. MODIFIABLE SYSTEM LABELS (use these exact IDs): INBOX, SPAM, TRASH, UNREAD, STARRED, IMPORTANT, CATEGORY_PERSONAL, CATEGORY_SOCIAL, CATEGORY_PROMOTIONS, CATEGORY_UPDATES, CATEGORY_FORUMS. Note: 'UPDATES', 'SOCIAL', 'PROMOTIONS', 'FORUMS', 'PERSONAL' are INVALID - you must use the full CATEGORY_ prefix (e.g., 'CATEGORY_UPDATES' not 'UPDATES'). CUSTOM LABELS: You MUST call 'listLabels' action first to get the label ID (format: 'Label_', e.g., 'Label_1', 'Label_123'). Do NOT use the label name displayed in Gmail UI - the API requires the ID, not the name. IMMUTABLE LABELS (cannot be added or removed): SENT, DRAFT, and CHAT are system labels managed by Gmail and cannot be modified via the API. Attempting to use these will return 'Invalid label' errors. Common operations: to mark as read, REMOVE 'UNREAD'; to archive, REMOVE 'INBOX'. A label cannot appear in both add_label_ids and remove_label_ids. At least one of 'add_label_ids' or 'remove_label_ids' must be non-empty.","examples":["UNREAD","INBOX","CATEGORY_UPDATES","Label_1"],"items":{"type":"string"},"title":"Remove Label Ids","type":"array"},"user_id":{"default":"me","description":"User's email address or 'me' for the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["message_id"],"title":"AddLabelToEmailRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to permanently delete multiple Gmail messages in bulk, bypassing Trash with no recovery possible. Use when you need to efficiently remove large numbers of emails (e.g., retention enforcement, mailbox hygiene). Use GMAIL_MOVE_TO_TRASH instead when reversibility may be needed. Always obtain explicit user confirmation and verify a sample of message IDs before executing. High-volume calls may trigger 429 rateLimitExceeded or 403 userRateLimitExceeded errors; apply exponential backoff.","name":"GMAIL_BATCH_DELETE_MESSAGES","parameters":{"description":"Request model for bulk deletion of Gmail messages by ID.","properties":{"messageIds":{"description":"List of Gmail message IDs to delete. Each ID must be a 15-16 character hexadecimal string (e.g., '18c5f5d1a2b3c4d5'). Obtain IDs from actions like GMAIL_FETCH_EMAILS or GMAIL_LIST_THREADS - do not use human-readable descriptions.","examples":[["18c5f5d1a2b3c4d5","18c5f5d1a2b3c4d6"]],"items":{"type":"string"},"minItems":1,"title":"Message Ids","type":"array"},"userId":{"default":"me","description":"User's email address or 'me' for the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["messageIds"],"title":"BatchDeleteMessagesRequest","type":"object"}},"type":"function"},{"function":{"description":"Modify labels on multiple Gmail messages in one efficient API call. Supports up to 1,000 messages per request for bulk operations like archiving, marking as read/unread, or applying custom labels. High-volume calls may return 429 rateLimitExceeded or 403 userRateLimitExceeded; apply exponential backoff.","name":"GMAIL_BATCH_MODIFY_MESSAGES","parameters":{"properties":{"addLabelIds":{"description":"List of label IDs to add to the messages. IMPORTANT: Use label IDs, NOT label display names. System labels use their name as ID: INBOX, STARRED, IMPORTANT, SENT, DRAFT, SPAM, TRASH, UNREAD, CATEGORY_PERSONAL, CATEGORY_SOCIAL, CATEGORY_PROMOTIONS, CATEGORY_UPDATES, CATEGORY_FORUMS. Custom labels MUST use their ID (format: 'Label_XXX', e.g., 'Label_1', 'Label_25'), NOT the display name (e.g., do NOT use 'Work' or 'Projects'). Call GMAIL_LIST_LABELS first to get the 'id' field for custom labels. At least one of add_label_ids or remove_label_ids must be provided. CONSTRAINT: Label IDs must NOT overlap with remove_label_ids - cannot add and remove the same label.","examples":[["INBOX","STARRED"],["Label_1","Label_25"],["IMPORTANT","Label_10"]],"items":{"type":"string"},"title":"Add Label Ids","type":"array"},"messageIds":{"description":"List of message IDs to modify. Maximum 1,000 message IDs per request. Get message IDs from GMAIL_FETCH_EMAILS or GMAIL_LIST_THREADS actions. Accepts 'messageIds', 'ids', or 'message_ids' as the parameter name.","examples":[["18c5f5d1a2b3c4d5","18c5f5d1a2b3c4d6"],["msg_id_1","msg_id_2","msg_id_3"]],"items":{"type":"string"},"maxItems":1000,"minItems":1,"title":"Message Ids","type":"array"},"removeLabelIds":{"description":"List of label IDs to remove from the messages. IMPORTANT: Use label IDs, NOT label display names. System labels use their name as ID: INBOX, STARRED, IMPORTANT, SENT, SPAM, TRASH, UNREAD. Custom labels MUST use their ID (format: 'Label_XXX', e.g., 'Label_1', 'Label_25'), NOT the display name (e.g., do NOT use 'Work' or 'Projects'). Call GMAIL_LIST_LABELS first to get the 'id' field for custom labels. Common use cases: Remove 'UNREAD' to mark as read, remove 'INBOX' to archive. Note: 'DRAFT' cannot be removed - use GMAIL_DELETE_DRAFT instead. At least one of add_label_ids or remove_label_ids must be provided. CONSTRAINT: Label IDs must NOT overlap with add_label_ids - cannot add and remove the same label.","examples":[["UNREAD"],["INBOX","UNREAD"],["Label_1","SPAM"]],"items":{"type":"string"},"title":"Remove Label Ids","type":"array"},"userId":{"default":"me","description":"User's email address or 'me' for the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["messageIds"],"title":"BatchModifyMessagesRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a Gmail email draft. While all fields are optional per the Gmail API, practical validation requires at least one of recipient_email, cc, or bcc and at least one of subject or body. Supports To/Cc/Bcc recipients, subject, plain/HTML body (ensure `is_html=True` for HTML), attachments, and threading. Returns a draft_id that must be used as-is with GMAIL_SEND_DRAFT — synthetic or stale IDs will fail. When creating a draft reply to an existing thread (thread_id provided), leave subject empty to stay in the same thread; setting a subject will create a NEW thread instead. HTTP 429 may occur on rapid creation/send sequences; apply exponential backoff.","name":"GMAIL_CREATE_EMAIL_DRAFT","parameters":{"properties":{"attachment":{"description":"File to attach to the email. Must be a dict with fields: name (filename), mimetype (e.g., 'application/pdf'), and s3key (obtained from a prior upload/download response — local paths or guessed keys will fail). Total message size including base64-encoded attachments must be under 25 MB; use shareable links (e.g., Google Drive) for larger files.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"bcc":{"default":[],"description":"Blind Carbon Copy (BCC) recipients' email addresses. Each must be a valid email address (e.g., 'user@example.com') or display name format (e.g., 'Bob Jones '). Plain names without email addresses are NOT valid. Optional for drafts (recipients can be added later before sending).","examples":[["bcc.recipient@example.com","BCC User "]],"items":{"type":"string"},"title":"Bcc","type":"array"},"body":{"description":"Email body content (plain text or HTML); `is_html` must be True if HTML. Optional - drafts can be created without a body and edited later before sending. Can also be provided as 'message_body'.","examples":["Hello Team,\n\nPlease find the attached report for your review.\n\nBest regards,\nYour Name","

Meeting Confirmation

This email confirms our meeting scheduled for next Tuesday.

"],"title":"Body","type":"string"},"cc":{"default":[],"description":"Carbon Copy (CC) recipients' email addresses. Each must be a valid email address (e.g., 'user@example.com') or display name format (e.g., 'John Doe '). Plain names without email addresses are NOT valid. Optional for drafts (recipients can be added later before sending).","examples":[["cc.recipient1@example.com","CC User "]],"items":{"type":"string"},"title":"Cc","type":"array"},"extra_recipients":{"default":[],"description":"Additional 'To' recipients' email addresses (not Cc or Bcc). Each must be a valid email address (e.g., 'user@example.com'), display name format (e.g., 'Jane Doe '), or 'me' for the authenticated user. Plain names without email addresses are NOT valid. Should only be used if recipient_email is also provided.","examples":[["jane.doe@example.com","Jane Doe "]],"items":{"type":"string"},"title":"Extra Recipients","type":"array"},"is_html":{"default":false,"description":"Set to True if `body` is already formatted HTML. When False, plain text newlines are auto-converted to
tags. Both modes result in HTML email; this flag controls whether the body content is treated as raw HTML or plain text that gets HTML formatting applied.","examples":[true,false],"title":"Is Html","type":"boolean"},"recipient_email":{"description":"Primary recipient's email address. Must be a valid email address (e.g., 'user@example.com') or display name format (e.g., 'John Doe '). A plain name without an email address (e.g., 'John Doe') is NOT valid - the '@' symbol and domain are required. Optional for drafts (recipients can be added later before sending). Use extra_recipients if you want to send to multiple recipients.","examples":["john.doe@example.com","John Doe "],"title":"Recipient Email","type":"string"},"subject":{"description":"Email subject line. Optional - drafts can be created without a subject and edited later before sending. When creating a draft reply to an existing thread (thread_id provided), leave this empty to stay in the same thread. Setting a subject will create a NEW thread instead.","examples":["Project Update Q3","Meeting Reminder"],"title":"Subject","type":"string"},"thread_id":{"description":"ID of an existing Gmail thread to reply to; omit for new thread. If the thread ID is invalid or inaccessible, the draft will be created as a new thread instead of failing.","examples":["17f45ec49a9c3f1b"],"title":"Thread Id","type":"string"},"user_id":{"default":"me","description":"User's email address or 'me' for the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"CreateEmailDraftRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create a new Gmail filter with specified criteria and actions. Use when the user wants to automatically organize incoming messages based on sender, subject, size, or other criteria. Note: you can only create a maximum of 1,000 filters per account.","name":"GMAIL_CREATE_FILTER","parameters":{"properties":{"action":{"additionalProperties":false,"description":"REQUIRED. Action that the filter will perform on messages matching the criteria. At least one action field must be specified.","properties":{"addLabelIds":{"description":"List of label IDs to add to the message.","examples":[["Label_1","IMPORTANT"]],"items":{"type":"string"},"title":"Add Label Ids","type":"array"},"forward":{"description":"Email address that the message should be forwarded to.","examples":["forward@example.com"],"title":"Forward","type":"string"},"removeLabelIds":{"description":"List of label IDs to remove from the message.","examples":[["UNREAD","INBOX"]],"items":{"type":"string"},"title":"Remove Label Ids","type":"array"}},"title":"Action","type":"object"},"criteria":{"additionalProperties":false,"description":"REQUIRED. Message matching criteria that determines which messages the filter will apply to. At least one criteria field must be specified.","properties":{"excludeChats":{"description":"Whether the response should exclude chats.","examples":[true,false],"title":"Exclude Chats","type":"boolean"},"from":{"description":"The sender's display name or email address.","examples":["sender@example.com"],"title":"From","type":"string"},"hasAttachment":{"description":"Whether the message has any attachment.","examples":[true,false],"title":"Has Attachment","type":"boolean"},"negatedQuery":{"description":"Only return messages not matching the specified query. Supports the same query format as the Gmail search box.","examples":["from:spam@example.com"],"title":"Negated Query","type":"string"},"query":{"description":"Only return messages matching the specified query. Supports the same query format as the Gmail search box. For example, 'from:someuser@example.com rfc822msgid: is:unread'.","examples":["from:someuser@example.com is:unread"],"title":"Query","type":"string"},"size":{"description":"The size of the entire RFC822 message in bytes, including all headers and attachments.","examples":[1000000],"title":"Size","type":"integer"},"sizeComparison":{"description":"How the message size should be compared to the size field.","enum":["unspecified","smaller","larger"],"examples":["larger","smaller"],"title":"SizeComparison","type":"string"},"subject":{"description":"Case-insensitive phrase found in the message's subject. Trailing and leading whitespace are trimmed and adjacent spaces are collapsed.","examples":["Important"],"title":"Subject","type":"string"},"to":{"description":"The recipient's display name or email address. Includes recipients in the 'to', 'cc', and 'bcc' header fields. You can use simply the local part of the email address. For example, 'example' and 'example@' both match 'example@gmail.com'. This field is case-insensitive.","examples":["recipient@example.com"],"title":"To","type":"string"}},"title":"Criteria","type":"object"},"user_id":{"default":"me","description":"The user's email address or the special value 'me' to indicate the authenticated user for whom the filter will be created.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["criteria","action"],"title":"CreateFilterRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new label with a unique name in the specified user's Gmail account. Returns a labelId (e.g., 'Label_123') required for downstream tools like GMAIL_ADD_LABEL_TO_EMAIL, GMAIL_BATCH_MODIFY_MESSAGES, and GMAIL_MODIFY_THREAD_LABELS — those tools do not accept display names.","name":"GMAIL_CREATE_LABEL","parameters":{"properties":{"background_color":{"description":"Background color for the label. Gmail only accepts colors from a predefined palette of 102 specific hex values. Common color names like 'YELLOW', 'RED', 'BLUE', 'GREEN', 'ORANGE', 'PURPLE', 'PINK' are automatically mapped to the closest Gmail palette color. Provide either a common color name, a Gmail palette color name (e.g., 'ROYAL_BLUE', 'CARIBBEAN_GREEN'), or exact hex value (e.g., '#4a86e8', '#43d692'). If only background_color is provided without text_color, a complementary text color (white or black) will be auto-selected for optimal contrast. Full palette: https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.labels#Color Must be supplied together with text_color — providing only one will cause a 400 error. The auto-selected complementary color behavior does not apply; both colors are required.","enum":["#000000","#434343","#666666","#999999","#cccccc","#efefef","#f3f3f3","#ffffff","#fb4c2f","#ffad47","#fad165","#16a766","#43d692","#4a86e8","#a479e2","#f691b3","#f6c5be","#ffe6c7","#fef1d1","#b9e4d0","#c6f3de","#c9daf8","#e4d7f5","#fcdee8","#efa093","#ffd6a2","#fce8b3","#89d3b2","#a0eac9","#a4c2f4","#d0bcf1","#fbc8d9","#e66550","#ffbc6b","#fcda83","#44b984","#68dfa9","#6d9eeb","#b694e8","#f7a7c0","#cc3a21","#eaa041","#f2c960","#149e60","#3dc789","#3c78d8","#8e63ce","#e07798","#ac2b16","#cf8933","#d5ae49","#0b804b","#2a9c68","#285bac","#653e9b","#b65775","#464646","#e7e7e7","#0d3472","#b6cff5","#0d3b44","#98d7e4","#3d188e","#e3d7ff","#711a36","#fbd3e0","#8a1c0a","#f2b2a8","#7a2e0b","#ffc8af","#7a4706","#ffdeb5","#594c05","#fbe983","#684e07","#fdedc1","#0b4f30","#b3efd3","#04502e","#a2dcc1","#c2c2c2","#4986e7","#2da2bb","#b99aff","#994a64","#f691b2","#ff7537","#ffad46","#662e37","#cca6ac","#094228","#42d692","#076239","#16a765","#1a764d","#1c4587","#41236d","#822111","#83334c","#a46a21","#aa8831","#ebdbde"],"examples":["YELLOW","RED","BLUE","GREEN","ROYAL_BLUE","CARIBBEAN_GREEN","#4a86e8","#43d692"],"title":"GmailLabelColor","type":"string"},"label_list_visibility":{"default":"labelShow","description":"Controls how the label is displayed in the label list in the Gmail sidebar. Valid values: 'labelShow' (always show), 'labelShowIfUnread' (show only if unread messages), 'labelHide' (hide from list).","enum":["labelShow","labelShowIfUnread","labelHide"],"examples":["labelShow","labelShowIfUnread","labelHide"],"title":"Label List Visibility","type":"string"},"label_name":{"description":"REQUIRED. The name for the new label. Must be unique within the account, non-blank, maximum length 225 characters, cannot contain commas (','), not only whitespace, and must not be a reserved system label. Reserved English system labels include: Inbox, Starred, Important, Sent, Draft, Drafts, Spam, Trash, etc. Forward slashes ('/') are allowed and used to create hierarchical nested labels (e.g., 'Work/Projects', 'Personal/Finance'). When creating nested labels, any missing parent labels will be automatically created (similar to 'mkdir -p'). Periods ('.') are allowed and commonly used for numbering schemes (e.g., '1. Action Items', '2. Projects'). Note: 'name' is also accepted as an alias for this field. If a label with this name already exists, returns a 409 conflict; use GMAIL_LIST_LABELS to check existing labels and reuse the existing labelId, or use GMAIL_PATCH_LABEL to update it.","examples":["Work","Project Documents","Receipts 2024","Work/Projects","Personal/Finance","1. Action Items"],"title":"Label Name","type":"string"},"message_list_visibility":{"default":"show","description":"Controls how messages with this label are displayed in the message list. Valid values: 'show' or 'hide'. Note: These values are different from label_list_visibility - do NOT use 'labelShow' or 'labelHide' here.","enum":["show","hide"],"examples":["show","hide"],"title":"Message List Visibility","type":"string"},"text_color":{"description":"Text color for the label. Gmail only accepts colors from a predefined palette of 102 specific hex values. Common color names like 'YELLOW', 'RED', 'BLUE', 'GREEN', 'ORANGE', 'PURPLE', 'PINK' are automatically mapped to the closest Gmail palette color. Provide either a common color name, a Gmail palette color name (e.g., 'BLACK', 'ROYAL_BLUE'), or exact hex value (e.g., '#000000', '#4a86e8'). If only text_color is provided without background_color, a complementary background color (white or black) will be auto-selected for optimal contrast. Full palette: https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.labels#Color Must be supplied together with background_color — providing only one will cause a 400 error. The auto-selected complementary color behavior does not apply; both colors are required.","enum":["#000000","#434343","#666666","#999999","#cccccc","#efefef","#f3f3f3","#ffffff","#fb4c2f","#ffad47","#fad165","#16a766","#43d692","#4a86e8","#a479e2","#f691b3","#f6c5be","#ffe6c7","#fef1d1","#b9e4d0","#c6f3de","#c9daf8","#e4d7f5","#fcdee8","#efa093","#ffd6a2","#fce8b3","#89d3b2","#a0eac9","#a4c2f4","#d0bcf1","#fbc8d9","#e66550","#ffbc6b","#fcda83","#44b984","#68dfa9","#6d9eeb","#b694e8","#f7a7c0","#cc3a21","#eaa041","#f2c960","#149e60","#3dc789","#3c78d8","#8e63ce","#e07798","#ac2b16","#cf8933","#d5ae49","#0b804b","#2a9c68","#285bac","#653e9b","#b65775","#464646","#e7e7e7","#0d3472","#b6cff5","#0d3b44","#98d7e4","#3d188e","#e3d7ff","#711a36","#fbd3e0","#8a1c0a","#f2b2a8","#7a2e0b","#ffc8af","#7a4706","#ffdeb5","#594c05","#fbe983","#684e07","#fdedc1","#0b4f30","#b3efd3","#04502e","#a2dcc1","#c2c2c2","#4986e7","#2da2bb","#b99aff","#994a64","#f691b2","#ff7537","#ffad46","#662e37","#cca6ac","#094228","#42d692","#076239","#16a765","#1a764d","#1c4587","#41236d","#822111","#83334c","#a46a21","#aa8831","#ebdbde"],"examples":["BLACK","WHITE","YELLOW","RED","BLUE","GREEN","#000000","#ffffff","ROYAL_BLUE"],"title":"GmailLabelColor","type":"string"},"user_id":{"default":"me","description":"The email address of the user in whose account the label will be created.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["label_name"],"title":"CreateLabelRequest","type":"object"}},"type":"function"},{"function":{"description":"Send a one-shot prompt to the Sanity Content Agent. Stateless one-shot prompt endpoint. No thread management or message persistence. Ideal for simple, single-turn interactions. Use when you need to send a single prompt and receive a response without maintaining conversation context.","name":"GMAIL_CREATE_PROMPT_POST","parameters":{"description":"Request model for sending a one-shot prompt to the Sanity Content Agent.\nStateless endpoint - no thread management or message persistence.\nIdeal for simple, single-turn interactions.","properties":{"config":{"additionalProperties":true,"description":"Agent configuration. Controls behavior, capabilities, and document access.","title":"Config","type":"object"},"format":{"default":"markdown","description":"Controls how directives in the response are formatted.","enum":["markdown","directives"],"title":"FormatType","type":"string"},"instructions":{"description":"Custom instructions for the agent","examples":["Be concise and use bullet points"],"title":"Instructions","type":"string"},"message":{"description":"The prompt message to send to the agent","examples":["Summarize my latest blog posts"],"maxLength":10000,"minLength":1,"title":"Message","type":"string"},"organizationId":{"description":"Your Sanity organization ID","examples":["abc123"],"minLength":1,"title":"Organization Id","type":"string"}},"required":["organizationId","message"],"title":"CreatePromptPostRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes a specific Gmail draft using its ID with no recovery possible; verify the correct `draft_id` and obtain explicit user confirmation before calling. Ensure the draft exists and the user has necessary permissions for the given `user_id`.","name":"GMAIL_DELETE_DRAFT","parameters":{"properties":{"draft_id":{"description":"Immutable ID of the draft to delete. Must be obtained from GMAIL_LIST_DRAFTS or GMAIL_CREATE_EMAIL_DRAFT actions. Draft IDs typically have an 'r' prefix (e.g., 'r-1234567890' or 'r1234567890'). Draft IDs differ from message IDs used in GMAIL_BATCH_DELETE_MESSAGES — do not interchange. When multiple similar drafts exist, confirm the exact ID via GMAIL_LIST_DRAFTS before deleting.","examples":["r-8388446164079304564","r1234567890123456789"],"title":"Draft Id","type":"string"},"user_id":{"default":"me","description":"User's email address or 'me' for the authenticated user; 'me' is recommended.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["draft_id"],"title":"DeleteDraftRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to permanently delete a Gmail filter by its ID. Use when you need to remove an existing email filtering rule.","name":"GMAIL_DELETE_FILTER","parameters":{"properties":{"filter_id":{"description":"The ID of the filter to be deleted. Filter IDs can be obtained from GMAIL_LIST_FILTERS action.","examples":["ANe1Bmhf1zE0KtM6340kAXudxukJADqVJ6jVVA","ANe1BmjqK9vN_vH9dW1234567890"],"title":"Filter Id","type":"string"},"user_id":{"default":"me","description":"User's email address or 'me' for the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["filter_id"],"title":"DeleteFilterRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently DELETES a user-created Gmail label from the account (not from a message). WARNING: This action DELETES the label definition itself, removing it from all messages. System labels (INBOX, SENT, UNREAD, etc.) cannot be deleted. To add/remove labels from specific messages, use GMAIL_ADD_LABEL_TO_EMAIL action instead.","name":"GMAIL_DELETE_LABEL","parameters":{"properties":{"label_id":{"description":"ID of the user-created label to be permanently DELETED from the account. Must be a custom label ID (format: 'Label_' e.g., 'Label_1', 'Label_42'). System labels (INBOX, SENT, DRAFT, UNREAD, STARRED, IMPORTANT, SPAM, TRASH, CATEGORY_*, etc.) cannot be deleted. WARNING: This action permanently DELETES the label definition from your account - it does NOT remove a label from a message. To add/remove labels from messages, use GMAIL_ADD_LABEL_TO_EMAIL instead.","examples":["Label_1","Label_42"],"pattern":"^Label_.+$","title":"Label Id","type":"string"},"user_id":{"default":"me","description":"User's email address or 'me' for the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["label_id"],"title":"DeleteLabelRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes a specific email message by its ID from a Gmail mailbox; for `user_id`, use 'me' for the authenticated user or an email address to which the authenticated user has delegated access.","name":"GMAIL_DELETE_MESSAGE","parameters":{"properties":{"message_id":{"description":"Identifier of the email message to delete.","examples":["185120e4428ba8cf","17a872b77b9e7a3b"],"title":"Message Id","type":"string"},"user_id":{"default":"me","description":"User's email address. The special value 'me' refers to the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["message_id"],"title":"DeleteMessageRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to immediately and permanently delete a specified thread and all its messages. This operation cannot be undone. Use threads.trash instead for reversible deletion.","name":"GMAIL_DELETE_THREAD","parameters":{"properties":{"id":{"description":"ID of the Thread to delete.","examples":["19c8e0ea407b9cf9","18ea7715b619f09c"],"title":"Id","type":"string"},"user_id":{"default":"me","description":"User's email address. The special value 'me' refers to the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["id"],"title":"DeleteThreadRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches a list of email messages from a Gmail account, supporting filtering, pagination, and optional full content retrieval. Results are NOT sorted by recency; sort by internalDate client-side. The messages field may be absent or empty (valid no-results state); always null-check before accessing messageId or threadId. Null-check subject and header fields before string operations. For large result sets, prefer ids_only=true or metadata-only listing, then hydrate via GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID.","name":"GMAIL_FETCH_EMAILS","parameters":{"properties":{"ids_only":{"default":false,"description":"If true, only returns message IDs from the list API without fetching individual message details. Fastest option for getting just message IDs and thread IDs.","examples":[true,false],"title":"Ids Only","type":"boolean"},"include_payload":{"default":true,"description":"Set to true to include full message payload (headers, body, attachments); false for metadata only. payload may still be null even when true; use GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID for guaranteed complete content. When payload is present, bodies are base64url-encoded in payload.parts; replace '-'→'+' and '_'→'/' and fix padding before decoding, and check both text/plain and text/html parts.","examples":[true,false],"title":"Include Payload","type":"boolean"},"include_spam_trash":{"default":false,"description":"Set to true to include messages from 'SPAM' and 'TRASH'.","examples":[true,false],"title":"Include Spam Trash","type":"boolean"},"label_ids":{"description":"Filter by label IDs; only messages with all specified labels are returned (AND logic). Optional - omit or use empty list to fetch all messages without label filtering. System label IDs: 'INBOX', 'SPAM', 'TRASH', 'UNREAD', 'STARRED', 'IMPORTANT', 'CATEGORY_PRIMARY' (alias 'CATEGORY_PERSONAL'), 'CATEGORY_SOCIAL', 'CATEGORY_PROMOTIONS', 'CATEGORY_UPDATES', 'CATEGORY_FORUMS'. For custom/user-created labels, you MUST use the label ID (e.g., 'Label_123456'), NOT the display name. Use the 'listLabels' action to find label IDs for custom labels. Combining label_ids with label: in query applies AND logic across both, which can silently over-restrict results; use one strategy consistently.","examples":["INBOX","UNREAD","Label_123456"],"items":{"type":"string"},"title":"Label Ids","type":"array"},"max_results":{"default":1,"description":"Maximum number of messages to retrieve per page. Default of 1 retrieves only a single message; set higher for practical use. Hard cap is 500 per page.","examples":["10","100","500"],"maximum":500,"minimum":1,"title":"Max Results","type":"integer"},"page_token":{"description":"Token for retrieving a specific page, obtained from a previous response's `nextPageToken`. Must be a valid opaque token string from a previous API response. Do not pass arbitrary values. Omit for the first page. Loop calls using nextPageToken until it is absent to avoid silently missing messages. resultSizeEstimate is approximate — do not use as a stopping condition.","title":"Page Token","type":"string"},"query":{"description":"Gmail advanced search query (e.g., 'from:user subject:meeting'). Supported operators: 'from:', 'to:', 'subject:', 'label:', 'has:', 'is:', 'in:', 'category:', 'after:YYYY/MM/DD', 'before:YYYY/MM/DD', AND/OR/NOT. IMPORTANT - 'is:' vs 'label:' usage: Use 'is:' for special mail states: is:snoozed, is:unread, is:read, is:starred, is:important. Use 'label:' ONLY for user-created labels (e.g., 'label:work', 'label:projects'). Note: 'muted' may work with both 'is:muted' and 'label:muted' based on community reports. Common mistake: 'label:snoozed' is WRONG - use 'is:snoozed' instead. Use quotes for exact phrases. Omit for no query filter. after:/before: evaluate whole calendar days in UTC; before: is exclusive — adjust for local timezone to avoid off-by-one-day gaps.","examples":["from:john@example.com is:unread","subject:meeting has:attachment","after:2024/01/01 before:2024/02/01","is:snoozed","is:important OR is:starred","label:work -label:spam"],"title":"Query","type":"string"},"user_id":{"default":"me","description":"User's email address or 'me' for the authenticated user. Non-'me' addresses require domain-level delegation; without it, authentication or not-found errors result.","examples":["me","user@example.com"],"title":"User Id","type":"string"},"verbose":{"default":true,"description":"If false, uses optimized concurrent metadata fetching for faster performance (~75% improvement). If true, uses standard detailed message fetching. When false, only essential fields (subject, sender, recipient, time, labels) are guaranteed. Body content and attachment details require verbose=true even when include_payload=true.","examples":[true,false],"title":"Verbose","type":"boolean"}},"title":"FetchEmailsRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches a specific email message by its ID, provided the `message_id` exists and is accessible to the authenticated `user_id`. Spam/trash messages are excluded unless upstream list/search calls used `include_spam_trash=true`. Use `internalDate` (milliseconds since epoch) rather than header `Date` for recency checks.","name":"GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID","parameters":{"properties":{"format":{"default":"full","description":"Format for message content. 'minimal': lightest (ID, thread ID, labels only). 'metadata': headers and message metadata without body content - ideal for summarization, analysis, or when you only need subject/sender/timestamp (recommended for most use cases). 'full': complete MIME structure with 50+ headers, nested parts, and base64url-encoded body data - heavy payload, only use when you need the complete raw MIME structure for parsing attachments or body content. 'raw': entire RFC 2822 formatted message as base64url string.","examples":["metadata","minimal","full","raw"],"title":"Format","type":"string"},"message_id":{"description":"The Gmail API message ID (hexadecimal string, typically 15-16 characters like '19b11732c1b578fd'). Must be obtained from Gmail API responses (e.g., List Messages, Search Messages). Do NOT use email subjects, dates, sender names, or custom identifiers. Do NOT use `threadId` (use GMAIL_FETCH_MESSAGE_BY_THREAD_ID for threads), the Message-ID email header, or any fabricated value — only IDs from Gmail API list/search responses.","examples":["19b11732c1b578fd","18c5e5b5f5d5e5b5","1736ccf5d7b4d452"],"minLength":1,"title":"Message Id","type":"string"},"user_id":{"default":"me","description":"User's email address or 'me' for the authenticated user.","examples":["user@example.com","me"],"title":"User Id","type":"string"}},"required":["message_id"],"title":"FetchMessageByMessageIdRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves messages from a Gmail thread using its `thread_id`, where the thread must be accessible by the specified `user_id`. Returns a `messages` array; `thread_id` is not echoed in the response. Message order is not guaranteed — sort by `internalDate` to find oldest/newest. Check `labelIds` per message to filter drafts. Concurrent bulk calls may trigger 403 `userRateLimitExceeded` or 429; cap concurrency ~10 and use exponential backoff.","name":"GMAIL_FETCH_MESSAGE_BY_THREAD_ID","parameters":{"properties":{"page_token":{"default":"","description":"Opaque page token for fetching a specific page of messages if results are paginated. Iterate calls by passing the returned `nextPageToken` until it is absent; stopping early will miss messages in long threads.","examples":["CiAKGhIKJdealEffectivelyPageToken"],"title":"Page Token","type":"string"},"thread_id":{"description":"Hexadecimal thread ID from Gmail API (e.g., '19bf77729bcb3a44'). Obtain from GMAIL_LIST_THREADS or GMAIL_FETCH_EMAILS. Prefixes like 'msg-f:' or 'thread-f:' are auto-stripped. Legacy Gmail web UI IDs (e.g., 'FMfcgzQfBZdVqKZcSVBhqwWLKWCtDdWQ') are NOT supported - use the API thread ID instead. Deduplicate thread_ids before calling when multiple listed messages share the same threadId to avoid redundant calls.","examples":["19bf77729bcb3a44","msg-f:19bf77729bcb3a44"],"title":"Thread Id","type":"string"},"user_id":{"default":"me","description":"The email address of the user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["thread_id"],"title":"FetchMessageByThreadIdRequest","type":"object"}},"type":"function"},{"function":{"description":"Forward an existing Gmail message to specified recipients, preserving original body and attachments. Verify recipients and content before forwarding to avoid unintended exposure. Bulk forwarding may trigger 429/5xx rate limits; keep concurrency to 5–10 and apply backoff. Messages near Gmail's size limits may fail; reconstruct a smaller draft if needed.","name":"GMAIL_FORWARD_MESSAGE","parameters":{"properties":{"additional_text":{"description":"Optional additional text to include before the forwarded content.","examples":["Please see the forwarded message below."],"title":"Additional Text","type":"string"},"bcc":{"description":"List of email addresses to BCC.","examples":[["bcc1@example.com","bcc2@example.com"]],"items":{"type":"string"},"title":"Bcc","type":"array"},"cc":{"description":"List of email addresses to CC.","examples":[["cc1@example.com","cc2@example.com"]],"items":{"type":"string"},"title":"Cc","type":"array"},"message_id":{"description":"Gmail message ID (hexadecimal string, e.g., '17f45ec49a9c3f1b'). Must contain only hex characters [0-9a-fA-F]. Obtain this from actions like 'List Messages' or 'Fetch Emails'.","examples":["17f45ec49a9c3f1b"],"maxLength":20,"minLength":10,"pattern":"^[0-9a-fA-F]+$","title":"Message Id","type":"string"},"recipients":{"description":"List of email addresses to forward the message to.","examples":[["john.doe@example.com","jane.smith@example.com"]],"items":{"type":"string"},"minItems":1,"title":"Recipients","type":"array"},"user_id":{"default":"me","description":"User's email address or 'me' for the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["message_id","recipients"],"title":"ForwardMessageRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a specific attachment by ID from a message in a user's Gmail mailbox, requiring valid message and attachment IDs. Returns base64url-encoded binary data (up to ~25 MB); the downloaded file location is at data.file.s3url (also exposes mimetype and name; no s3key). Attachments exceeding ~25 MB may be exposed as Google Drive links — use GOOGLEDRIVE_DOWNLOAD_FILE when a Drive file_id is present instead.","name":"GMAIL_GET_ATTACHMENT","parameters":{"properties":{"attachment_id":{"description":"The internal Gmail attachment ID (NOT the filename). This is a system-generated token string like 'ANGjdJ8s...'. Obtain this ID from the 'attachmentId' field in the 'attachmentList' array returned by fetchEmails or fetchMessageByMessageId actions. Do NOT pass the filename (e.g., 'report.pdf'). Requires a fully hydrated message payload: call GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID with format='full' to obtain valid attachment IDs — lightweight fetch modes may omit attachmentList entirely.","examples":["ANGjdJ8sZ7example1234","A_PART0.1_18exampleAttachmentId7f9"],"minLength":1,"title":"Attachment Id","type":"string"},"file_name":{"description":"Desired filename for the downloaded attachment. This is a required string field - do not pass null.","examples":["invoice.pdf","report.docx"],"minLength":1,"title":"File Name","type":"string"},"message_id":{"description":"Immutable ID of the message containing the attachment. This is a required string field - do not pass null. Obtain the message_id from Gmail API responses (e.g., fetchEmails, listThreads).","examples":["18exampleMessageId7f9"],"minLength":1,"title":"Message Id","type":"string"},"user_id":{"default":"me","description":"User's email address ('me' for authenticated user).","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["message_id","attachment_id","file_name"],"title":"GetAttachmentRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get the auto-forwarding setting for the specified account. Use when you need to retrieve the current auto-forwarding configuration including enabled status, forwarding email address, and message disposition.","name":"GMAIL_GET_AUTO_FORWARDING","parameters":{"properties":{"user_id":{"default":"me","description":"The user's email address. The special value 'me' can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"GetAutoForwardingRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches contacts (connections) for the authenticated Google account, allowing selection of specific data fields and pagination. Only covers saved contacts and 'Other Contacts'; email-header-only senders are out of scope. Contact records may have sparse data — handle missing fields gracefully. People API shares a per-user QPS quota; HTTP 429 requires exponential backoff (1s, 2s, 4s).","name":"GMAIL_GET_CONTACTS","parameters":{"properties":{"include_other_contacts":{"default":true,"description":"Include 'Other Contacts' (interacted with but not explicitly saved) in addition to regular contacts. WARNING: 'Other Contacts' often have incomplete data - they may lack names, phone numbers, and other fields even when requested. These auto-generated contacts are created from email interactions and typically only have email addresses. Set to False if you need contacts with complete name information. When True, each contact will have a 'contactSource' field indicating its origin. When True, `person_fields` is restricted to `emailAddresses`, `names`, `phoneNumbers`, and `metadata` only — requesting other fields (e.g., `organizations`, `birthdays`) causes validation errors or silent omissions.","title":"Include Other Contacts","type":"boolean"},"page_token":{"description":"Token to retrieve a specific page of results, obtained from 'nextPageToken' in a previous response. Repeat calls with each successive `nextPageToken` until it is absent — stopping early silently omits contacts.","title":"Page Token","type":"string"},"person_fields":{"default":"emailAddresses,names,birthdays,genders","description":"Comma-separated person fields to retrieve for each contact (e.g., 'names,emailAddresses').","examples":["addresses","ageRanges","biographies","birthdays","coverPhotos","emailAddresses","events","genders","imClients","interests","locales","memberships","metadata","names","nicknames","occupations","organizations","phoneNumbers","photos","relations","residences","sipAddresses","skills","urls","userDefined"],"title":"Person Fields","type":"string"},"resource_name":{"default":"people/me","description":"Identifier for the person resource whose connections are listed; use 'people/me' for the authenticated user.","title":"Resource Name","type":"string"}},"title":"GetContactsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a single Gmail draft by its ID. Use this to fetch and inspect draft content before sending via GMAIL_SEND_DRAFT. The format parameter controls the level of detail returned.","name":"GMAIL_GET_DRAFT","parameters":{"properties":{"draft_id":{"description":"The ID of the draft to retrieve. Draft IDs are typically alphanumeric strings (e.g., 'r99885592323229922'). Use GMAIL_LIST_DRAFTS to retrieve valid draft IDs.","examples":["r99885592323229922","r-8388446164079304564"],"title":"Draft Id","type":"string"},"format":{"default":"full","description":"Format for the draft message: 'minimal' (ID/labels only), 'full' (complete data with parsed payload), 'raw' (base64url-encoded RFC 2822 format), 'metadata' (ID/labels/headers only).","examples":["full","metadata","minimal","raw"],"title":"Format","type":"string"},"user_id":{"default":"me","description":"The user's email address. The special value `me` can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["draft_id"],"title":"GetDraftRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve a specific Gmail filter by its ID. Use when you need to inspect the criteria and actions of an existing filter.","name":"GMAIL_GET_FILTER","parameters":{"properties":{"id":{"description":"The ID of the filter to be fetched.","examples":["ANe1BmjnwmKdVlXGMLeKsv98UJGFe82pUGCsVQ"],"title":"Id","type":"string"},"user_id":{"default":"me","description":"The user's email address or the special value 'me' to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["id"],"title":"GetFilterRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets details for a specified Gmail label. Use this to retrieve label information including name, type, visibility settings, message/thread counts, and color.","name":"GMAIL_GET_LABEL","parameters":{"properties":{"id":{"description":"The ID of the label to retrieve. Can be a system label (e.g., INBOX, SENT, DRAFT, UNREAD, STARRED, SPAM, TRASH) or a user-created label ID (e.g., Label_1, Label_42).","examples":["INBOX","SENT","Label_1","Label_42"],"title":"Id","type":"string"},"user_id":{"default":"me","description":"The user's email address. The special value 'me' can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["id"],"title":"GetLabelRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve the language settings for a Gmail user. Use when you need to determine the display language preference for the authenticated user or a specific Gmail account.","name":"GMAIL_GET_LANGUAGE_SETTINGS","parameters":{"properties":{"user_id":{"default":"me","description":"The email address of the Gmail user whose language settings are to be retrieved, or the special value 'me' to indicate the currently authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"GetLanguageSettingsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves either a specific person's details (using `resource_name`) or lists 'Other Contacts' (if `other_contacts` is true), with `person_fields` specifying the data to return. Scope is limited to the authenticated user's own contacts and 'Other Contacts' history only.","name":"GMAIL_GET_PEOPLE","parameters":{"properties":{"other_contacts":{"default":false,"description":"If true, retrieves 'Other Contacts' (people interacted with but not explicitly saved), ignoring `resource_name` and enabling pagination/sync. If false, retrieves information for the single person specified by `resource_name`.","title":"Other Contacts","type":"boolean"},"page_size":{"default":10,"description":"The number of 'Other Contacts' to return per page. Applicable only when `other_contacts` is true.","maximum":1000,"minimum":1,"title":"Page Size","type":"integer"},"page_token":{"default":"","description":"An opaque token from a previous response to retrieve the next page of 'Other Contacts' results. Applicable only when `other_contacts` is true and paginating.","title":"Page Token","type":"string"},"person_fields":{"default":"emailAddresses,names,birthdays,genders","description":"A comma-separated field mask to restrict which fields on the person (or persons) are returned. Consult the Google People API documentation for a comprehensive list of valid fields. Omitted fields are silently absent from the response — no error is raised. When `other_contacts` is true, only a restricted subset is valid (`emailAddresses`, `names`, `phoneNumbers`, `metadata`); extended fields like `organizations` or `birthdays` may cause validation errors or silent omissions in that mode.","examples":["names,emailAddresses","emailAddresses,names,birthdays,genders","addresses,phoneNumbers,metadata"],"title":"Person Fields","type":"string"},"resource_name":{"default":"people/me","description":"Resource name identifying the person for whom to retrieve information (like the authenticated user or a specific contact). Used only when `other_contacts` is false. Deleted or stale resource_names may return partial records with missing `emailAddresses`, `names`, or other fields.","examples":["people/me","people/c12345678901234567890","people/102345678901234567890"],"title":"Resource Name","type":"string"},"sources":{"default":["READ_SOURCE_TYPE_CONTACT","READ_SOURCE_TYPE_PROFILE"],"description":"Source types to include when retrieving other contacts. READ_SOURCE_TYPE_CONTACT supports basic fields (emailAddresses, metadata, names, phoneNumbers, photos). READ_SOURCE_TYPE_PROFILE supports extended fields (birthdays, genders, organizations, etc.) but requires READ_SOURCE_TYPE_CONTACT to also be included. Applicable only when `other_contacts` is true.","items":{"description":"Source types for reading other contacts.","enum":["READ_SOURCE_TYPE_CONTACT","READ_SOURCE_TYPE_PROFILE"],"title":"ReadSourceType","type":"string"},"minItems":1,"title":"Sources","type":"array"},"sync_token":{"default":"","description":"A token from a previous 'Other Contacts' list call to retrieve only changes since the last sync; leave empty for an initial full sync. Applicable only when `other_contacts` is true.","title":"Sync Token","type":"string"}},"title":"GetPeopleRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves Gmail profile information (email address, aggregate messagesTotal/threadsTotal, historyId) for a user. messagesTotal counts individual emails; threadsTotal counts conversations; neither is per-label — use GMAIL_FETCH_EMAILS with label filters for label-specific counts. The returned historyId seeds incremental sync via GMAIL_LIST_HISTORY; if historyIdTooOld is returned, rescan with GMAIL_FETCH_EMAILS before resuming. Response may be wrapped under a top-level data field; unwrap before reading fields. A successful call confirms mailbox connectivity but not full mailbox access if granted scopes are narrow. Use the returned email address to dynamically identify the authenticated account rather than hard-coding it.","name":"GMAIL_GET_PROFILE","parameters":{"properties":{"user_id":{"default":"me","description":"The email address of the Gmail user whose profile is to be retrieved, or the special value 'me' to indicate the currently authenticated user. Prefer 'me' unless explicitly targeting another account; passing a raw email address that does not match the connected account may fail or access the wrong mailbox.","examples":["user@example.com","me"],"title":"User Id","type":"string"}},"title":"GetProfileRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve vacation responder settings for a Gmail user. Use when you need to check if out-of-office auto-replies are configured and view their content.","name":"GMAIL_GET_VACATION_SETTINGS","parameters":{"properties":{"user_id":{"default":"me","description":"The email address of the Gmail user whose vacation settings are to be retrieved, or the special value 'me' to indicate the currently authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"GetVacationSettingsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to import a message into the user's mailbox with standard email delivery scanning and classification. Use when you need to add an existing email to a Gmail account without sending it through SMTP. This method doesn't perform SPF checks, so it might not work for some spam messages.","name":"GMAIL_IMPORT_MESSAGE","parameters":{"properties":{"deleted":{"description":"Mark the email as permanently deleted (not TRASH) and only visible in Google Vault to a Vault administrator. Only used for Google Workspace accounts.","title":"Deleted","type":"boolean"},"internal_date_source":{"description":"Source for Gmail's internal date of the message.","enum":["receivedTime","dateHeader"],"examples":["receivedTime","dateHeader"],"title":"InternalDateSource","type":"string"},"never_mark_spam":{"description":"Ignore the Gmail spam classifier decision and never mark this email as SPAM in the mailbox.","title":"Never Mark Spam","type":"boolean"},"process_for_calendar":{"description":"Process calendar invites in the email and add any extracted meetings to the Google Calendar for this user.","title":"Process For Calendar","type":"boolean"},"raw":{"description":"The entire email message in RFC 2822 format, base64url-encoded. This is the raw email message to import into the mailbox.","examples":["RnJvbTogdGVzdEBleGFtcGxlLmNvbQ0KVG86IHJlY2lwaWVudEBleGFtcGxlLmNvbQ0KU3ViamVjdDogVGVzdCBJbXBvcnQgTWVzc2FnZQ0KDQpUaGlzIGlzIGEgdGVzdCBlbWFpbCBtZXNzYWdlIGZvciBpbXBvcnRpbmcgdmlhIEdtYWlsIEFQSS4="],"title":"Raw","type":"string"},"user_id":{"default":"me","description":"The user's email address. The special value 'me' can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["raw"],"title":"ImportMessageRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to insert a message into the user's mailbox similar to IMAP APPEND. Use when you need to add an email directly to a mailbox bypassing most scanning and classification. This does not send a message.","name":"GMAIL_INSERT_MESSAGE","parameters":{"properties":{"deleted":{"description":"Mark the email as permanently deleted (not TRASH) and only visible in Google Vault to a Vault administrator. Only used for Google Workspace accounts.","title":"Deleted","type":"boolean"},"internalDateSource":{"description":"Source for Gmail's internal date of the message.","enum":["receivedTime","dateHeader"],"title":"InternalDateSource","type":"string"},"raw":{"description":"The entire email message in RFC 2822 formatted and base64url encoded string. This is the raw message content that will be inserted into the mailbox.","examples":["RnJvbTogdGVzdEBleGFtcGxlLmNvbQ0KVG86IHRlc3RAZXhhbXBsZS5jb20NCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiDQpNSU1FLVZlcnNpb246IDEuMA0KU3ViamVjdDogVGVzdCBNZXNzYWdlDQoNCkhpLCB0aGlzIGlzIGEgdGVzdCBtZXNzYWdlLg=="],"title":"Raw","type":"string"},"user_id":{"default":"me","description":"The user's email address. The special value 'me' can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["raw"],"title":"InsertMessageRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list client-side encrypted identities for an authenticated user. Use when you need to retrieve CSE identity configurations including key pair associations.","name":"GMAIL_LIST_CSE_IDENTITIES","parameters":{"properties":{"page_size":{"description":"The number of identities to return. If not provided, the page size will default to 20 entries.","examples":[20,50],"minimum":1,"title":"Page Size","type":"integer"},"page_token":{"description":"Pagination token indicating which page of identities to return.","examples":["ABCDEF123456"],"title":"Page Token","type":"string"},"user_id":{"default":"me","description":"The requester's primary email address. Use 'me' to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"ListCseIdentitiesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list client-side encryption key pairs for an authenticated user. Use when you need to retrieve CSE keypair configurations including public keys and enablement states. Supports pagination for large result sets.","name":"GMAIL_LIST_CSE_KEYPAIRS","parameters":{"properties":{"page_size":{"description":"The number of key pairs to return per page. If not provided, the page size will default to 20 entries.","examples":[20,50],"minimum":1,"title":"Page Size","type":"integer"},"page_token":{"description":"Pagination token indicating which page of key pairs to return. Omit to return the first page.","examples":["ABCDEF123456"],"title":"Page Token","type":"string"},"user_id":{"default":"me","description":"The requester's primary email address. Use 'me' to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"ListCseKeypairsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a paginated list of email drafts from a user's Gmail account. Use verbose=true to get full draft details including subject, body, sender, and timestamp. Draft ordering is non-guaranteed; iterate using page_token until it is absent to retrieve all drafts. Newly created drafts may not appear immediately. Rapid calls may trigger 403 userRateLimitExceeded or 429 errors; apply exponential backoff (1s, 2s, 4s) before retrying.","name":"GMAIL_LIST_DRAFTS","parameters":{"properties":{"max_results":{"default":1,"description":"Maximum number of drafts to return per page.","examples":[10,100,500],"maximum":500,"minimum":1,"title":"Max Results","type":"integer"},"page_token":{"default":"","description":"Token from a previous response to retrieve a specific page of drafts. Ordering is non-guaranteed; continue paginating until page_token is absent in the response to retrieve all drafts.","examples":["CiaKJDhWSE5UURE9PSIsImMiOiJhYmMxMjMifQ=="],"title":"Page Token","type":"string"},"user_id":{"default":"me","description":"User's mailbox ID; use 'me' for the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"},"verbose":{"default":false,"description":"If true, fetches full draft details including subject, sender, recipient, body, and timestamp. If false, returns only draft IDs (faster). Increases response payload size; tune max_results accordingly. Use verbose=true before destructive operations to confirm draft identity by subject, recipient, and timestamp.","examples":[true,false],"title":"Verbose","type":"boolean"}},"title":"ListDraftsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list all Gmail filters (rules) in the mailbox. Use for security audits to detect malicious filter rules or before creating new filters to avoid duplicates.","name":"GMAIL_LIST_FILTERS","parameters":{"properties":{"user_id":{"default":"me","description":"The user's email address or the special value 'me' to indicate the authenticated user whose filters will be retrieved.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"ListFiltersRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list all forwarding addresses for the specified Gmail account. Use when you need to retrieve the email addresses that are allowed to be used for forwarding messages.","name":"GMAIL_LIST_FORWARDING_ADDRESSES","parameters":{"properties":{"user_id":{"default":"me","description":"The user's email address or the special value 'me' to indicate the authenticated user whose forwarding addresses will be retrieved.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"ListForwardingAddressesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list Gmail mailbox change history since a known startHistoryId. Use for incremental mailbox syncs. Persist the latest historyId as a checkpoint across sessions; without it, incremental sync is unreliable. An empty history list in the response is valid and means no new changes occurred.","name":"GMAIL_LIST_HISTORY","parameters":{"properties":{"history_types":{"description":"Filter by specific history types. Allowed values: messageAdded, messageDeleted, labelAdded, labelRemoved.","examples":[["messageAdded","labelRemoved"]],"items":{"enum":["messageAdded","messageDeleted","labelAdded","labelRemoved"],"type":"string"},"title":"History Types","type":"array"},"label_id":{"description":"Only return history records involving messages with this label ID.","examples":["INBOX"],"title":"Label Id","type":"string"},"max_results":{"default":100,"description":"Maximum number of history records to return. Default is 100; max is 500.","examples":[100,500],"maximum":500,"minimum":1,"title":"Max Results","type":"integer"},"page_token":{"description":"Token to retrieve a specific page of results. If the response includes nextPageToken, loop requests using this parameter until no nextPageToken is returned; failing to paginate will silently miss changes.","examples":["ABCDEF123456"],"title":"Page Token","type":"string"},"start_history_id":{"description":"Required. Returns history records after this ID. If the ID is invalid or too old, the API returns 404. Perform a full sync in that case. Should be a numeric string. On 404 (historyIdTooOld) or 400 (invalidArgument), recover by fetching a fresh historyId via GMAIL_GET_PROFILE, then perform a one-time full sync via GMAIL_FETCH_EMAILS before resuming incremental calls.","examples":["1234567890"],"title":"Start History Id","type":"string"},"user_id":{"default":"me","description":"The user's email address. Use 'me' to specify the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["start_history_id"],"title":"ListHistoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves all system and user-created labels for a Gmail account in a single unpaginated response. Primary use: obtain internal label IDs (e.g., 'Label_123') required by other Gmail tools — display names cannot be used as label identifiers and cause silent failures or errors. System labels (INBOX, UNREAD, SPAM, TRASH, etc.) are case-sensitive and must be used exactly as returned; INBOX, SPAM, and TRASH are read-only and cannot be added/removed via label modification tools. The Gmail search 'label:' operator accepts display names, but label_ids parameters in tools like GMAIL_FETCH_EMAILS require internal IDs from this tool — mixing conventions yields zero results silently. Do not hardcode label IDs across sessions; refresh via this tool on conflict errors.","name":"GMAIL_LIST_LABELS","parameters":{"properties":{"include_details":{"default":false,"description":"If true, fetches detailed info for each label including message/thread counts (messagesTotal, messagesUnread, threadsTotal, threadsUnread). This requires additional API calls and may be slower for accounts with many labels. If false (default), returns basic label info (id, name, type) which is faster. Counts are eventually consistent and may lag real-time mailbox state by a few seconds.","examples":[true,false],"title":"Include Details","type":"boolean"},"user_id":{"default":"me","description":"Identifies the Gmail account (owner's email or 'me' for authenticated user) for which labels will be listed.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"ListLabelsRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GMAIL_FETCH_EMAILS instead. Lists the messages in the user's mailbox. Use when you need to retrieve a list of email messages with optional filtering by labels or search query.","name":"GMAIL_LIST_MESSAGES","parameters":{"properties":{"include_spam_trash":{"description":"Include messages from SPAM and TRASH in the results. Default is false.","examples":[true,false],"title":"Include Spam Trash","type":"boolean"},"label_ids":{"description":"Only return messages with labels that match all of the specified label IDs. Messages in a thread might have labels that other messages in the same thread don't have.","examples":[["INBOX"],["UNREAD","IMPORTANT"]],"items":{"type":"string"},"title":"Label Ids","type":"array"},"max_results":{"description":"Maximum number of messages to return. Defaults to 100. The maximum allowed value is 500.","examples":[10,50,100],"maximum":500,"minimum":1,"title":"Max Results","type":"integer"},"page_token":{"description":"Page token to retrieve a specific page of results in the list.","examples":["NextPageToken123"],"title":"Page Token","type":"string"},"q":{"description":"Only return messages matching the specified query. Supports the same query format as the Gmail search box. For example, 'from:someuser@example.com is:unread'. Cannot be used when accessing the API using the gmail.metadata scope.","examples":["is:unread","from:example@example.com","subject:meeting"],"title":"Q","type":"string"},"user_id":{"default":"me","description":"The user's email address or 'me' to specify the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"ListMessagesRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists the send-as aliases for a Gmail account, including the primary address and custom 'from' aliases. Use when you need to retrieve available sending addresses for composing emails.","name":"GMAIL_LIST_SEND_AS","parameters":{"properties":{"user_id":{"default":"me","description":"The user's email address or the special value 'me' to indicate the authenticated user whose send-as aliases will be retrieved.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"ListSendAsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists S/MIME configs for the specified send-as alias. Use when you need to retrieve all S/MIME certificate configurations associated with a specific send-as email address.","name":"GMAIL_LIST_SMIME_INFO","parameters":{"properties":{"send_as_email":{"description":"The email address that appears in the 'From:' header for mail sent using this alias.","examples":["alias@example.com","noreply@example.com"],"title":"Send As Email","type":"string"},"user_id":{"default":"me","description":"The user's email address. The special value 'me' can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["send_as_email"],"title":"ListSmimeInfoRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a list of email threads from a Gmail account, identified by `user_id` (email address or 'me'), supporting filtering and pagination. Spam and trash are excluded by default unless explicitly targeted via `label:spam` or `label:trash` in the query.","name":"GMAIL_LIST_THREADS","parameters":{"properties":{"max_results":{"default":10,"description":"Maximum number of threads to return. Hard cap is ~500 per call. For full mailbox coverage, loop using `nextPageToken` via `page_token` until absent.","examples":["10","50","100"],"maximum":500,"minimum":1,"title":"Max Results","type":"integer"},"page_token":{"default":"","description":"Token from a previous response to retrieve a specific page of results; omit for the first page.","examples":["abcPageToken123"],"title":"Page Token","type":"string"},"query":{"default":"","description":"Filter for threads, using Gmail search query syntax (e.g., 'from:user@example.com is:unread'). Supported operators include `from:`, `to:`, `subject:`, `label:`, `is:unread`, `has:attachment`, `after:`, `before:`. Dates must use `YYYY/MM/DD` format; date operators are UTC-based. Exact subject phrases require quotes (e.g., `subject:'meeting notes'`).","examples":["is:unread","from:john.doe@example.com","subject:important"],"title":"Query","type":"string"},"user_id":{"default":"me","description":"The user's email address or 'me' to specify the authenticated Gmail account.","examples":["me","user@example.com"],"title":"User Id","type":"string"},"verbose":{"default":false,"description":"If false, returns threads with basic fields (id, snippet, historyId). If true, returns threads with complete message details including headers, body, attachments, and metadata for each message in the thread. Combining `verbose=true` with large `max_results` produces very large responses; keep `max_results` modest when verbose is enabled.","examples":[true,false],"title":"Verbose","type":"boolean"}},"title":"ListThreadsRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds or removes specified existing label IDs from a Gmail thread, affecting all its messages; ensure the thread ID is valid. To modify a single message only, use a message-level tool instead.","name":"GMAIL_MODIFY_THREAD_LABELS","parameters":{"properties":{"add_label_ids":{"description":"List of label IDs to add to the thread. Must be valid label IDs that exist in the user's account. System labels use uppercase names (e.g., 'INBOX', 'STARRED', 'IMPORTANT', 'UNREAD', 'SPAM', 'TRASH', 'SENT', 'DRAFT', 'CATEGORY_PERSONAL', 'CATEGORY_SOCIAL', 'CATEGORY_PROMOTIONS', 'CATEGORY_UPDATES', 'CATEGORY_FORUMS'). Custom labels use the format 'Label_N' (e.g., 'Label_1', 'Label_42'). Use GMAIL_LIST_LABELS to discover available label IDs. Accepts either a list or a JSON-encoded string. Note: If a label appears in both add_label_ids and remove_label_ids, the add operation takes priority. Use GMAIL_CREATE_LABEL first if the label does not yet exist, then supply its returned ID here.","examples":["STARRED","INBOX","Label_1"],"items":{"type":"string"},"title":"Add Label Ids","type":"array"},"remove_label_ids":{"description":"List of label IDs to remove from the thread. Must be valid label IDs that exist in the user's account. System labels use uppercase names (e.g., 'INBOX', 'STARRED', 'IMPORTANT', 'UNREAD', 'SPAM', 'TRASH', 'SENT', 'DRAFT', 'CATEGORY_PERSONAL', 'CATEGORY_SOCIAL', 'CATEGORY_PROMOTIONS', 'CATEGORY_UPDATES', 'CATEGORY_FORUMS'). Custom labels use the format 'Label_N' (e.g., 'Label_1', 'Label_42'). Use GMAIL_LIST_LABELS to discover available label IDs. Accepts either a list or a JSON-encoded string. Note: Labels that appear in both add_label_ids and remove_label_ids will be automatically removed from this list (add takes priority).","examples":["IMPORTANT","CATEGORY_UPDATES","Label_1"],"items":{"type":"string"},"title":"Remove Label Ids","type":"array"},"thread_id":{"description":"Immutable ID of the thread to modify.","examples":["18ea7715b619f09c"],"title":"Thread Id","type":"string"},"user_id":{"default":"me","description":"User's email address or 'me' for the authenticated user.","examples":["user@example.com","me"],"title":"User Id","type":"string"}},"required":["thread_id"],"title":"ModifyThreadLabelsRequest","type":"object"}},"type":"function"},{"function":{"description":"Moves the specified thread to the trash. Any messages that belong to the thread are also moved to the trash.","name":"GMAIL_MOVE_THREAD_TO_TRASH","parameters":{"properties":{"thread_id":{"description":"Required. The ID of the thread to trash. This moves all messages in the thread to trash.","examples":["19c8e0f136c69508"],"title":"Thread Id","type":"string"},"user_id":{"default":"me","description":"The user's email address. The special value 'me' can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["thread_id"],"title":"MoveThreadToTrashRequest","type":"object"}},"type":"function"},{"function":{"description":"Moves an existing, non-deleted email message to the trash for the specified user. Trashed messages are recoverable and still count toward storage quota until purged. Prefer this over GMAIL_BATCH_DELETE_MESSAGES when recovery may be needed. For bulk operations, use GMAIL_BATCH_MODIFY_MESSAGES or GMAIL_BATCH_DELETE_MESSAGES instead of repeated calls to this tool.","name":"GMAIL_MOVE_TO_TRASH","parameters":{"properties":{"message_id":{"description":"Required. The unique identifier of the email message to move to trash. This is a hexadecimal string that can be obtained from listing or fetching emails. Verify the correct message via subject/snippet before trashing to avoid affecting unrelated conversations.","examples":["1875f42779f726f2"],"pattern":"^[0-9a-fA-F]+$","title":"Message Id","type":"string"},"user_id":{"default":"me","description":"User's email address or 'me' for the authenticated user.","examples":["user@example.com","me"],"title":"User Id","type":"string"}},"required":["message_id"],"title":"MoveToTrashRequest","type":"object"}},"type":"function"},{"function":{"description":"Patches the specified user-created label. System labels (e.g., INBOX, SENT, SPAM) cannot be modified and will be rejected.","name":"GMAIL_PATCH_LABEL","parameters":{"properties":{"color":{"additionalProperties":false,"description":"The color to assign to the label. Color is only available for labels that have their `type` set to `user`. At least one of 'name', 'messageListVisibility', 'labelListVisibility', or 'color' must be provided. Must include both `backgroundColor` and `textColor` subfields; both values must come from Gmail's predefined color palette — arbitrary hex values or omitting either field causes a 400 error.","properties":{"backgroundColor":{"description":"The background color of the label, represented as a hex string. Must be one of Gmail's predefined colors from the color palette. See: https://developers.google.com/workspace/gmail/api/guides/labels#color_palette","examples":["#ffffff","#f3f3f3","#efefef","#cccccc"],"title":"Background Color","type":"string"},"textColor":{"description":"The text color of the label, represented as a hex string. Must be one of Gmail's predefined colors from the color palette. See: https://developers.google.com/workspace/gmail/api/guides/labels#color_palette","examples":["#000000","#434343","#666666","#ffffff"],"title":"Text Color","type":"string"}},"title":"PatchLabelColor","type":"object"},"id":{"description":"The ID of the label to update.","examples":["LABEL_123"],"title":"Id","type":"string"},"labelListVisibility":{"description":"The visibility of the label in the label list in the Gmail web interface. At least one of 'name', 'messageListVisibility', 'labelListVisibility', or 'color' must be provided.","enum":["labelShow","labelShowIfUnread","labelHide"],"examples":["labelShow","labelShowIfUnread","labelHide"],"title":"Label List Visibility","type":"string"},"messageListVisibility":{"description":"The visibility of messages with this label in the message list in the Gmail web interface. At least one of 'name', 'messageListVisibility', 'labelListVisibility', or 'color' must be provided.","enum":["show","hide"],"examples":["show","hide"],"title":"Message List Visibility","type":"string"},"name":{"description":"The display name of the label. At least one of 'name', 'messageListVisibility', 'labelListVisibility', or 'color' must be provided. Must be non-empty, unique among user labels, and must not contain `,`, `/`, or `.`.","examples":["My Updated Label"],"title":"Name","type":"string"},"userId":{"description":"The user's email address. The special value `me` can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["userId","id"],"title":"PatchLabelRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to patch the specified send-as alias for a Gmail user. Use when you need to update properties of an existing send-as email address such as display name, reply-to address, signature, default status, or SMTP configuration.","name":"GMAIL_PATCH_SEND_AS","parameters":{"properties":{"display_name":{"description":"A name that appears in the 'From:' header for mail sent using this alias. For custom 'from' addresses, when empty, Gmail will populate the 'From:' header with the name used for the primary address. If the admin has disabled name updates, requests to update this field for the primary login will silently fail.","examples":["Composio Partnerships","John Doe"],"title":"Display Name","type":"string"},"is_default":{"description":"Whether this address is selected as the default 'From:' address in situations such as composing a new message or sending a vacation auto-reply. Setting this to true will make other send-as addresses non-default. Only true can be written to this field.","examples":[true],"title":"Is Default","type":"boolean"},"reply_to_address":{"description":"An optional email address that is included in a 'Reply-To:' header for mail sent using this alias. If empty, Gmail will not generate a 'Reply-To:' header.","examples":["noreply@example.com","support@example.com"],"title":"Reply To Address","type":"string"},"send_as_email":{"description":"The send-as alias email address to update. This is the email address that appears in the 'From:' header.","examples":["alias@example.com","partnerships@composio.dev"],"title":"Send As Email","type":"string"},"signature":{"description":"An optional HTML signature that is included in messages composed with this alias in the Gmail web UI. This signature is added to new emails only.","examples":["

Best regards,
John Doe

"],"title":"Signature","type":"string"},"smtp_msa":{"additionalProperties":false,"description":"Configuration for SMTP relay service.","properties":{"host":{"description":"The hostname of the SMTP service. Required when configuring SMTP.","examples":["smtp.gmail.com","smtp.example.com"],"title":"Host","type":"string"},"password":{"description":"The password for SMTP authentication. This is write-only and never appears in responses.","title":"Password","type":"string"},"port":{"description":"The port of the SMTP service. Required when configuring SMTP.","examples":[587,465,25],"title":"Port","type":"integer"},"securityMode":{"description":"The protocol that will be used to secure communication with the SMTP service. Required when configuring SMTP.","enum":["securityModeUnspecified","none","ssl","starttls"],"examples":["starttls","ssl"],"title":"Security Mode","type":"string"},"username":{"description":"The username for SMTP authentication. This is write-only and never appears in responses.","examples":["user@example.com"],"title":"Username","type":"string"}},"required":["host","port","securityMode"],"title":"SmtpMsa","type":"object"},"treat_as_alias":{"description":"Whether Gmail should treat this address as an alias for the user's primary email address. This setting only applies to custom 'from' aliases.","examples":[true,false],"title":"Treat As Alias","type":"boolean"},"user_id":{"default":"me","description":"The user's email address or the special value 'me' to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["send_as_email"],"title":"PatchSendAsRequest","type":"object"}},"type":"function"},{"function":{"description":"Sends a reply within a specific Gmail thread using the original thread's subject; do not provide a custom subject as it will start a new conversation instead of replying in-thread. Requires a valid `thread_id` and at least one of `recipient_email`, `cc`, or `bcc`. Supports attachments via the `attachment` parameter with `name`, `mimetype`, and `s3key` fields.","name":"GMAIL_REPLY_TO_THREAD","parameters":{"properties":{"attachment":{"description":"File to attach to the reply. Just Provide file path here Requires `name`, `mimetype`, and `s3key` fields; `s3key` must come from a prior upload/download response. Total message size including attachments must stay under 25 MB (400 badRequest if exceeded); use Drive links for large files.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"bcc":{"default":[],"description":"Blind Carbon Copy (BCC) recipients' email addresses in format 'user@domain.com'. Each address must include both username and domain separated by '@'. At least one of cc, bcc, or recipient_email must be provided.","examples":[["bcc.recipient@example.com"]],"items":{"type":"string"},"title":"Bcc","type":"array"},"cc":{"default":[],"description":"Carbon Copy (CC) recipients' email addresses in format 'user@domain.com'. Each address must include both username and domain separated by '@'. At least one of cc, bcc, or recipient_email must be provided.","examples":[["cc.recipient1@example.com","cc.recipient2@example.com"]],"items":{"type":"string"},"title":"Cc","type":"array"},"extra_recipients":{"default":[],"description":"Additional 'To' recipients' email addresses in format 'user@domain.com' (not Cc or Bcc). Each address must include both username and domain separated by '@'. Should only be used if recipient_email is also provided.","examples":[["jane.doe@example.com","another.person@example.com"]],"items":{"type":"string"},"title":"Extra Recipients","type":"array"},"is_html":{"default":false,"description":"Indicates if `message_body` is HTML; if True, body must be valid HTML, if False, body should not contain HTML tags. Mismatch causes recipients to see raw HTML tags as plain text.","examples":[true,false],"title":"Is Html","type":"boolean"},"message_body":{"default":"","description":"Content of the reply message, either plain text or HTML.","examples":["Dear Sir, Nice talking to you. Yours respectfully, John"],"title":"Message Body","type":"string"},"recipient_email":{"description":"Primary recipient's email address in format 'user@domain.com'. Must include both username and domain separated by '@'. Required if cc and bcc is not provided, else can be optional. Use extra_recipients if you want to send to multiple recipients.","examples":["john@doe.com"],"title":"Recipient Email","type":"string"},"thread_id":{"description":"Identifier of the Gmail thread for the reply. Must be a valid hexadecimal string, typically 15-16 characters long (e.g., '169eefc8138e68ca'). Prefixes like 'msg-f:' or 'thread-f:' are automatically stripped. Note: Format validation only checks the ID structure; the thread must also exist and be accessible in your Gmail account. Use GMAIL_LIST_THREADS or GMAIL_FETCH_EMAILS to retrieve valid thread IDs. Must be a threadId, not a messageId; passing a messageId can cause the reply to fail or start an unintended new thread.","examples":["169eefc8138e68ca","msg-f:169eefc8138e68ca"],"title":"Thread Id","type":"string"},"user_id":{"default":"me","description":"Identifier for the user sending the reply; 'me' refers to the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["thread_id"],"title":"ReplyToThreadRequest","type":"object"}},"type":"function"},{"function":{"description":"Searches contacts by matching the query against names, nicknames, emails, phone numbers, and organizations, optionally including 'Other Contacts'. Only searches the authenticated user's contact directory — people existing solely in message headers won't appear; use GMAIL_FETCH_EMAILS for those. Results may be zero or multiple; never auto-select from ambiguous results. Results paginate via next_page_token; follow until empty and deduplicate by email. Many records lack emailAddresses or names even when requested — handle missing keys. Directory/organization policies may suppress entries.","name":"GMAIL_SEARCH_PEOPLE","parameters":{"properties":{"other_contacts":{"default":true,"description":"When True, searches both saved contacts and 'Other Contacts' (people you've interacted with but not explicitly saved). Note: This restricts person_fields to only 'emailAddresses', 'metadata', 'names', 'phoneNumbers'. When False, searches only saved contacts but allows all person_fields including 'organizations', 'addresses', etc.","title":"Other Contacts","type":"boolean"},"pageSize":{"default":10,"description":"Maximum results to return; values >30 are capped to 30 by the API.","maximum":30,"minimum":0,"title":"Page Size","type":"integer"},"person_fields":{"default":"emailAddresses,metadata,names,phoneNumbers","description":"Comma-separated fields to return (e.g., 'names,emailAddresses'). When 'other_contacts' is true, only 'emailAddresses', 'metadata', 'names', 'phoneNumbers' are allowed. For full field access including 'organizations', set 'other_contacts' to false.","examples":["addresses","ageRanges","biographies","birthdays","coverPhotos","emailAddresses","events","genders","imClients","interests","locales","memberships","metadata","names","nicknames","occupations","organizations","phoneNumbers","photos","relations","residences","sipAddresses","skills","urls","userDefined"],"title":"Person Fields","type":"string"},"query":{"description":"Matches contact names, nicknames, email addresses, phone numbers, and organization fields.","title":"Query","type":"string"}},"required":["query"],"title":"SearchPeopleRequest","type":"object"}},"type":"function"},{"function":{"description":"Sends an existing draft email AS-IS to recipients already defined within the draft. IMPORTANT: This action does NOT accept recipient parameters (to, cc, bcc). The Gmail API's drafts/send endpoint sends drafts to whatever recipients are already set in the draft's To, Cc, and Bcc headers - it cannot add or override recipients. If the draft has no recipients, you must either: 1. Create a new draft with recipients using GMAIL_CREATE_EMAIL_DRAFT, then send it 2. Use GMAIL_SEND_EMAIL to send a new email directly with recipients. Send is immediate and irreversible — confirm recipients and content before calling. No scheduling support; trigger at the desired UTC time externally. Gmail enforces ~25 MB message size limit and daily send caps (~500 recipients/day personal, ~2,000/day Workspace).","name":"GMAIL_SEND_DRAFT","parameters":{"properties":{"draft_id":{"description":"The ID of the draft to send. Draft IDs are typically alphanumeric strings (e.g., 'r99885592323229922'). Important: Do not confuse draft_id with message_id - they are different identifiers. Use GMAIL_LIST_DRAFTS to retrieve valid draft IDs, or GMAIL_CREATE_EMAIL_DRAFT to create a new draft and get its ID. IMPORTANT: The draft MUST already have recipients (To, Cc, or Bcc) set - this action cannot add or override recipients. If the draft has no recipients, first create a new draft with recipients using GMAIL_CREATE_EMAIL_DRAFT, or use GMAIL_SEND_EMAIL to send a new email directly.","examples":["r99885592323229922"],"title":"Draft Id","type":"string"},"user_id":{"default":"me","description":"The user's email address. The special value `me` can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["draft_id"],"title":"SendDraftRequest","type":"object"}},"type":"function"},{"function":{"description":"Sends an email via Gmail API using the authenticated user's Google profile display name. Sends immediately and is irreversible — confirm recipients, subject, body, and attachments before calling. At least one of 'to' (or 'recipient_email'), 'cc', or 'bcc' must be provided. At least one of subject or body must be provided. Requires `is_html=True` if the body contains HTML. All common file types including PNG, JPG, PDF, MP4, etc. are supported as attachments. Gmail API limits total message size to ~25 MB after base64 encoding. To reply in an existing thread, use GMAIL_REPLY_TO_THREAD instead. No scheduled send support; enforce timing externally.","name":"GMAIL_SEND_EMAIL","parameters":{"properties":{"attachment":{"description":"File to attach. IMPORTANT: mimetype MUST contain a '/' separator - single words like 'pdf' or 'new' are invalid. Gmail API limits: total message size must not exceed ~25 MB after base64 encoding. Omit or set to null for no attachment. Empty attachment objects (with all fields empty/whitespace) are treated as no attachment. Must include valid name, mimetype (e.g., 'application/pdf'), and s3key obtained from a prior upload/download response — local paths or guessed keys cause 404 HeadObject errors.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"bcc":{"default":[],"description":"Blind Carbon Copy (BCC) recipients' email addresses. At least one of 'to'/'recipient_email', 'cc', or 'bcc' must be provided.","examples":[["auditor@example.com"]],"items":{"type":"string"},"title":"Bcc","type":"array"},"body":{"description":"Email content (plain text or HTML). Either subject or body must be provided for the email to be sent. If HTML, `is_html` must be `True`.","examples":["Hello team, let's discuss the project updates tomorrow.","

Welcome!

Thank you for signing up.

",""],"title":"Body","type":"string"},"cc":{"default":[],"description":"Carbon Copy (CC) recipients' email addresses. At least one of 'to'/'recipient_email', 'cc', or 'bcc' must be provided.","examples":[["manager@example.com","teamlead@example.com"]],"items":{"type":"string"},"title":"Cc","type":"array"},"extra_recipients":{"default":[],"description":"Additional 'To' recipients' email addresses (not Cc or Bcc). Should only be used if recipient_email is also provided.","examples":[["jane.doe@example.com","support@example.com"]],"items":{"type":"string"},"title":"Extra Recipients","type":"array"},"from_email":{"description":"Sender email address for the 'From' header. Use this to send from a verified alias configured in Gmail's 'Send mail as' settings. When not provided, the authenticated user's primary email address is used. The alias must be verified in Gmail settings before use.","examples":["alias@example.com","marketing@company.com"],"title":"From Email","type":"string"},"is_html":{"default":false,"description":"Set to `True` if the email body contains HTML tags.","title":"Is Html","type":"boolean"},"recipient_email":{"description":"Primary recipient's email address. You can also use 'to' as an alias for this parameter. At least one of 'to'/'recipient_email', 'cc', or 'bcc' must be provided. Use extra_recipients if you want to send to multiple recipients. Use the special value 'me' to send to your own authenticated email address. Must be a full user@domain address; 'me' is not valid here and will fail.","examples":["john@doe.com","me"],"title":"Recipient Email","type":"string"},"subject":{"description":"Subject line of the email. Either subject or body must be provided for the email to be sent.","examples":["Project Update Meeting","Your Weekly Newsletter"],"title":"Subject","type":"string"},"user_id":{"default":"me","description":"User's email address; the literal 'me' refers to the authenticated user.","examples":["user@example.com","me"],"title":"User Id","type":"string"}},"title":"SendEmailRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the IMAP settings for a Gmail user account, including whether IMAP is enabled, auto-expunge behavior, expunge behavior, and maximum folder size.","name":"GMAIL_SETTINGS_GET_IMAP","parameters":{"properties":{"user_id":{"default":"me","description":"The user's email address or the special value 'me' to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"SettingsGetImapRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve POP settings for a Gmail account. Use when you need to check the current POP configuration including access window and message disposition.","name":"GMAIL_SETTINGS_GET_POP","parameters":{"properties":{"user_id":{"default":"me","description":"The user's email address. The special value 'me' can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"GmailSettingsGetPopRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve a specific send-as alias configuration for a Gmail user. Use when you need to get details about a send-as email address including display name, signature, SMTP settings, and verification status. Fails with HTTP 404 if the specified address is not a member of the send-as collection.","name":"GMAIL_SETTINGS_SEND_AS_GET","parameters":{"properties":{"send_as_email":{"description":"The send-as alias email address to retrieve. This is the email address that appears in the 'From:' header.","examples":["alias@example.com","pranai@usefulagents.com"],"title":"Send As Email","type":"string"},"user_id":{"default":"me","description":"The email address of the Gmail user whose send-as alias to retrieve, or the special value 'me' to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["send_as_email"],"title":"GmailSettingsSendAsGetRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to stop receiving push notifications for a Gmail mailbox. Use when you need to disable watch notifications previously set up via the watch endpoint.","name":"GMAIL_STOP_WATCH","parameters":{"properties":{"user_id":{"default":"me","description":"The user's email address. The special value 'me' can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"StopWatchRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to remove a message from trash in Gmail. Use when you need to restore a previously trashed email message.","name":"GMAIL_UNTRASH_MESSAGE","parameters":{"properties":{"message_id":{"description":"Required. The unique identifier of the email message to remove from trash. This is a hexadecimal string that can be obtained from listing or fetching emails.","examples":["1875f42779f726f2","19c86b92a3e6ef0f"],"pattern":"^[0-9a-fA-F]+$","title":"Message Id","type":"string"},"user_id":{"default":"me","description":"User's email address or 'me' for the authenticated user.","examples":["user@example.com","me"],"title":"User Id","type":"string"}},"required":["message_id"],"title":"UntrashMessageRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to remove a thread from trash in Gmail. Use when you need to restore a deleted thread and its messages.","name":"GMAIL_UNTRASH_THREAD","parameters":{"properties":{"thread_id":{"description":"The ID of the thread to remove from trash.","examples":["19c8e0e93a7aa8ba","18ea7715b619f09c"],"title":"Thread Id","type":"string"},"user_id":{"default":"me","description":"The user's email address. The special value 'me' can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["thread_id"],"title":"UntrashThreadRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates (replaces) an existing Gmail draft's content in-place by draft ID. This action replaces the entire draft content with the new message - it does not patch individual fields. All fields are optional; if not provided, you should provide complete draft content to avoid data loss.","name":"GMAIL_UPDATE_DRAFT","parameters":{"properties":{"attachment":{"description":"File to attach to the draft. Replaces any existing attachments.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"bcc":{"default":[],"description":"Blind Carbon Copy (BCC) recipients' email addresses. Each must be a valid email address or display name format.","examples":[["bcc.recipient@example.com","BCC User "]],"items":{"type":"string"},"title":"Bcc","type":"array"},"body":{"description":"Email body content (plain text or HTML); is_html must be True if HTML. If not provided, previous body is preserved. Can also be provided as 'message_body'.","examples":["Hello Team,\n\nPlease find the attached report.\n\nBest regards","

Meeting Confirmation

This confirms our meeting.

"],"title":"Body","type":"string"},"cc":{"default":[],"description":"Carbon Copy (CC) recipients' email addresses. Each must be a valid email address or display name format.","examples":[["cc.recipient1@example.com","CC User "]],"items":{"type":"string"},"title":"Cc","type":"array"},"draft_id":{"description":"The ID of the draft to update. Must be a valid draft ID from GMAIL_LIST_DRAFTS or GMAIL_CREATE_EMAIL_DRAFT.","examples":["r-8388446164079304564","r1234567890123456789"],"title":"Draft Id","type":"string"},"extra_recipients":{"default":[],"description":"Additional 'To' recipients' email addresses. Each must be a valid email address or display name format. Should only be used if recipient_email is also provided.","examples":[["jane.doe@example.com","Jane Doe "]],"items":{"type":"string"},"title":"Extra Recipients","type":"array"},"is_html":{"default":false,"description":"Set to True if body is already formatted HTML. When False, plain text newlines are auto-converted to
tags.","examples":[true,false],"title":"Is Html","type":"boolean"},"recipient_email":{"description":"Primary recipient's email address. Must be a valid email address (e.g., 'user@example.com') or display name format (e.g., 'John Doe '). Optional - if not provided, previous recipients are preserved.","examples":["john.doe@example.com","John Doe "],"title":"Recipient Email","type":"string"},"subject":{"description":"Email subject line. If not provided, previous subject is preserved.","examples":["Project Update Q3","Meeting Reminder"],"title":"Subject","type":"string"},"thread_id":{"description":"ID of an existing Gmail thread. If provided, the draft will be part of this thread.","examples":["17f45ec49a9c3f1b"],"title":"Thread Id","type":"string"},"user_id":{"default":"me","description":"User's email address or 'me' for the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["draft_id"],"title":"UpdateDraftRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update IMAP settings for a Gmail account. Use when you need to modify IMAP configuration such as enabling/disabling IMAP, setting auto-expunge behavior, or configuring folder size limits.","name":"GMAIL_UPDATE_IMAP_SETTINGS","parameters":{"properties":{"autoExpunge":{"description":"If this value is true, Gmail will immediately expunge a message when it is marked as deleted in IMAP. Otherwise, Gmail will wait for an update from the client before expunging messages marked as deleted.","title":"Auto Expunge","type":"boolean"},"enabled":{"description":"Whether IMAP is enabled for the account.","title":"Enabled","type":"boolean"},"expungeBehavior":{"description":"The action that will be executed on a message when it is marked as deleted and expunged from the last visible IMAP folder. Possible values: 'expungeBehaviorUnspecified' (Unspecified behavior), 'archive' (Archive messages marked as deleted), 'trash' (Move messages marked as deleted to the trash), 'deleteForever' (Immediately and permanently delete messages marked as deleted).","enum":["expungeBehaviorUnspecified","archive","trash","deleteForever"],"title":"Expunge Behavior","type":"string"},"maxFolderSize":{"description":"An optional limit on the number of messages that an IMAP folder may contain. Legal values are 0, 1000, 2000, 5000 or 10000. A value of zero is interpreted to mean that there is no limit.","title":"Max Folder Size","type":"integer"},"user_id":{"default":"me","description":"The user's email address. The special value 'me' can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"UpdateImapSettingsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update the properties of an existing Gmail label. Use when you need to modify label name, visibility settings, or color.","name":"GMAIL_UPDATE_LABEL","parameters":{"description":"Request model for updating a Gmail label.","properties":{"color":{"additionalProperties":false,"description":"Color settings for the label. Both backgroundColor and textColor must be provided together.","properties":{"backgroundColor":{"description":"The background color represented as hex string #RRGGBB (ex #000000). This field is required in order to set the color of a label. Only predefined Gmail color values are allowed. See: https://developers.google.com/workspace/gmail/api/guides/labels#color_palette","examples":["#ffffff","#f3f3f3","#efefef","#cccccc"],"title":"Background Color","type":"string"},"textColor":{"description":"The text color of the label, represented as hex string. This field is required in order to set the color of a label. Only predefined Gmail color values are allowed. See: https://developers.google.com/workspace/gmail/api/guides/labels#color_palette","examples":["#000000","#434343","#666666","#ffffff"],"title":"Text Color","type":"string"}},"title":"UpdateLabelColor","type":"object"},"id":{"description":"The ID of the label to update.","examples":["Label_10","Label_123"],"title":"Id","type":"string"},"labelListVisibility":{"description":"Visibility of the label in the label list (Gmail sidebar).","enum":["labelShow","labelShowIfUnread","labelHide"],"examples":["labelShow","labelShowIfUnread","labelHide"],"title":"LabelListVisibility","type":"string"},"messageListVisibility":{"description":"Visibility of messages with this label in the message list.","enum":["show","hide"],"examples":["show","hide"],"title":"MessageListVisibility","type":"string"},"name":{"description":"The display name of the label.","examples":["Updated Label Name","My Label"],"title":"Name","type":"string"},"userId":{"default":"me","description":"The user's email address. The special value `me` can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["id"],"title":"UpdateLabelRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update the language settings for a Gmail user. Use when you need to change the display language preference for the authenticated user or a specific Gmail account. The returned displayLanguage may differ from the requested value if Gmail selects a close variant.","name":"GMAIL_UPDATE_LANGUAGE_SETTINGS","parameters":{"properties":{"displayLanguage":{"description":"The language to display Gmail in, formatted as an RFC 3066 Language Tag (e.g., 'en-GB' for British English, 'fr' for French, 'ja' for Japanese, 'es' for Spanish, 'de' for German, 'en' for English). The set of languages supported by Gmail evolves over time. Note: Gmail may save a close variant if the requested language is not directly supported. For example, if you request a regional variant that's not available, Gmail may save the base language instead.","examples":["en","en-GB","fr","ja","es","de","it","pt-BR"],"title":"Display Language","type":"string"},"user_id":{"default":"me","description":"The email address of the Gmail user whose language settings are to be updated, or the special value 'me' to indicate the currently authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["displayLanguage"],"title":"UpdateLanguageSettingsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update POP settings for a Gmail account. Use when you need to configure POP access window or message disposition behavior.","name":"GMAIL_UPDATE_POP_SETTINGS","parameters":{"properties":{"accessWindow":{"description":"The range of messages which are accessible via POP.","enum":["accessWindowUnspecified","disabled","fromNowOn","allMail"],"examples":["allMail","fromNowOn"],"title":"AccessWindow","type":"string"},"disposition":{"description":"The action that will be executed on a message after it has been fetched via POP.","enum":["dispositionUnspecified","leaveInInbox","archive","trash","markRead"],"examples":["leaveInInbox","archive"],"title":"Disposition","type":"string"},"user_id":{"default":"me","description":"The user's email address. The special value 'me' can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"UpdatePopSettingsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update a send-as alias for a Gmail user. Use when you need to modify display name, signature, reply-to address, or SMTP settings for a send-as email address. Gmail sanitizes HTML signatures before saving. Addresses other than the primary can only be updated by service accounts with domain-wide authority.","name":"GMAIL_UPDATE_SEND_AS","parameters":{"properties":{"display_name":{"description":"Name to appear in 'From:' header. For custom from addresses, Gmail populates with primary account name if empty. Admin restrictions may silently fail updates to primary login name.","title":"Display Name","type":"string"},"is_default":{"description":"Set to true to make this the default 'From:' address for composing messages and vacation auto-replies. Setting true makes the previous default false. Only legal writable value is true.","title":"Is Default","type":"boolean"},"reply_to_address":{"description":"Optional email address for 'Reply-To:' header. Gmail omits header if empty.","title":"Reply To Address","type":"string"},"send_as_email":{"description":"The send-as alias email address to update. This is the email address that appears in the 'From:' header.","examples":["alias@example.com","partnerships@composio.dev"],"title":"Send As Email","type":"string"},"signature":{"description":"Optional HTML signature for messages composed with this alias in Gmail web UI. Gmail sanitizes HTML before saving. Only added to new emails.","title":"Signature","type":"string"},"smtp_msa":{"additionalProperties":false,"description":"SMTP relay configuration for the send-as alias.","properties":{"host":{"description":"The hostname of the SMTP service. Required when configuring SMTP.","title":"Host","type":"string"},"password":{"description":"SMTP authentication password. Write-only field, never appears in responses.","title":"Password","type":"string"},"port":{"description":"The port of the SMTP service. Required when configuring SMTP.","title":"Port","type":"integer"},"securityMode":{"description":"Protocol for securing SMTP communication. Required when configuring SMTP.","enum":["securityModeUnspecified","none","ssl","starttls"],"title":"Security Mode","type":"string"},"username":{"description":"SMTP authentication username. Write-only field, never appears in responses.","title":"Username","type":"string"}},"required":["host","port","securityMode"],"title":"SmtpMsa","type":"object"},"treat_as_alias":{"description":"Whether Gmail treats this address as an alias for the user's primary email. Only applies to custom from aliases.","title":"Treat As Alias","type":"boolean"},"user_id":{"default":"me","description":"The email address of the Gmail user whose send-as alias to update, or the special value 'me' to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"required":["send_as_email"],"title":"UpdateSendAsRequest","type":"object"}},"type":"function"},{"function":{"description":"Update user attribute values for a resource. Use this action to set or update custom attributes for a user within an organization or project. When setting a value for an attribute key that also exists in SAML, the Sanity value will take precedence and shadow the SAML value.","name":"GMAIL_UPDATE_USER_ATTRIBUTES_VALUES","parameters":{"description":"Request model for updating user attribute values.","properties":{"attributes":{"additionalProperties":{},"description":"A dictionary of attribute key-value pairs to set for the user. Values can be strings, numbers, booleans, arrays, or nested objects. These will shadow any SAML values for the same keys.","examples":[{"department":"engineering","role":"developer"}],"title":"Attributes","type":"object"},"resourceId":{"description":"The unique identifier of the resource. For organizations, this is the organization ID.","examples":["test-org-123"],"title":"Resource Id","type":"string"},"resourceType":{"description":"The type of resource that scopes the user attributes (e.g., 'organization' or 'project').","enum":["organization","project"],"examples":["organization"],"title":"Resource Type","type":"string"},"userId":{"description":"The unique identifier of the user whose attributes to update.","examples":["test-user-456"],"title":"User Id","type":"string"}},"required":["resourceType","resourceId","userId","attributes"],"title":"SanityUpdateUserAttributesValuesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update vacation responder settings for a Gmail user. Use when you need to configure out-of-office auto-replies.","name":"GMAIL_UPDATE_VACATION_SETTINGS","parameters":{"properties":{"enableAutoReply":{"description":"Flag that controls whether Gmail automatically replies to messages.","title":"Enable Auto Reply","type":"boolean"},"endTime":{"description":"An optional end time for sending auto-replies (epoch ms). When this is specified, Gmail will automatically reply only to messages that it receives before the end time. If both startTime and endTime are specified, startTime must precede endTime.","title":"End Time","type":"string"},"responseBodyHtml":{"description":"Response body in HTML format. Gmail will sanitize the HTML before storing it. If both response_body_plain_text and response_body_html are specified, response_body_html will be used.","title":"Response Body Html","type":"string"},"responseBodyPlainText":{"description":"Response body in plain text format. If both response_body_plain_text and response_body_html are specified, response_body_html will be used.","title":"Response Body Plain Text","type":"string"},"responseSubject":{"description":"Optional text to prepend to the subject line in vacation responses. In order to enable auto-replies, either the response subject or the response body must be nonempty.","title":"Response Subject","type":"string"},"restrictToContacts":{"description":"Flag that determines whether responses are sent to recipients who are not in the user's list of contacts.","title":"Restrict To Contacts","type":"boolean"},"restrictToDomain":{"description":"Flag that determines whether responses are sent to recipients who are outside of the user's domain. This feature is only available for Google Workspace users.","title":"Restrict To Domain","type":"boolean"},"startTime":{"description":"An optional start time for sending auto-replies (epoch ms). When this is specified, Gmail will automatically reply only to messages that it receives after the start time. If both startTime and endTime are specified, startTime must precede endTime.","title":"Start Time","type":"string"},"user_id":{"default":"me","description":"The user's email address. The special value 'me' can be used to indicate the authenticated user.","examples":["me","user@example.com"],"title":"User Id","type":"string"}},"title":"UpdateVacationSettingsRequest","type":"object"}},"type":"function"}]}}} \ No newline at end of file diff --git a/tests/fixtures/composio_googledrive.json b/tests/fixtures/composio_googledrive.json new file mode 100644 index 000000000..c45bdc72f --- /dev/null +++ b/tests/fixtures/composio_googledrive.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"logs":["composio: 89 tool(s) listed"],"result":{"tools":[{"function":{"description":"DEPRECATED: Use GOOGLEDRIVE_CREATE_PERMISSION instead; use GOOGLEDRIVE_UPDATE_PERMISSION to modify existing permissions (avoids duplicate entries). Modifies sharing permissions for an existing Google Drive file, granting a specified role to a user, group, domain, or 'anyone'. Bulk calls may trigger 403 rateLimitExceeded (~100 req/100s/user); use jittered exponential backoff.","name":"GOOGLEDRIVE_ADD_FILE_SHARING_PREFERENCE","parameters":{"properties":{"domain":{"description":"Domain to grant permission to (e.g., 'example.com'). Required if 'type' is 'domain'.","examples":["example.com"],"title":"Domain","type":"string"},"email_address":{"description":"Email address of the user or group. Required if 'type' is 'user' or 'group'.","examples":["user@example.com"],"title":"Email Address","type":"string"},"file_id":{"description":"Unique identifier of the file to update sharing settings for. Must be an alphanumeric string containing only letters, numbers, hyphens, and underscores (no slashes, spaces, or other special characters). Use GOOGLEDRIVE_FIND_FILE or GOOGLEDRIVE_LIST_FILES to get valid file IDs from your Google Drive. For shared drive membership, supply the shared drive ID, not an individual document ID.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","1mGcTk8JQvTS_TssT4ZJYBnzlC8kLCRhc"],"title":"File Id","type":"string"},"role":{"description":"Permission role to grant. Accepted values: 'reader', 'commenter', 'writer', 'fileOrganizer', 'organizer', 'owner'. Invalid strings cause validation failures.","enum":["owner","organizer","fileOrganizer","writer","commenter","reader"],"examples":["reader","writer","commenter"],"title":"Role","type":"string"},"transfer_ownership":{"description":"Whether to transfer ownership to the specified user. Required when role is 'owner'. Only a single user can be specified in the request when transferring ownership. Ownership transfer is difficult to reverse — obtain explicit confirmation before setting true.","title":"Transfer Ownership","type":"boolean"},"type":{"description":"Type of grantee for the permission. Using 'anyone' with 'writer' or 'owner' broadly exposes the document — confirm before applying. Admin policies may block 'anyone' or domain-wide sharing. For type='anyone' with role='reader', the link must be explicitly shared; files are not publicly searchable.","enum":["user","group","domain","anyone"],"examples":["user","group","domain","anyone"],"title":"Type","type":"string"}},"required":["file_id","role","type"],"title":"AddFileSharingPreferenceRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to add a parent folder for a file using Google Drive API v2. Use when you need to add a file to an additional folder.","name":"GOOGLEDRIVE_ADD_PARENT","parameters":{"properties":{"enforceSingleParent":{"description":"Deprecated: Adding files to multiple folders is no longer supported. Use shortcuts instead.","title":"Enforce Single Parent","type":"boolean"},"fileId":{"description":"The ID of the file to add a parent folder to.","examples":["1FT9IW4UpvEc4Ezxv8xS2jEda17MztBXzK7CMqfz-s98"],"title":"File Id","type":"string"},"id":{"description":"The ID of the parent folder to add. This is the folder that will become a parent of the file.","examples":["1WKV9eNX4QggD5THTud3YMeN3Z7cP0CHf"],"title":"Id","type":"string"},"supportsAllDrives":{"description":"Whether the requesting application supports both My Drives and shared drives. Default is false.","title":"Supports All Drives","type":"boolean"},"supportsTeamDrives":{"description":"Deprecated: Use supportsAllDrives instead.","title":"Supports Team Drives","type":"boolean"}},"required":["fileId","id"],"title":"AddParentRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to add a property to a file, or update it if it already exists (v2 API). Use when you need to attach custom key-value metadata to a Google Drive file.","name":"GOOGLEDRIVE_ADD_PROPERTY","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"AltFormat","type":"string"},"callback":{"description":"JSONP callback function name.","title":"Callback","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response.","title":"Fields","type":"string"},"fileId":{"description":"The ID of the file.","examples":["1FT9IW4UpvEc4Ezxv8xS2jEda17MztBXzK7CMqfz-s98"],"title":"File Id","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"property_key":{"description":"The key of this property.","examples":["test_property"],"title":"Property Key","type":"string"},"property_value":{"description":"The value of this property.","examples":["test_value"],"title":"Property Value","type":"string"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"uploadType":{"description":"Legacy upload protocol for media (e.g. 'media', 'multipart').","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. 'raw', 'multipart').","title":"Upload Protocol","type":"string"},"visibility":{"description":"Property visibility values.","enum":["PRIVATE","PUBLIC"],"examples":["PRIVATE","PUBLIC"],"title":"PropertyVisibility","type":"string"},"xgafv":{"description":"V1 error format values.","enum":["1","2"],"title":"XgafvFormat","type":"string"}},"required":["fileId","property_key","property_value"],"title":"AddPropertyRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GOOGLEDRIVE_COPY_FILE_ADVANCED instead. Duplicates an existing file (not folders) in Google Drive by `file_id`; copy lands in same folder as original — use GOOGLEDRIVE_MOVE_FILE afterward for precise placement. Copy receives a new `file_id`; update stored references accordingly. For shared drives, requires organizer/manager rights.","name":"GOOGLEDRIVE_COPY_FILE","parameters":{"properties":{"file_id":{"description":"The unique identifier for the file on Google Drive that you want to copy. This ID can be retrieved from the file's shareable link or via other Google Drive API calls. Pass only the raw ID, not a full URL. Name-based searches may return multiple files — confirm the correct `file_id` before calling.","examples":["1A2b3C4d5E6fG7h8I9j0KlMNOPqRstUVW","0X1a2B3c4D5e6F7g8H9i0JkLmNoPqRsTu"],"title":"File Id","type":"string"},"new_title":{"description":"The title to assign to the new copy of the file. If not provided, the copied file will have the same title as the original, prefixed with 'Copy of '.","examples":["Copy of Quarterly Report","Duplicate of Project Plan"],"title":"New Title","type":"string"}},"required":["file_id"],"title":"CopyFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a copy of a file and applies any requested updates with patch semantics. Use when you need to duplicate a file with advanced options like label inclusion, visibility settings, or custom metadata.","name":"GOOGLEDRIVE_COPY_FILE_ADVANCED","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"ResponseFormat","type":"string"},"appProperties":{"additionalProperties":{"type":"string"},"description":"A collection of arbitrary key-value pairs which are private to the requesting app. Entries with null values are cleared in update and copy requests. These properties can only be retrieved using an authenticated request with an OAuth 2 client ID.","title":"App Properties","type":"object"},"callback":{"description":"JSONP callback parameter.","title":"Callback","type":"string"},"copyRequiresWriterPermission":{"description":"Whether the options to copy, print, or download this file should be disabled for readers and commenters.","title":"Copy Requires Writer Permission","type":"boolean"},"createdTime":{"description":"The time at which the file was created (RFC 3339 date-time).","title":"Created Time","type":"string"},"description":{"description":"A short description of the copied file.","title":"Description","type":"string"},"enforceSingleParent":{"description":"Deprecated. Copying files into multiple folders is no longer supported. Use shortcuts instead.","title":"Enforce Single Parent","type":"boolean"},"fields":{"description":"Selector specifying which fields to include in a partial response. Use comma-separated field paths.","title":"Fields","type":"string"},"fileId":{"description":"The ID of the file to copy. This is the unique identifier for the file on Google Drive.","examples":["1A2b3C4d5E6fG7h8I9j0KlMNOPqRstUVW"],"title":"File Id","type":"string"},"folderColorRgb":{"description":"The color for a folder or a shortcut to a folder as an RGB hex string. The supported colors are published in the folderColorPalette field of the About resource.","title":"Folder Color Rgb","type":"string"},"ignoreDefaultVisibility":{"description":"Whether to ignore the domain's default visibility settings for the created file. Domain administrators can choose to make all uploaded files visible to the domain by default; this parameter bypasses that behavior for the request. Permissions are still inherited from parent folders.","title":"Ignore Default Visibility","type":"boolean"},"includeLabels":{"description":"A comma-separated list of IDs of labels to include in the labelInfo part of the response.","title":"Include Labels","type":"string"},"includePermissionsForView":{"description":"Specifies which additional view's permissions to include in the response. Only 'published' is supported.","title":"Include Permissions For View","type":"string"},"keepRevisionForever":{"description":"Whether to set the 'keepForever' field in the new head revision. This is only applicable to files with binary content in Google Drive. Only 200 revisions for the file can be kept forever. If the limit is reached, try deleting pinned revisions.","title":"Keep Revision Forever","type":"boolean"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"mimeType":{"description":"The MIME type of the file. Google Drive attempts to automatically detect an appropriate value from uploaded content, if no value is provided.","title":"Mime Type","type":"string"},"modifiedTime":{"description":"The last time the file was modified by anyone (RFC 3339 date-time). Note that setting modifiedTime will also update modifiedByMeTime for the user.","title":"Modified Time","type":"string"},"name":{"description":"The name of the copied file. If not provided, the copied file will have the same name as the original, prefixed with 'Copy of '.","title":"Name","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"ocrLanguage":{"description":"A language hint for OCR processing during image import (ISO 639-1 code).","title":"Ocr Language","type":"string"},"parents":{"description":"The IDs of the parent folders which contain the file. If not specified as part of a copy request, the file inherits any discoverable parents of the source file.","items":{"type":"string"},"title":"Parents","type":"array"},"prettyPrint":{"description":"Returns response with indentations and line breaks for improved readability.","title":"Pretty Print","type":"boolean"},"properties":{"additionalProperties":{"type":"string"},"description":"A collection of arbitrary key-value pairs which are visible to all apps. Entries with null values are cleared in update and copy requests.","title":"Properties","type":"object"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"starred":{"description":"Whether the user has starred the file.","title":"Starred","type":"boolean"},"supportsAllDrives":{"default":true,"description":"Whether the requesting application supports both My Drives and shared drives.","title":"Supports All Drives","type":"boolean"},"supportsTeamDrives":{"description":"Deprecated: Use supportsAllDrives instead.","title":"Supports Team Drives","type":"boolean"},"trashed":{"description":"Whether the file has been trashed.","title":"Trashed","type":"boolean"},"uploadType":{"description":"Legacy upload protocol for media (e.g. 'media', 'multipart').","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. 'raw', 'multipart').","title":"Upload Protocol","type":"string"},"writersCanShare":{"description":"Whether users with only writer permission can modify the file's permissions. Not populated for items in shared drives.","title":"Writers Can Share","type":"boolean"},"xgafv":{"description":"V1 error format options.","enum":["1","2"],"title":"XgafvFormat","type":"string"}},"required":["fileId"],"title":"CopyFileAdvancedRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create a comment on a file in Google Drive. Returns a nested `data` object; extract `data.id` for the resulting comment identifier. Omit `anchor` and `quoted_file_content_*` for general file-level comments.","name":"GOOGLEDRIVE_CREATE_COMMENT","parameters":{"properties":{"anchor":{"description":"A JSON string defining the region of the document to which the comment is anchored. Format: {\"region\": {\"kind\": \"drive#commentRegion\", \"\": , \"rev\": \"head\"}}. Supported classifiers: (1) \"line\" for text lines (e.g., \"line\": 12), (2) \"page\" for page numbers (e.g., \"page\": {\"p\": 0}), (3) \"txt\" for text ranges (e.g., \"txt\": {\"o\": 100, \"l\": 50}), (4) \"rect\" for rectangles in images (e.g., \"rect\": {\"x\": 10, \"y\": 20, \"w\": 100, \"h\": 50}), (5) \"time\" for video timestamps (e.g., \"time\": {\"t\": \"00:01:30\"}), (6) \"matrix\" for spreadsheet cells (e.g., \"matrix\": {\"c\": 2, \"r\": 5}). Note: On blob files, only unanchored comments are supported. Google Workspace editors may treat API-set anchors as unanchored.","examples":["{\"region\": {\"kind\": \"drive#commentRegion\", \"line\": 12, \"rev\": \"head\"}}","{\"region\": {\"kind\": \"drive#commentRegion\", \"page\": {\"p\": 0}, \"rev\": \"head\"}}","{\"region\": {\"kind\": \"drive#commentRegion\", \"txt\": {\"o\": 100, \"l\": 50}, \"rev\": \"head\"}}"],"title":"Anchor","type":"string"},"content":{"description":"The plain text content of the comment.","examples":["This is a great document!"],"title":"Content","type":"string"},"file_id":{"description":"The ID of the file. The `id` field from GOOGLEDOCS_SEARCH_DOCUMENTS results can be used directly without conversion.","examples":["1a2b3c4d5e6f7g8h9i0j"],"title":"File Id","type":"string"},"quoted_file_content_mime_type":{"description":"The MIME type of the quoted content.","examples":["text/plain"],"title":"Quoted File Content Mime Type","type":"string"},"quoted_file_content_value":{"description":"The quoted content itself.","examples":["This is the text to quote."],"title":"Quoted File Content Value","type":"string"}},"required":["file_id","content"],"title":"CreateCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create a new shared drive. Use when you need to programmatically create a new shared drive for collaboration or storage.","name":"GOOGLEDRIVE_CREATE_DRIVE","parameters":{"properties":{"backgroundImageFile":{"additionalProperties":false,"description":"An image file and cropping parameters from which a background image for this shared drive is set. This is a write only field; it can only be set on drive.drives.update requests that don't set themeId. When specified, all fields of the backgroundImageFile must be set.","properties":{"id":{"description":"The ID of an image file in Google Drive to use for the background.","title":"Id","type":"string"},"width":{"description":"The width of the cropped image in the range: 0.0 <= width <= 1.0.","maximum":1,"minimum":0,"title":"Width","type":"number"},"xCoordinate":{"description":"The X coordinate of the cropped image in the range: 0.0 <= xCoordinate <= 1.0.","maximum":1,"minimum":0,"title":"X Coordinate","type":"number"},"yCoordinate":{"description":"The Y coordinate of the cropped image in the range: 0.0 <= yCoordinate <= 1.0.","maximum":1,"minimum":0,"title":"Y Coordinate","type":"number"}},"required":["id","width","xCoordinate","yCoordinate"],"title":"BackgroundImageFile","type":"object"},"colorRgb":{"description":"The color of this shared drive as an RGB hex string. It can only be set on a drive.drives.update request that does not set themeId.","examples":["#FF0000"],"title":"Color Rgb","type":"string"},"hidden":{"default":false,"description":"Whether the shared drive is hidden from default view.","title":"Hidden","type":"boolean"},"name":{"description":"The name of this shared drive.","examples":["My New Shared Drive"],"title":"Name","type":"string"},"requestId":{"description":"Optional. An ID for idempotent creation of a shared drive. If not provided, a UUID will be auto-generated. Each requestId can only be used ONCE to successfully create a drive. If retrying a request that succeeded previously with the same requestId, the existing drive will be returned.","examples":["your-unique-request-id-123"],"title":"Request Id","type":"string"},"themeId":{"description":"The ID of the theme from which the background image and color will be set. The set of possible driveThemes can be retrieved from a drive.about.get response. When not specified on a drive.drives.create request, a random theme is chosen from which the background image and color are set. This is a write-only field; it can only be set on requests that don't set colorRgb or backgroundImageFile.","examples":["default"],"title":"Theme Id","type":"string"}},"required":["name"],"title":"CreateDriveRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new file or folder with metadata. Native Google file types (Docs, Sheets, Forms, etc.) and folders are created as empty shells; content must be added manually in the Google UI afterward. Newly created files are private by default — set sharing permissions afterward for collaboration. For shared-drive folders, use this tool with the target folder ID in `parents` rather than GOOGLEDRIVE_CREATE_FOLDER.","name":"GOOGLEDRIVE_CREATE_FILE","parameters":{"properties":{"description":{"description":"A short description of the file.","title":"Description","type":"string"},"fields":{"description":"A comma-separated list of fields to include in the response.","title":"Fields","type":"string"},"mimeType":{"description":"Common MIME types for Google Drive file creation.","enum":["application/vnd.google-apps.folder","application/vnd.google-apps.document","application/vnd.google-apps.spreadsheet","application/vnd.google-apps.presentation","application/vnd.google-apps.drawing","application/vnd.google-apps.form","application/vnd.google-apps.script","application/vnd.google-apps.shortcut","application/vnd.google-apps.site","application/vnd.google-apps.map","application/vnd.google-apps.jam","application/pdf","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.oasis.opendocument.text","application/rtf","text/plain","text/html","text/markdown","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.oasis.opendocument.spreadsheet","text/csv","text/tab-separated-values","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.oasis.opendocument.presentation","image/jpeg","image/png","image/gif","image/bmp","image/webp","image/svg+xml","image/tiff","video/mp4","video/x-msvideo","video/quicktime","video/x-ms-wmv","video/webm","audio/mpeg","audio/wav","audio/ogg","application/zip","application/vnd.rar","application/x-tar","application/gzip","application/x-7z-compressed","application/json","application/xml","application/x-yaml","application/epub+zip","application/octet-stream"],"title":"MimeType","type":"string"},"name":{"description":"The name of the file. While optional, providing a meaningful name is strongly recommended. If not specified, Google Drive will create the file with name 'Untitled'.","title":"Name","type":"string"},"parents":{"description":"Google Drive folder ID (not folder name) where the file will be created. Must be a list with exactly one folder ID (e.g., ['1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs07X8ygaR']). Folder IDs are long alphanumeric strings, not human-readable names. Use GOOGLEDRIVE_FIND_FOLDER or GOOGLEDRIVE_LIST_FILES to look up folder IDs by name. If omitted, the file is created in My Drive root.","items":{"type":"string"},"title":"Parents","type":"array"},"starred":{"description":"Whether the user has starred the file.","title":"Starred","type":"boolean"}},"title":"CreateFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new file in Google Drive from provided text content (up to 10MB), supporting various formats including automatic conversion to Google Workspace types. Returns flat metadata fields (`id`, `mimeType`, `name`) at the top level — not nested under a `file` object. Created files are private by default; use a sharing tool afterward for collaborative access. Rapid successive calls may trigger `403 rateLimitExceeded` or `429 userRateLimitExceeded`; apply exponential backoff between retries. Does not support shared-drive targets in all cases.","name":"GOOGLEDRIVE_CREATE_FILE_FROM_TEXT","parameters":{"properties":{"file_name":{"description":"Required. Desired name for the new file on Google Drive. Also accepts 'title' or 'name' as aliases.","examples":["meeting_notes.txt","My New Document"],"title":"File Name","type":"string"},"mime_type":{"default":"text/plain","description":"MIME type for the new file, determining how Google Drive interprets its content. Must exactly match the content type — a mismatched value (e.g., `text/plain` for HTML) breaks Drive previews and downstream conversion.","examples":["text/plain","application/vnd.google-apps.document","application/vnd.google-apps.spreadsheet","application/vnd.google-apps.presentation"],"title":"Mime Type","type":"string"},"parent_id":{"description":"IMPORTANT: Must be a valid Google Drive folder ID that exists and you have access to. Do NOT pass folder names - only folder IDs work. If omitted, the file is created in the root of 'My Drive'. To get a folder ID from a folder name, use GOOGLEDRIVE_FIND_FOLDER first. Also accepts 'folder_id' or 'parent_folder_id' as aliases.","examples":["1KMXpS5g9N04W44_1T7_IDN18V8x00AKE","0AGr3s6kL3rIuUk9PVA"],"title":"Parent Id","type":"string"},"text_content":{"description":"Required. Plain text content to be written into the new file. Also accepts 'content', 'body', or 'text' as aliases. Only the documented aliases (`content`, `body`, `text`) are accepted; undocumented keys like `file_content` cause an 'Invalid request data' error. Must be UTF-8 encoded.","title":"Text Content","type":"string"}},"required":["file_name","text_content"],"title":"CreateFileFromTextRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new folder in Google Drive, optionally within an EXISTING parent folder specified by its ID or name. The parent folder MUST already exist - use GOOGLEDRIVE_FIND_FOLDER first to verify the parent exists or find its ID. Google Drive permits duplicate folder names, so always store and reuse the folder ID returned by this action rather than relying on names for future lookups.","name":"GOOGLEDRIVE_CREATE_FOLDER","parameters":{"properties":{"name":{"description":"Name for the new folder. This is a required field.","examples":["Project Files","Documents","Reports"],"title":"Name","type":"string"},"parent_id":{"description":"ID or exact name of an EXISTING parent folder. IMPORTANT: The parent folder MUST already exist - this action will NOT create parent folders automatically. If you need to create nested folders, first use GOOGLEDRIVE_FIND_FOLDER to verify the parent exists, or create it with a separate call. If a name is provided, the action searches for a folder with that exact name. If omitted, the folder is created in the Drive root. Must be non-trashed, accessible, and an actual folder (not a file) — shared drive root IDs are not valid. Use GOOGLEDRIVE_FIND_FOLDER to verify before calling.","examples":["1A2b3C4d5E6fG7h8I9j0KlMNOPqRstUVW","Existing Parent Folder Name"],"title":"Parent Id","type":"string"}},"required":["name"],"title":"CreateFolderRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create a permission for a file or shared drive. Use when you need to share a file or folder with users, groups, domains, or make it publicly accessible. **Warning:** Concurrent permissions operations on the same file are not supported; only the last update is applied.","name":"GOOGLEDRIVE_CREATE_PERMISSION","parameters":{"properties":{"allow_file_discovery":{"description":"Whether the permission allows the file to be discovered through search. This is only applicable for permissions of type 'domain' or 'anyone'.","title":"Allow File Discovery","type":"boolean"},"domain":{"description":"The domain to which this permission refers. Required when type is 'domain'.","examples":["example.com"],"title":"Domain","type":"string"},"email_address":{"description":"The email address of the user or group to which this permission refers. Required when type is 'user' or 'group'.","examples":["user@example.com"],"title":"Email Address","type":"string"},"email_message":{"description":"A plain text custom message to include in the notification email.","examples":["Check out this document!"],"title":"Email Message","type":"string"},"expiration_time":{"description":"The time at which this permission will expire (RFC 3339 date-time). Expiration times can only be set on user and group permissions, must be in the future, and cannot be more than a year in the future.","examples":["2024-12-31T23:59:59Z"],"title":"Expiration Time","type":"string"},"file_id":{"description":"The ID of the file or shared drive.","examples":["1Cw6BhxeaUWjjuXJNFniIE0aPxS6y3BZgwQtdmr43tAY"],"title":"File Id","type":"string"},"move_to_new_owners_root":{"description":"This parameter will only take effect if the item is not in a shared drive and the request is attempting to transfer the ownership of the item. If set to true, the item will be moved to the new owner's My Drive root folder and all prior parents removed. If set to false, parents are not changed.","title":"Move To New Owners Root","type":"boolean"},"role":{"description":"The role granted by this permission. Valid values are: owner, organizer, fileOrganizer, writer, commenter, reader.","enum":["owner","organizer","fileOrganizer","writer","commenter","reader"],"examples":["reader","writer"],"title":"Role","type":"string"},"send_notification_email":{"description":"Whether to send a notification email when sharing to users or groups. This defaults to true for users and groups, and is not allowed for other requests. It must not be disabled for ownership transfers.","title":"Send Notification Email","type":"boolean"},"supports_all_drives":{"description":"Whether the requesting application supports both My Drives and shared drives.","title":"Supports All Drives","type":"boolean"},"transfer_ownership":{"description":"Whether to transfer ownership to the specified user and downgrade the current owner to a writer. This parameter is required as an acknowledgement of the side effect.","title":"Transfer Ownership","type":"boolean"},"type":{"description":"The type of the grantee. When creating a permission, if type is 'user' or 'group', you must provide an emailAddress. When type is 'domain', you must provide a domain. There isn't extra information required for 'anyone' type.","enum":["user","group","domain","anyone"],"examples":["user","anyone"],"title":"Type","type":"string"},"use_domain_admin_access":{"description":"Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.","title":"Use Domain Admin Access","type":"boolean"}},"required":["file_id","type","role"],"title":"CreatePermissionRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create a reply to a comment in Google Drive. Use when you need to respond to an existing comment on a file.","name":"GOOGLEDRIVE_CREATE_REPLY","parameters":{"properties":{"action":{"description":"The action the reply performed to the parent comment.","enum":["resolve","reopen"],"examples":["resolve"],"title":"Action","type":"string"},"comment_id":{"description":"The ID of the comment.","examples":["0987654321zyxwutsrqponmlkjihgfedcba"],"title":"Comment Id","type":"string"},"content":{"description":"The plain text content of the reply. HTML content is not supported.","examples":["Thanks for the feedback!"],"title":"Content","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response.","examples":["id,content"],"title":"Fields","type":"string"},"file_id":{"description":"The ID of the file.","examples":["1234567890abcdefghijklmnopqrstuvwxyz"],"title":"File Id","type":"string"}},"required":["file_id","comment_id","content"],"title":"CreateReplyRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create a shortcut to a file or folder in Google Drive. Use when you need to link to an existing Drive item from another location without duplicating it. The shortcut receives its own distinct file ID (capture from response). No parent folder parameter exists; use GOOGLEDRIVE_MOVE_FILE after creation to place the shortcut in the desired location.","name":"GOOGLEDRIVE_CREATE_SHORTCUT_TO_FILE","parameters":{"properties":{"ignoreDefaultVisibility":{"description":"Whether to ignore the domain's default visibility settings for the created file.","examples":[false],"title":"Ignore Default Visibility","type":"boolean"},"includeLabels":{"description":"A comma-separated list of IDs of labels to include in the labelInfo part of the response.","examples":["labelId1,labelId2"],"title":"Include Labels","type":"string"},"includePermissionsForView":{"description":"Enum for includePermissionsForView parameter.","enum":["published"],"examples":["published"],"title":"PermissionsViewEnum","type":"string"},"keepRevisionForever":{"description":"Whether to set the 'keepForever' field in the new head revision.","examples":[false],"title":"Keep Revision Forever","type":"boolean"},"name":{"description":"The name of the shortcut.","examples":["My Shortcut to Important Document"],"title":"Name","type":"string"},"supportsAllDrives":{"description":"Whether the requesting application supports both My Drives and shared drives. Recommended to set to true if interacting with shared drives.","examples":[true],"title":"Supports All Drives","type":"boolean"},"target_id":{"description":"The ID of the file or folder that this shortcut points to.","examples":["1_DRbC10_AYSg3tNA2c2P9H2a26n9_2VA"],"title":"Target Id","type":"string"}},"required":["name","target_id"],"title":"CreateShortcutToFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create a Team Drive. Deprecated: Use drives.create instead. Use when you need to create a Team Drive for collaboration.","name":"GOOGLEDRIVE_CREATE_TEAM_DRIVE","parameters":{"properties":{"backgroundImageFile":{"additionalProperties":false,"description":"An image file and cropping parameters from which a background image for this Team Drive is set. This is a write only field; it can only be set on drive.teamdrives.update requests that don't set themeId. When specified, all fields of the backgroundImageFile must be set.","properties":{"id":{"description":"The ID of an image file in Google Drive to use for the background.","title":"Id","type":"string"},"width":{"description":"The width of the cropped image in the range: 0.0 <= width <= 1.0.","maximum":1,"minimum":0,"title":"Width","type":"number"},"xCoordinate":{"description":"The X coordinate of the cropped image in the range: 0.0 <= xCoordinate <= 1.0.","maximum":1,"minimum":0,"title":"X Coordinate","type":"number"},"yCoordinate":{"description":"The Y coordinate of the cropped image in the range: 0.0 <= yCoordinate <= 1.0.","maximum":1,"minimum":0,"title":"Y Coordinate","type":"number"}},"required":["id","width","xCoordinate","yCoordinate"],"title":"BackgroundImageFile","type":"object"},"colorRgb":{"description":"The color of this Team Drive as an RGB hex string. It can only be set on a drive.teamdrives.update request that does not set themeId.","examples":["#FF0000"],"title":"Color Rgb","type":"string"},"name":{"description":"The name of this Team Drive. This is a required field.","examples":["My New Team Drive"],"title":"Name","type":"string"},"requestId":{"description":"Optional. An ID for idempotent creation of a Team Drive. If not provided, a UUID will be auto-generated. Each requestId can only be used ONCE to successfully create a Team Drive. If retrying a request that succeeded previously with the same requestId, the existing Team Drive will be returned or a 409 error will occur.","examples":["your-unique-request-id-123"],"title":"Request Id","type":"string"},"themeId":{"description":"The ID of the theme from which the background image and color will be set. The set of possible teamDriveThemes can be retrieved from a drive.about.get response. When not specified on a drive.teamdrives.create request, a random theme is chosen from which the background image and color are set. This is a write-only field; it can only be set on requests that don't set colorRgb or backgroundImageFile.","examples":["default"],"title":"Theme Id","type":"string"}},"required":["name"],"title":"CreateTeamDriveRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to remove a child from a folder using Google Drive API v2. Use when you need to remove a file from a specific folder.","name":"GOOGLEDRIVE_DELETE_CHILD","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"AltEnum","type":"string"},"callback":{"description":"JSONP","title":"Callback","type":"string"},"childId":{"description":"The ID of the child.","examples":["1FT9IW4UpvEc4Ezxv8xS2jEda17MztBXzK7CMqfz-s98"],"title":"Child Id","type":"string"},"enforceSingleParent":{"description":"Deprecated: If an item is not in a shared drive and its last parent is removed, the item is placed under its owner's root.","title":"Enforce Single Parent","type":"boolean"},"fields":{"description":"Selector specifying which fields to include in a partial response.","title":"Fields","type":"string"},"folderId":{"description":"The ID of the folder.","examples":["1WKV9eNX4QggD5THTud3YMeN3Z7cP0CHf"],"title":"Folder Id","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"uploadType":{"description":"Legacy upload protocol for media (e.g. \"media\", \"multipart\").","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. \"raw\", \"multipart\").","title":"Upload Protocol","type":"string"},"xgafv":{"description":"V1 error format enum.","enum":["1","2"],"title":"XgafvEnum","type":"string"}},"required":["folderId","childId"],"title":"DeleteChildRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes a comment thread (and all its replies) from a Google Drive file — this action is irreversible. To remove only a single reply within a thread, use GOOGLEDRIVE_DELETE_REPLY instead. Verify the exact comment content and comment_id before calling.","name":"GOOGLEDRIVE_DELETE_COMMENT","parameters":{"properties":{"comment_id":{"description":"The ID of the comment. Comment IDs are different from file IDs and have a distinct format (e.g., 'AAAByC37kko'). You must obtain the comment ID from the LIST_COMMENTS or CREATE_COMMENT actions. Do NOT use the file ID here.","examples":["AAAByC37kko"],"title":"Comment Id","type":"string"},"file_id":{"description":"The ID of the file.","examples":["1a2b3c4d5e6f7g8h9i0j"],"title":"File Id","type":"string"}},"required":["file_id","comment_id"],"title":"DeleteCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to permanently delete a shared drive. Use when you need to remove a shared drive and its contents (if specified).","name":"GOOGLEDRIVE_DELETE_DRIVE","parameters":{"properties":{"allowItemDeletion":{"description":"Whether any items inside the shared drive should also be deleted. This option is only supported when `useDomainAdminAccess` is also set to `true`.","examples":[true],"title":"Allow Item Deletion","type":"boolean"},"driveId":{"description":"The ID of the shared drive.","examples":["0AEMyflX29xHjUk9PVA"],"title":"Drive Id","type":"string"},"useDomainAdminAccess":{"description":"Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the shared drive belongs.","examples":[true],"title":"Use Domain Admin Access","type":"boolean"}},"required":["driveId"],"title":"DeleteDriveRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GOOGLEDRIVE_GOOGLE_DRIVE_DELETE_FOLDER_OR_FILE_ACTION instead. Tool to permanently delete a file owned by the user without moving it to trash. Use when permanent deletion is required. If the file belongs to a shared drive, the user must be an organizer on the parent folder.","name":"GOOGLEDRIVE_DELETE_FILE","parameters":{"properties":{"enforceSingleParent":{"description":"Deprecated parameter. If an item is not in a shared drive and its last parent is deleted but the item itself is not, the item is placed under its owner's root.","title":"Enforce Single Parent","type":"boolean"},"fileId":{"description":"The ID of the file to delete. This permanently removes the file without moving it to trash.","examples":["1xiFp6uO3jRczGuFJ_LdaRVg3ene6lNq-"],"title":"File Id","type":"string"},"supportsAllDrives":{"description":"Whether the requesting application supports both My Drives and shared drives. Set to true if the file might be in a shared drive.","title":"Supports All Drives","type":"boolean"}},"required":["fileId"],"title":"DeleteFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to remove a parent from a file using Google Drive API v2. Use when you need to remove a file from a specific folder.","name":"GOOGLEDRIVE_DELETE_PARENT","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"AltEnum","type":"string"},"callback":{"description":"JSONP","title":"Callback","type":"string"},"enforceSingleParent":{"description":"Deprecated: If an item is not in a shared drive and its last parent is removed, the item is placed under its owner's root.","title":"Enforce Single Parent","type":"boolean"},"fields":{"description":"Selector specifying which fields to include in a partial response.","title":"Fields","type":"string"},"fileId":{"description":"The ID of the file.","examples":["1xygSVDktMDb4chxS3AQTMzABKWYdWtOB"],"title":"File Id","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"parentId":{"description":"The ID of the parent.","examples":["1IL1JRSfkm9B_L-guI7g-birKApFyD_Di"],"title":"Parent Id","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"uploadType":{"description":"Legacy upload protocol for media (e.g. \"media\", \"multipart\").","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. \"raw\", \"multipart\").","title":"Upload Protocol","type":"string"},"xgafv":{"description":"V1 error format enum.","enum":["1","2"],"title":"XgafvEnum","type":"string"}},"required":["fileId","parentId"],"title":"DeleteParentRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a permission from a file by permission ID. Deletion is irreversible — confirm the target user, group, or permission type before executing. IMPORTANT: You must first call GOOGLEDRIVE_LIST_PERMISSIONS to get valid permission IDs. To fully revoke public access, the type='anyone' (link-sharing) permission must be explicitly deleted; revoking other permissions leaves the file publicly accessible via link. Use when you need to revoke access for a specific user or group from a file.","name":"GOOGLEDRIVE_DELETE_PERMISSION","parameters":{"properties":{"file_id":{"description":"The ID of the file or shared drive.","examples":["1a2b3c4d5e6f7g8h9i0j"],"title":"File Id","type":"string"},"permission_id":{"description":"The unique ID of the permission to delete. IMPORTANT: You MUST first call GOOGLEDRIVE_LIST_PERMISSIONS with the file_id to retrieve valid permission IDs. Permission IDs are opaque identifiers assigned by Google (e.g., '18394857362947583', 'anyoneWithLink') and cannot be guessed. Do NOT use placeholder values like 'any' or '1234'.","examples":["18394857362947583","anyoneWithLink","07868014580490476582"],"title":"Permission Id","type":"string"},"supportsAllDrives":{"description":"Whether the requesting application supports both My Drives and shared drives.","title":"Supports All Drives","type":"boolean"},"useDomainAdminAccess":{"description":"Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.","title":"Use Domain Admin Access","type":"boolean"}},"required":["file_id","permission_id"],"title":"DeletePermissionRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to delete a property from a file using Google Drive API v2. Use when you need to remove custom key-value metadata from a file.","name":"GOOGLEDRIVE_DELETE_PROPERTY","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"AltFormat","type":"string"},"callback":{"description":"JSONP callback function name.","title":"Callback","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response.","title":"Fields","type":"string"},"fileId":{"description":"The ID of the file.","examples":["1FT9IW4UpvEc4Ezxv8xS2jEda17MztBXzK7CMqfz-s98"],"title":"File Id","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"propertyKey":{"description":"The key of the property to delete.","examples":["test_delete_property"],"title":"Property Key","type":"string"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"uploadType":{"description":"Legacy upload protocol for media (e.g. 'media', 'multipart').","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. 'raw', 'multipart').","title":"Upload Protocol","type":"string"},"visibility":{"description":"The visibility of the property. If specified, only deletes the property if it has this visibility level.","title":"Visibility","type":"string"},"xgafv":{"description":"V1 error format values.","enum":["1","2"],"title":"XgafvFormat","type":"string"}},"required":["fileId","propertyKey"],"title":"DeletePropertyRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to delete a specific reply by reply ID. Deletion is irreversible; obtain explicit user confirmation before calling. Removes only the targeted reply, not the full comment thread — use GOOGLEDRIVE_DELETE_COMMENT to remove the entire thread.","name":"GOOGLEDRIVE_DELETE_REPLY","parameters":{"properties":{"comment_id":{"description":"The ID of the comment.","examples":["AAAA_example_comment_id"],"title":"Comment Id","type":"string"},"file_id":{"description":"The ID of the file.","examples":["1ZdR3L3Kek7szY1j11SQZ9A_00up1j2xG"],"title":"File Id","type":"string"},"reply_id":{"description":"The ID of the reply. Confirm correct target using createdTime and author alongside reply_id, as multiple similar replies may exist on the same comment.","examples":["AAAA_example_reply_id"],"title":"Reply Id","type":"string"}},"required":["file_id","comment_id","reply_id"],"title":"DeleteReplyRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to permanently delete a file revision. Use when you need to remove a specific version of a binary file (images, videos, etc.). Cannot delete revisions for Google Docs/Sheets or the last remaining revision.","name":"GOOGLEDRIVE_DELETE_REVISION","parameters":{"properties":{"file_id":{"description":"The ID of the file.","examples":["19GP5DRpUcmQHBVnk39RTB57twIWVEMjO"],"title":"File Id","type":"string"},"revision_id":{"description":"The ID of the revision to delete. You can obtain revision IDs by calling GOOGLEDRIVE_LIST_REVISIONS. Important: You can only delete revisions for files with binary content (images, videos, etc.), not Google Docs or Sheets. You cannot delete the last remaining revision of a file.","examples":["0B_vaZgd8EyufZ0xKU1BBemkvQnNBL0hESWdiY3VTWWQxNWRFPQ"],"title":"Revision Id","type":"string"}},"required":["file_id","revision_id"],"title":"DeleteRevisionRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to permanently delete a Team Drive. Deprecated: Use drives.delete instead. Use when you need to remove a Team Drive using the legacy endpoint.","name":"GOOGLEDRIVE_DELETE_TEAM_DRIVE","parameters":{"properties":{"teamDriveId":{"description":"The ID of the Team Drive to delete.","examples":["0AIHqBGLiYNb7Uk9PVA"],"title":"Team Drive Id","type":"string"}},"required":["teamDriveId"],"title":"DeleteTeamDriveRequest","type":"object"}},"type":"function"},{"function":{"description":"Downloads a file from Google Drive by its ID. For Google Workspace documents (Docs, Sheets, Slides), optionally exports to a specified `mime_type`. For other file types, downloads in their native format regardless of mime_type. Examples: Export a Google Doc to plain text: {\"file_id\": \"1N2o5xQWmAbCdEfGhIJKlmnOPq\", \"mime_type\": \"text/plain\"} Download a Google Sheet as CSV: {\"file_id\": \"1ZyXwVuTsRqPoNmLkJiHgFeDcB\", \"mime_type\": \"text/csv\"}","name":"GOOGLEDRIVE_DOWNLOAD_FILE","parameters":{"properties":{"fileId":{"description":"The unique identifier of the file to be downloaded from Google Drive. Must be a valid Google Drive file ID containing only alphanumeric characters, hyphens, and underscores. File paths with slashes (/) are not valid. This ID can typically be found in the file's URL in Google Drive or obtained from API calls that list files.","examples":["1aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789"],"title":"File Id","type":"string"},"mime_type":{"description":"ONLY for Google Workspace documents (Docs, Sheets, Slides, Drawings). Specifies the export format. IMPORTANT: This parameter has NO effect on regular files (PDFs, images, videos, Office documents, etc.) - they are always downloaded in their native format. Google Forms and Maps cannot be downloaded as they do not support exports through the Drive API. If omitted for Google Workspace files, defaults to PDF. \n\nWARNING: Different Google Workspace file types support DIFFERENT export formats. Using an unsupported format will result in an error. \n\nGoogle Docs ONLY: application/pdf, text/plain, application/rtf, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/vnd.oasis.opendocument.text, application/zip, application/epub+zip, text/markdown. \n\nGoogle Sheets ONLY: application/pdf, text/csv, text/tab-separated-values, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.oasis.opendocument.spreadsheet, application/zip. \n\nGoogle Slides ONLY: application/pdf, text/plain, application/vnd.openxmlformats-officedocument.presentationml.presentation, application/vnd.oasis.opendocument.presentation, image/jpeg, image/png, image/svg+xml. \n\nUniversally safe: application/pdf works for all Google Workspace file types.","enum":["application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.oasis.opendocument.text","application/rtf","application/pdf","text/plain","application/zip","application/epub+zip","text/html","text/markdown","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.oasis.opendocument.spreadsheet","text/csv","text/tab-separated-values","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.oasis.opendocument.presentation","image/jpeg","image/png","image/svg+xml","application/vnd.google-apps.script+json","application/vnd.google-apps.vid"],"examples":["application/pdf","application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/csv"],"title":"MimeType","type":"string"}},"required":["fileId"],"title":"DownloadFileRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GOOGLEDRIVE_DOWNLOAD_FILE_OPERATION instead. Tool to download file content as a long-running operation. Use when you need to download files from Google Drive. Operations are valid for 24 hours from the time of creation.","name":"GOOGLEDRIVE_DOWNLOAD_FILE2","parameters":{"properties":{"file_id":{"description":"The ID of the file to download","examples":["1iau-j_ezb2Vcx1tZDMDdfpqlzxVzlscg"],"title":"File Id","type":"string"}},"required":["file_id"],"title":"DownloadFile2Request","type":"object"}},"type":"function"},{"function":{"description":"Tool to download file content using long-running operations. Use when you need to download Google Vids files or export Google Workspace documents as part of a long-running operation. Operations are valid for 24 hours from creation. Returns a response containing `downloaded_file_content.s3url` — a short-lived S3 URL; fetch the actual file bytes from that URL promptly after the call.","name":"GOOGLEDRIVE_DOWNLOAD_FILE_OPERATION","parameters":{"properties":{"file_id":{"description":"The ID of the file to download. This is a required parameter. The file_id can be found in the file's Google Drive URL or obtained from API calls that list files.","examples":["1xAHUNyfubIa8K07EVv9_5Hc5EsgdIhUx-QNcrGJ_yQk"],"title":"File Id","type":"string"},"mime_type":{"description":"The MIME type for exporting Google Workspace documents (Google Docs, Sheets, Slides, etc.) to different formats. Only applicable to Google Workspace documents (not blob files like PDFs, images, videos). If provided for a non-Google Workspace file, this parameter will be ignored to prevent API errors. Common export formats: 'application/pdf', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' (Word), 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' (Excel).","examples":["application/pdf","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],"title":"Mime Type","type":"string"},"revision_id":{"description":"The ID of the revision to download. If not specified, the current head revision will be downloaded. This field can only be set when downloading blob files, Google Docs, and Google Sheets.","examples":["1","12345"],"title":"Revision Id","type":"string"}},"required":["file_id"],"title":"DownloadFileOperationRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates an existing Google Drive file with binary content by overwriting its entire content with new text (max 10MB). IMPORTANT: This action only works with files that have binary content (text files, PDFs, images, etc.). It does NOT support editing Google Workspace native files (Google Docs, Sheets, Slides, etc.). For Google Workspace files, use the Google Docs API, Google Sheets API, or Google Slides API directly. Preserves the original file_id (unlike GOOGLEDRIVE_UPLOAD_FILE which creates a new ID).","name":"GOOGLEDRIVE_EDIT_FILE","parameters":{"properties":{"content":{"description":"New textual content to overwrite the existing file; will be UTF-8 encoded for upload. Overwrites the entire file body — partial edits are not possible, so reconstruct the full desired content before calling. Back up with GOOGLEDRIVE_COPY_FILE before irreversible edits.","title":"Content","type":"string"},"file_id":{"description":"ID of the Google Drive file to update. Only works with files that have binary content (e.g., .txt, .json, .pdf, .jpg files uploaded to Drive). Does NOT support Google Workspace native files (Docs, Sheets, Slides) even if they appear as spreadsheets or documents - those must be edited via Google Docs/Sheets/Slides APIs. Use GOOGLEDRIVE_FIND_FILE to retrieve an existing file's ID; using an upload action instead would create a duplicate with a different ID.","title":"File Id","type":"string"},"mime_type":{"default":"text/plain","description":"MIME type of the content being uploaded. Must match the actual format of the content being uploaded (not the existing file type). Cannot be a Google Workspace MIME type (application/vnd.google-apps.*). Valid examples: text/plain, text/html, application/json, application/pdf, image/jpeg.","examples":["text/plain","text/html","application/json","application/xml","application/javascript"],"title":"Mime Type","type":"string"}},"required":["file_id","content"],"title":"EditFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to permanently and irreversibly delete ALL trashed files in the user's Google Drive or a specified shared drive. Recovery is impossible after execution — no Drive tool can restore items once trash is emptied. Affects every item in trash across the entire account or shared drive, not just files from the current workflow. Always obtain explicit user confirmation and clarify that recovery is impossible before executing. Provide driveId to target a specific shared drive's trash; omit to empty the user's root trash.","name":"GOOGLEDRIVE_EMPTY_TRASH","parameters":{"properties":{"driveId":{"description":"If set, empties the trash of the provided shared drive. This parameter is ignored if the item is not in a shared drive.","examples":["0ABmN4q4aF7dPUk9PVA"],"title":"Drive Id","type":"string"},"enforceSingleParent":{"description":"Deprecated: If an item is not in a shared drive and its last parent is deleted but the item itself is not, the item will be placed under its owner's root. This parameter is ignored if the item is not in a shared drive.","title":"Enforce Single Parent","type":"boolean"}},"title":"EmptyTrashRequest","type":"object"}},"type":"function"},{"function":{"description":"Exports a Google Workspace document to the requested MIME type and returns exported file content. Use when you need to export Google Docs, Sheets, Slides, Drawings, or Apps Script files to a specific format. Note: The exported content is limited to 10MB by Google Drive API.","name":"GOOGLEDRIVE_EXPORT_GOOGLE_WORKSPACE_FILE","parameters":{"properties":{"fileId":{"description":"The ID of the Google Workspace file to export. Must be a valid file ID for a Google Docs, Sheets, Slides, Drawings, or Apps Script file.","examples":["1FT9IW4UpvEc4Ezxv8xS2jEda17MztBXzK7CMqfz-s98"],"title":"File Id","type":"string"},"mimeType":{"description":"The MIME type of the format requested for this export. Supported formats depend on the source file type: Google Docs -> DOCX, ODT, RTF, PDF, TXT, HTML (ZIP), EPUB, Markdown; Google Sheets -> XLSX, ODS, PDF, CSV, TSV, HTML (ZIP); Google Slides -> PPTX, ODP, PDF, TXT, JPG, PNG, SVG; Google Drawings -> PDF, JPG, PNG, SVG; Apps Script -> JSON.","enum":["application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.oasis.opendocument.text","application/rtf","application/pdf","text/plain","application/zip","application/epub+zip","text/markdown","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.oasis.opendocument.spreadsheet","text/csv","text/tab-separated-values","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.oasis.opendocument.presentation","image/jpeg","image/png","image/svg+xml","application/vnd.google-apps.script+json"],"examples":["application/pdf","text/csv","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],"title":"Mime Type","type":"string"}},"required":["fileId","mimeType"],"title":"ExportGoogleWorkspaceFileRequest","type":"object"}},"type":"function"},{"function":{"description":"The comprehensive Google Drive search tool that handles all file and folder discovery needs. Use this for any file finding task - from simple name searches to complex queries with date filters, MIME types, permissions, custom properties, folder scoping, and more. Searches across My Drive and shared drives with full metadata support. Examples: - Find PDFs: q=\"mimeType = 'application/pdf'\" - Find recent files: q=\"modifiedTime > '2024-01-01T00:00:00'\" - Search by name: q=\"name contains 'report'\" - Files in folder: folderId=\"abc123\" or q=\"'FOLDER_ID' in parents\"","name":"GOOGLEDRIVE_FIND_FILE","parameters":{"properties":{"bare_text_query_transformed":{"default":false,"description":"Indicates whether a bare text query was transformed into a search filter.","title":"Bare Text Query Transformed","type":"boolean"},"corpora":{"default":"allDrives","description":"Specifies which collections of files to search. Defaults to 'allDrives' (searches My Drive + all accessible shared drives).\n\n **Values:**\n - `user` - Search only user's personal My Drive\n - `domain` - Search all files shared within Google Workspace domain\n - `drive` - Search specific shared drive (requires 'driveId' parameter and 'includeItemsFromAllDrives' must be true)\n - `allDrives` - Search My Drive + all accessible shared drives (DEFAULT, requires 'includeItemsFromAllDrives' to be true)\n\n **When to Use:**\n - Personal files only: Use 'user'\n - Organization-wide: Use 'domain'\n - Specific shared drive: Use 'drive' with 'driveId'\n - Maximum coverage: Use 'allDrives' (auto-enables supportsAllDrives and includeItemsFromAllDrives)\n ","enum":["user","drive","domain","allDrives"],"examples":["user","domain","drive","allDrives"],"title":"Corpora","type":"string"},"driveId":{"description":"ID of the shared drive to search. When provided, 'corpora' will automatically be set to 'drive' (mutually exclusive with corpora='allDrives'). Required if 'corpora' is 'drive'.","title":"Drive Id","type":"string"},"editors_field_removed":{"default":false,"description":"Indicates whether the editors field was removed from the request.","title":"Editors Field Removed","type":"boolean"},"email_query_transformed":{"default":false,"description":"Indicates whether an email query was transformed into a search filter.","title":"Email Query Transformed","type":"boolean"},"emailaddress_field_removed":{"default":false,"description":"Indicates whether the email address field was removed from the request.","title":"Emailaddress Field Removed","type":"boolean"},"fields":{"description":"Selector specifying which fields to include in a partial response. Use '*' for all fields.\n\n**Default Behavior (Recommended for Discovery):**\nWhen omitted, returns essential file discovery fields: id, name, mimeType, size, modifiedTime, createdTime, parents, webViewLink, trashed, starred. This lightweight default is optimized for file search/discovery use cases without verbose permission or capability metadata.\n\n**Format:** For file fields, use 'files(field1,field2,...)' format. For example: 'files(id,name,mimeType)'.\nTop-level response fields (kind, nextPageToken, incompleteSearch) can be used directly.\n\n**Note:** Bare field names like 'id,name,mimeType' will be automatically wrapped in 'files()' for convenience.\nThe 'editors' field is not valid in Drive API v3; use 'permissions' instead for access control information.","examples":["*","files(id,name,mimeType)","id,name,mimeType","nextPageToken,files(id,name,mimeType)","files(id,name,modifiedTime,size,webViewLink)","nextPageToken,files(id,name,parents,permissions)"],"title":"Fields","type":"string"},"folder_id":{"description":"ID of a specific folder to search within. This automatically adds \"'folder_id' in parents\" to the query. Can be combined with the 'q' parameter to further filter results within the folder. Use 'root' to search within the user's root folder (My Drive). Note: 'My Drive' is not a searchable folder name - use 'root' alias instead.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","root"],"title":"Folder Id","type":"string"},"includeItemsFromAllDrives":{"default":true,"description":"Whether both My Drive and shared drive items should be included in results. Must be true when corpora is 'drive' or 'allDrives'. If true, 'supportsAllDrives' should also be true.","title":"Include Items From All Drives","type":"boolean"},"include_labels":{"description":"A comma-separated list of label IDs to include in the `labelInfo` part of the response for each file. Empty strings are automatically treated as omitted.","examples":["label_abc123","label_xyz789,label_def456","priority_label,status_label,department_label"],"title":"Include Labels","type":"string"},"include_permissions_for_view":{"description":"Specifies which additional view's permissions to include in the response. Must be either omitted entirely or set to 'published'. Empty strings are automatically treated as omitted.","examples":["published"],"title":"Include Permissions For View","type":"string"},"orderBy":{"description":"Comma-separated sort keys. Ascending by default; add 'desc' for descending. Cannot be used when query (q) contains fullText search terms.\n\n **Valid Keys:**\n - `createdTime`, `modifiedTime`, `modifiedByMeTime` - Dates\n - `viewedByMeTime`, `sharedWithMeTime` - Activity dates\n - `name`, `name_natural` - File name (natural: file1, file2, file10)\n - `folder` - Folder hierarchy\n - `quotaBytesUsed` - Storage size (NOTE: 'size' is NOT valid, use 'quotaBytesUsed')\n - `starred` - Starred status\n - `recency` - Recent activity (combines view time and modification time for relevance-based sorting)\n\n **Important:** 'size' is NOT a valid sort key. Use 'quotaBytesUsed' to sort by file size.\n\n **Restriction:** Sorting is not supported when the query contains fullText searches (e.g., \"fullText contains 'keyword'\"). Omit orderBy when using fullText queries.\n ","examples":["modifiedTime desc","createdTime","name","name_natural","viewedByMeTime desc","quotaBytesUsed desc","folder,modifiedTime desc,name","starred desc,name","recency desc"],"title":"Order By","type":"string"},"orderby_size_transformed":{"default":false,"description":"Indicates whether the orderBy size value was transformed.","title":"Orderby Size Transformed","type":"boolean"},"original_bare_text_query":{"description":"The original bare text query before transformation.","title":"Original Bare Text Query","type":"string"},"original_email_query":{"description":"The original email query before transformation.","title":"Original Email Query","type":"string"},"original_invalid_pagetoken":{"description":"The original invalid page token that was dropped.","title":"Original Invalid Pagetoken","type":"string"},"pageSize":{"default":100,"description":"The maximum number of files to return per page.","examples":[10,50,100,500,1000],"maximum":1000,"minimum":1,"title":"Page Size","type":"integer"},"pageToken":{"description":"The token for continuing a previous list request on the next page. IMPORTANT: This must be the exact opaque string from a previous response's 'nextPageToken' field - do not modify, truncate, URL-encode, or construct tokens manually. Invalid or corrupted tokens will result in API errors.","title":"Page Token","type":"string"},"pagetoken_dropped":{"default":false,"description":"Indicates whether the page token was dropped from the request.","title":"Pagetoken Dropped","type":"boolean"},"q":{"description":"Query string to filter file results. Accepts both simple text searches and full Google Drive query syntax.\n\n **Simple Text Search (Automatic):**\n - Provide bare text (e.g., \"SAM RFP\", \"quarterly report\") and it will automatically search for the exact phrase across file names and content\n - Transformed to: \"fullText contains '\"your text\"'\" behind the scenes for exact phrase matching\n - Works like Google Drive's UI search box, matching the complete phrase you enter\n - **Email Address Auto-Detection:** If you provide a bare email address (e.g., \"user@example.com\"), it will be automatically transformed to \"'user@example.com' in owners\" to search for files owned by that user. This prevents API errors since email addresses cannot be used with fullText searches.\n\n **Full Query Syntax:** 'field operator value' combined with 'and', 'or', 'not'\n\n **Operators:** =, !=, <, >, <=, >=, contains, in\n\n **Common Fields:**\n - `name` - File name (exact match with = or partial match with contains)\n - `fullText` - File content search\n - `mimeType` - File type (e.g., 'application/pdf', 'application/vnd.google-apps.folder')\n - `modifiedTime`, `createdTime` - Dates (RFC 3339: '2024-01-01T00:00:00')\n - `parents` - Folder IDs containing the file\n - `owners`, `writers` - User email addresses (MUST use 'in' operator, NOT colon syntax)\n - `properties`, `appProperties` - Custom metadata\n\n **Boolean Filter Fields (sharedWithMe, trashed, starred):**\n These fields require explicit `= true` or `= false` syntax:\n - `sharedWithMe = true` - Find files shared with you by others\n - `sharedWithMe = false` - Find files NOT shared with you (your own files)\n - `trashed = true` - Find files in trash\n - `trashed = false` - Exclude trashed files from results\n - `starred = true` - Find starred/favorited files\n - `starred = false` - Find non-starred files\n\n Combine with other conditions using 'and':\n - \"sharedWithMe = true and name contains 'report'\" - Find shared files with 'report' in name\n - \"sharedWithMe = true and mimeType = 'application/pdf'\" - Find shared PDF files\n - \"starred = true and modifiedTime > '2024-01-01T00:00:00'\" - Find recently modified starred files\n\n **Query Complexity Limits:**\n Google Drive API has undocumented limits on query complexity. Queries with many OR clauses (typically >5-10) may fail with 'The query is too complex' error.\n Workarounds for broad searches:\n - Use fewer, more general search terms (e.g., \"fullText contains 'AI'\" instead of many specific terms)\n - Break complex searches into multiple simpler queries and combine results client-side\n - Use broader 'contains' terms that cover multiple concepts\n - Prioritize the most important search criteria\n\n **Name Field Usage:**\n - Exact match: \"name = 'exact filename.pdf'\"\n - Partial match: \"name contains 'report'\" (for substring search)\n - IMPORTANT: Wildcards (*) are NOT supported. Use 'contains' operator for partial matching instead of wildcards.\n\n **User Email Searches:**\n - CORRECT: \"'user@example.com' in owners\" or \"'user@example.com' in writers\" or \"'user@example.com' in readers\"\n - INCORRECT: \"owner:user@example.com\" (colon syntax is NOT supported and will cause errors)\n - Always use the 'in' operator with quoted email addresses for user-based searches\n - **Auto-Transform:** If you provide a bare email address (just \"user@example.com\"), it will be automatically transformed to \"'user@example.com' in owners\"\n - IMPORTANT: Email addresses CANNOT be used with fullText searches - they must use the 'in' operator with owners/writers/readers fields\n\n **Special Syntax:**\n - Dates: RFC 3339 format (time zone defaults to UTC)\n - Apostrophes/quotes in values: Automatically escaped. You can write \"name = 'Jan'26'\" or \"name = 'Valentine's Day'\" without manual escaping - the system handles it.\n - Grouping: Use parentheses for OR: \"(mimeType contains 'image/' or mimeType contains 'video/')\"\n - Custom properties: \"properties has { key='department' and value='sales' }\"\n\n **Common Use Cases:**\n - Find files modified after timestamp: \"modifiedTime > '2024-10-01T14:30:00'\"\n - Search file content: \"fullText contains 'quarterly results'\"\n\n **IMPORTANT - Root Folder ('My Drive'):**\n - 'My Drive' is NOT a searchable folder name. It's the virtual representation of the user's root directory.\n - Searching for name = 'My Drive' will return empty results because it's not a real folder entity.\n - To work with the root folder, use the 'root' alias: folder_id='root' or \"'root' in parents\" in your query.\n ","examples":["name = 'Budget 2024'","name = 'Valentine's Day'","name contains 'Jan'26 Schedule'","name contains 'report'","mimeType = 'application/pdf'","mimeType = 'application/vnd.google-apps.folder'","'FOLDER_ID' in parents","modifiedTime > '2024-01-01T00:00:00'","modifiedTime > '2024-10-01T14:30:00' and modifiedTime < '2024-10-01T18:00:00'","createdTime > '2024-10-02T00:00:00' and createdTime < '2024-10-02T23:59:59'","sharedWithMe = true","sharedWithMe = true and name contains 'report'","sharedWithMe = true and mimeType = 'application/pdf'","starred = true and mimeType = 'application/pdf'","trashed = false","'user@example.com' in owners","'user@example.com' in writers","fullText contains 'quarterly results'","name contains 'report' and not name contains 'draft'","(mimeType contains 'image/' or mimeType contains 'video/')","name contains 'invoice' and modifiedTime > '2024-01-01T00:00:00' and trashed = false"],"title":"Q","type":"string"},"spaces":{"default":"drive","description":"A comma-separated list of spaces to query. Supported values are 'drive', 'appDataFolder' and 'photos'.","examples":["drive","appDataFolder","photos","drive,appDataFolder"],"title":"Spaces","type":"string"},"supportsAllDrives":{"default":true,"description":"Whether the requesting application supports both My Drives and shared drives. If 'includeItemsFromAllDrives' is true, this must also be true.","title":"Supports All Drives","type":"boolean"}},"title":"FindFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to find a folder in Google Drive by its name and optionally a parent folder. Use when you need to locate a specific folder to perform further actions like creating files in it or listing its contents.","name":"GOOGLEDRIVE_FIND_FOLDER","parameters":{"properties":{"full_text_contains":{"description":"A string to search for within the folder's name or description (NOT the content of files inside the folder). This search is case-insensitive. Note: Google Drive's fullText search on folders only matches the folder's own metadata, not files contained within.","examples":["confidential project details","keyword"],"title":"Full Text Contains","type":"string"},"full_text_not_contains":{"description":"A string to exclude from the folder's name or description (NOT the content of files inside the folder). This search is case-insensitive. Note: Google Drive's fullText search on folders only matches the folder's own metadata, not files contained within.","examples":["draft","internal use only"],"title":"Full Text Not Contains","type":"string"},"modified_after":{"description":"Search for folders modified after a specific date and time. The timestamp must be in RFC 3339 format (e.g., '2023-01-15T10:00:00Z' or '2023-01-15T10:00:00.000Z').","examples":["2023-08-01T00:00:00Z"],"title":"Modified After","type":"string"},"name_contains":{"description":"A substring to search for within folder names as a string. This search is case-insensitive.","examples":["report","meeting notes","2024","project"],"title":"Name Contains","type":"string"},"name_exact":{"description":"The exact name of the folder to search for as a string. This search is case-sensitive. Do not pass numbers - convert to string if needed.","examples":["Project Alpha","Q1 Financials","Folder 8","Report 2024"],"title":"Name Exact","type":"string"},"name_not_contains":{"description":"A substring to exclude from folder names as a string. Folders with names containing this substring will not be returned. This search is case-insensitive.","examples":["archive","old","backup","temp"],"title":"Name Not Contains","type":"string"},"parent_folder_id":{"description":"The ID of the parent folder to search within. Only folders directly inside this parent folder will be returned. You can find parent folder IDs by first searching for the parent folder by name. Supports folders in both My Drive and Shared Drives.","examples":["1aBcDeFgHiJkLmNoPqRsTuVwXyZ","0B1234567890abcdefg"],"title":"Parent Folder Id","type":"string"},"starred":{"description":"Set to true to search for folders that are starred, or false for those that are not.","title":"Starred","type":"boolean"}},"title":"FindFolderRequest","type":"object"}},"type":"function"},{"function":{"description":"Generates a set of file IDs which can be provided in create or copy requests. Use when you need to pre-allocate IDs for new files or copies.","name":"GOOGLEDRIVE_GENERATE_IDS","parameters":{"properties":{"count":{"description":"The number of IDs to return. Value must be between 1 and 1000, inclusive.","examples":[10],"maximum":1000,"minimum":1,"title":"Count","type":"integer"},"space":{"description":"The space in which the IDs can be used. Supported values are 'drive' and 'appDataFolder'.","examples":["drive"],"title":"Space","type":"string"},"type":{"description":"The type of items for which the IDs can be used. For example, 'files' or 'shortcuts'.","examples":["files"],"title":"Type","type":"string"}},"title":"GenerateIdsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve information about the user, the user's Drive, and system capabilities. Use when you need to check storage quotas, user details, or supported import/export formats. Note: storageQuota reflects My Drive (personal) storage only — it does not cover shared drives; use GOOGLEDRIVE_LIST_SHARED_DRIVES and GOOGLEDRIVE_GET_DRIVE for shared drive quotas. A successful response confirms base Drive read access only; write access and shared drive access must be verified separately.","name":"GOOGLEDRIVE_GET_ABOUT","parameters":{"properties":{"fields":{"default":"*","description":"A comma-separated list of fields to include in the response. Use `*` to include all fields. Supported fields in Drive API v3: kind, user, storageQuota, importFormats, exportFormats, maxImportSizes, maxUploadSize, appInstalled, canCreateDrives, canCreateTeamDrives (deprecated), driveThemes, teamDriveThemes (deprecated), folderColorPalette. Note: rootFolderId was removed in v3 and is not supported. Note: storageQuota sub-fields (limit, usage, usageInDrive, usageInDriveTrash) are returned as strings representing bytes — convert to numeric types before arithmetic.","examples":["*","user,storageQuota","user,storageQuota,kind"],"title":"Fields","type":"string"}},"title":"GetAboutRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get information about a specific Drive app by ID. Use 'self' as the app ID to get information about the calling app.","name":"GOOGLEDRIVE_GET_APP","parameters":{"properties":{"appId":{"description":"The ID of the app. Use 'self' to refer to the calling app.","examples":["self","123456789"],"title":"App Id","type":"string"}},"required":["appId"],"title":"GetAppRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get a specific change by ID from Google Drive v2 API. Deprecated: Use changes.getStartPageToken and changes.list to retrieve recent changes instead.","name":"GOOGLEDRIVE_GET_CHANGE","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"AltEnum","type":"string"},"callback":{"description":"JSONP","title":"Callback","type":"string"},"changeId":{"description":"The ID of the change.","examples":["50","12345"],"title":"Change Id","type":"string"},"driveId":{"description":"The shared drive from which the change will be returned.","title":"Drive Id","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response.","title":"Fields","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"supportsAllDrives":{"description":"Whether the requesting application supports both My Drives and shared drives.","title":"Supports All Drives","type":"boolean"},"supportsTeamDrives":{"description":"Deprecated: Use `supportsAllDrives` instead.","title":"Supports Team Drives","type":"boolean"},"teamDriveId":{"description":"Deprecated: Use `driveId` instead.","title":"Team Drive Id","type":"string"},"uploadType":{"description":"Legacy upload protocol for media (e.g. 'media', 'multipart').","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. 'raw', 'multipart').","title":"Upload Protocol","type":"string"},"xgafv":{"description":"V1 error format.","enum":["1","2"],"title":"XgafvEnum","type":"string"}},"required":["changeId"],"title":"GetChangeRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get the starting pageToken for listing future changes in Google Drive. Returns only a token — pass it to GOOGLEDRIVE_LIST_CHANGES to retrieve actual changes. Persist this token; losing it requires a full rescan. The token is forward-looking: GOOGLEDRIVE_LIST_CHANGES may return no results if no changes have occurred since issuance. For simple recent-file lookups, prefer GOOGLEDRIVE_FIND_FILE; use this tool only for incremental change-feed workflows.","name":"GOOGLEDRIVE_GET_CHANGES_START_PAGE_TOKEN","parameters":{"properties":{"driveId":{"description":"The ID of the shared drive for which the starting pageToken for listing future changes from that shared drive will be returned.","examples":["0AB_CD1234EFG5HIJ6KLM7N8PQRST9UVWX"],"title":"Drive Id","type":"string"},"supportsAllDrives":{"default":false,"description":"Whether the requesting application supports both My Drives and shared drives. Defaults to false.","examples":[true],"title":"Supports All Drives","type":"boolean"},"supportsTeamDrives":{"description":"Deprecated: Use supportsAllDrives instead.","examples":[true],"title":"Supports Team Drives","type":"boolean"},"teamDriveId":{"description":"Deprecated: Use driveId instead.","examples":["0AB_CD1234EFG5HIJ6KLM7N8PQRST9UVWX"],"title":"Team Drive Id","type":"string"}},"title":"GetChangesStartPageTokenRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get a specific child reference for a folder using Drive API v2. Use when you need to verify a specific file exists as a child of a folder.","name":"GOOGLEDRIVE_GET_CHILD","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"AltEnum","type":"string"},"callback":{"description":"JSONP callback parameter.","title":"Callback","type":"string"},"childId":{"description":"The ID of the child.","examples":["1iau-j_ezb2Vcx1tZDMDdfpqlzxVzlscg"],"title":"Child Id","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response.","title":"Fields","type":"string"},"folderId":{"description":"The ID of the folder.","examples":["0APvaZgd8EyufUk9PVA"],"title":"Folder Id","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"uploadType":{"description":"Legacy upload protocol for media (e.g. 'media', 'multipart').","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. 'raw', 'multipart').","title":"Upload Protocol","type":"string"},"xgafv":{"description":"V1 error format options.","enum":["1","2"],"title":"XgafvEnum","type":"string"}},"required":["folderId","childId"],"title":"GetChildRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get a comment by ID. Use when you need to retrieve a specific comment from a Google Drive file and have both the file ID and comment ID.","name":"GOOGLEDRIVE_GET_COMMENT","parameters":{"properties":{"commentId":{"description":"The ID of the comment.","examples":["11a22b33c44d55e66f77g88h99i00j"],"title":"Comment Id","type":"string"},"fileId":{"description":"The ID of the file.","examples":["1a2b3c4d5e6f7g8h9i0j"],"title":"File Id","type":"string"},"includeDeleted":{"description":"Whether to return deleted comments. Deleted comments will not include their original content.","title":"Include Deleted","type":"boolean"}},"required":["fileId","commentId"],"title":"GetCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get a shared drive by ID. Use when you need to retrieve information about a specific shared drive. To discover drive_ids, use GOOGLEDRIVE_LIST_SHARED_DRIVES first; GOOGLEDRIVE_GET_ABOUT reflects overall user storage, not individual shared drive details. Permission changes may have a brief propagation delay before appearing in results.","name":"GOOGLEDRIVE_GET_DRIVE","parameters":{"properties":{"drive_id":{"description":"The ID of the shared drive.","examples":["0ABCA123456789"],"title":"Drive Id","type":"string"},"use_domain_admin_access":{"description":"Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the shared drive belongs.","examples":[true],"title":"Use Domain Admin Access","type":"boolean"}},"required":["drive_id"],"title":"GetDriveRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get a file's metadata by ID. Use to verify `mimeType`, `parents`, and `trashed` status before destructive operations (delete/move/export), or to confirm `mimeType='application/vnd.google-apps.document'` before calling GOOGLEDOCS_* tools (non-native files require GOOGLEDRIVE_DOWNLOAD_FILE). Only returns metadata visible to the connected account; public access requires GOOGLEDRIVE_ADD_FILE_SHARING_PREFERENCE. High-frequency calls risk `403 rateLimitExceeded`; apply exponential backoff.","name":"GOOGLEDRIVE_GET_FILE_METADATA","parameters":{"properties":{"fields":{"description":"Comma-separated list of fields to include in the response. Use this for partial responses to request only specific metadata fields. Common fields: id, name, mimeType, webViewLink, webContentLink, createdTime, modifiedTime, size, quotaBytesUsed, parents, owners, permissions. Use '*' to return all available fields. Note: The deprecated v2 field 'alternateLink' is automatically migrated to 'webViewLink'. Example: 'id,name,mimeType,webViewLink,createdTime,modifiedTime'. Most fields (webViewLink, parents, owners, size, modifiedTime, etc.) are omitted by default — explicitly list required fields or use '*' (increases latency). `md5Checksum` is null for native Google Workspace files (Docs/Sheets/Slides); use `mimeType` to classify items — folders use `mimeType='application/vnd.google-apps.folder'` and Workspace files return `size=null`. `modifiedTime` is RFC 3339 UTC format.","title":"Fields","type":"string"},"fileId":{"description":"The Google Drive file ID (an opaque alphanumeric string like '1a2b3c4d5e6f7g8h9i0j'), NOT a file name. If you only have a file name, use GOOGLEDRIVE_FIND_FILE or GOOGLEDRIVE_LIST_FILES to get the file ID first.","examples":["1a2b3c4d5e6f7g8h9i0j"],"title":"File Id","type":"string"},"includeLabels":{"description":"A comma-separated list of IDs of labels to include in the labelInfo part of the response.","title":"Include Labels","type":"string"},"includePermissionsForView":{"description":"Specifies which additional view's permissions to include in the response. Only 'published' is supported.","title":"Include Permissions For View","type":"string"},"supportsAllDrives":{"default":true,"description":"Whether the requesting application supports both My Drives and shared drives. Defaults to true to ensure files in shared drives are accessible.","title":"Supports All Drives","type":"boolean"}},"required":["fileId"],"title":"GetFileMetadataRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get a property by its key using Google Drive API v2. Use when you need to retrieve a specific custom property attached to a file.","name":"GOOGLEDRIVE_GET_FILE_PROPERTY","parameters":{"properties":{"fileId":{"description":"The ID of the file.","examples":["1FT9IW4UpvEc4Ezxv8xS2jEda17MztBXzK7CMqfz-s98"],"title":"File Id","type":"string"},"propertyKey":{"description":"The key of the property.","examples":["test_key"],"title":"Property Key","type":"string"},"visibility":{"description":"The visibility of the property. Allowed values are PRIVATE (default) and PUBLIC. Private properties can only be retrieved using an authenticated request.","title":"Visibility","type":"string"}},"required":["fileId","propertyKey"],"title":"GetPropertyRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GetFileMetadata instead. Tool to get a file's metadata or content by ID from Google Drive API v2. Use when you need file metadata with alt=json, or file content with alt=media.","name":"GOOGLEDRIVE_GET_FILE_V2","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"acknowledgeAbuse":{"description":"Whether the user is acknowledging the risk of downloading known malware or other abusive files.","title":"Acknowledge Abuse","type":"boolean"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"AltFormat","type":"string"},"callback":{"description":"JSONP callback function name.","title":"Callback","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response.","title":"Fields","type":"string"},"fileId":{"description":"The ID for the file in question. This is a required parameter and cannot be empty.","examples":["1FT9IW4UpvEc4Ezxv8xS2jEda17MztBXzK7CMqfz-s98"],"title":"File Id","type":"string"},"includeLabels":{"description":"A comma-separated list of IDs of labels to include in the labelInfo part of the response.","title":"Include Labels","type":"string"},"includePermissionsForView":{"description":"Specifies which additional view's permissions to include in the response. Only 'published' is supported.","title":"Include Permissions For View","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"projection":{"description":"Projection parameter values (deprecated).","enum":["BASIC","FULL"],"title":"ProjectionType","type":"string"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"revisionId":{"description":"Specifies the Revision ID that should be downloaded. Ignored unless alt=media is specified.","title":"Revision Id","type":"string"},"supportsAllDrives":{"description":"Whether the requesting application supports both My Drives and shared drives.","title":"Supports All Drives","type":"boolean"},"supportsTeamDrives":{"description":"Deprecated: Use supportsAllDrives instead.","title":"Supports Team Drives","type":"boolean"},"updateViewedDate":{"description":"Deprecated: Use files.update with modifiedDateBehavior=noChange, updateViewedDate=true and an empty request body.","title":"Update Viewed Date","type":"boolean"},"uploadType":{"description":"Legacy upload protocol for media (e.g. 'media', 'multipart').","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. 'raw', 'multipart').","title":"Upload Protocol","type":"string"},"xgafv":{"description":"V1 error format values.","enum":["1","2"],"title":"XgafvFormat","type":"string"}},"required":["fileId"],"title":"GetFileV2Request","type":"object"}},"type":"function"},{"function":{"description":"Tool to get a specific parent reference for a file using Drive API v2. Use when you need to retrieve information about a specific parent folder of a file.","name":"GOOGLEDRIVE_GET_PARENT","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"AltEnum","type":"string"},"callback":{"description":"JSONP callback parameter.","title":"Callback","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response.","title":"Fields","type":"string"},"fileId":{"description":"The ID of the file.","examples":["1xygSVDktMDb4chxS3AQTMzABKWYdWtOB"],"title":"File Id","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"parentId":{"description":"The ID of the parent.","examples":["0APvaZgd8EyufUk9PVA"],"title":"Parent Id","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"uploadType":{"description":"Legacy upload protocol for media (e.g. 'media', 'multipart').","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. 'raw', 'multipart').","title":"Upload Protocol","type":"string"},"xgafv":{"description":"V1 error format options.","enum":["1","2"],"title":"XgafvEnum","type":"string"}},"required":["fileId","parentId"],"title":"GetParentRequest","type":"object"}},"type":"function"},{"function":{"description":"Gets a permission by ID. Use this tool to retrieve a specific permission for a file or shared drive. Newly created or updated permissions on shared drives may have a brief propagation delay before appearing.","name":"GOOGLEDRIVE_GET_PERMISSION","parameters":{"properties":{"fields":{"description":"Selector specifying which fields to include in a partial response. Use 'fields=*' to return all available fields for the permission resource.","examples":["id,emailAddress,displayName,role,permissionDetails"],"title":"Fields","type":"string"},"file_id":{"description":"The ID of the file.","examples":["1a2b3c4d5e6f7g8h9i0j"],"title":"File Id","type":"string"},"permission_id":{"description":"The numeric ID of the permission. Note: The 'me' alias is NOT supported by the Google Drive permissions API. You must provide an actual numeric permission ID (e.g., '12345678901234567890'). Use the LIST_PERMISSIONS action to get permission IDs for a file.","examples":["12345678901234567890"],"title":"Permission Id","type":"string"},"supports_all_drives":{"description":"Whether the requesting application supports both My Drives and shared drives.","title":"Supports All Drives","type":"boolean"},"use_domain_admin_access":{"description":"Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.","title":"Use Domain Admin Access","type":"boolean"}},"required":["file_id","permission_id"],"title":"GetPermissionRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get the permission ID for an email address using the Drive API v2. Use when you need to convert an email address to its corresponding permission ID.","name":"GOOGLEDRIVE_GET_PERMISSION_ID_FOR_EMAIL","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"AltEnum","type":"string"},"callback":{"description":"JSONP callback parameter.","title":"Callback","type":"string"},"email":{"description":"The email address for which to return a permission ID","examples":["test@example.com","user@gmail.com"],"title":"Email","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response.","title":"Fields","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"uploadType":{"description":"Legacy upload protocol for media (e.g. 'media', 'multipart').","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. 'raw', 'multipart').","title":"Upload Protocol","type":"string"},"xgafv":{"description":"V1 error format options.","enum":["1","2"],"title":"XgafvEnum","type":"string"}},"required":["email"],"title":"GetPermissionIdForEmailRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get a specific reply to a comment on a file. Use when you need to retrieve the details of a particular reply.","name":"GOOGLEDRIVE_GET_REPLY","parameters":{"properties":{"commentId":{"description":"The ID of the comment.","examples":["AAAAAABBBBBB"],"title":"Comment Id","type":"string"},"fileId":{"description":"The ID of the file.","examples":["1aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789"],"title":"File Id","type":"string"},"includeDeleted":{"description":"Whether to return deleted replies. Deleted replies will not include their original content.","title":"Include Deleted","type":"boolean"},"replyId":{"description":"The ID of the reply.","examples":["CCCCCCDDDDDD"],"title":"Reply Id","type":"string"}},"required":["fileId","commentId","replyId"],"title":"GetReplyRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get a specific revision's metadata (name, modifiedTime, keepForever, etc.) by revision ID. Returns metadata only — not file content. Use a separate download tool to retrieve file content or restore a revision.","name":"GOOGLEDRIVE_GET_REVISION","parameters":{"properties":{"acknowledge_abuse":{"description":"Whether the user is acknowledging the risk of downloading known malware or other abusive files. This is only applicable when the alt parameter is set to media and the user is the owner of the file or an organizer of the shared drive in which the file resides.","title":"Acknowledge Abuse","type":"boolean"},"file_id":{"description":"The ID of the file.","examples":["1ZdR3L3Kek7szY1G1-2VUX8cW6CnU0c4a"],"title":"File Id","type":"string"},"revision_id":{"description":"The ID of the revision.","examples":["0B9B5CLMDv-N4Z2FhY0E5RUQzNVE"],"title":"Revision Id","type":"string"}},"required":["file_id","revision_id"],"title":"GetRevisionRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get metadata about a Team Drive by ID. Deprecated: Use the drives.get endpoint instead.","name":"GOOGLEDRIVE_GET_TEAM_DRIVE","parameters":{"properties":{"teamDriveId":{"description":"The ID of the Team Drive","examples":["0AMndV9-YuXjwUk9PVA"],"title":"Team Drive Id","type":"string"},"useDomainAdminAccess":{"description":"Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.","title":"Use Domain Admin Access","type":"boolean"}},"required":["teamDriveId"],"title":"GetTeamDriveRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to delete a file or folder in Google Drive. Use when you need to permanently remove a specific file or folder using its ID. Note: This action is irreversible. Deleting a folder permanently removes all nested files and subfolders.","name":"GOOGLEDRIVE_GOOGLE_DRIVE_DELETE_FOLDER_OR_FILE_ACTION","parameters":{"properties":{"fileId":{"description":"The ID of the file or folder to delete. This is a required field.","examples":["1XyZAbcDefGhiJklMnoPqRsTuVwXyZAbcDef"],"title":"File Id","type":"string"},"supportsAllDrives":{"description":"Whether the application supports both My Drives and shared drives. If false or unspecified, the file is attempted to be deleted from the user's My Drive. If true, the item will be deleted from shared drives as well if necessary.","title":"Supports All Drives","type":"boolean"}},"required":["fileId"],"title":"GoogleDriveDeleteFolderOrFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to hide a shared drive from the default view. Use when you want to remove a shared drive from the user's main Google Drive interface without deleting it.","name":"GOOGLEDRIVE_HIDE_DRIVE","parameters":{"properties":{"drive_id":{"description":"The ID of the shared drive.","examples":["0AEMgNk_8MPnAUk9PVA"],"title":"Drive Id","type":"string"}},"required":["drive_id"],"title":"HideDriveRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to insert a file into a folder using Drive API v2. Use when you need to add an existing file to a folder.","name":"GOOGLEDRIVE_INSERT_CHILD","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"AltEnum","type":"string"},"callback":{"description":"JSONP callback parameter.","title":"Callback","type":"string"},"enforceSingleParent":{"description":"Deprecated: Adding files to multiple folders is no longer supported. Use shortcuts instead.","title":"Enforce Single Parent","type":"boolean"},"fields":{"description":"Selector specifying which fields to include in a partial response.","title":"Fields","type":"string"},"folderId":{"description":"The ID of the folder.","examples":["1IL1JRSfkm9B_L-guI7g-birKApFyD_Di"],"title":"Folder Id","type":"string"},"id":{"description":"The ID of the child file to insert into the folder.","examples":["19GP5DRpUcmQHBVnk39RTB57twIWVEMjO"],"title":"Id","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"supportsAllDrives":{"description":"Whether the requesting application supports both My Drives and shared drives.","title":"Supports All Drives","type":"boolean"},"supportsTeamDrives":{"description":"Deprecated: Use supportsAllDrives instead.","title":"Supports Team Drives","type":"boolean"},"uploadType":{"description":"Legacy upload protocol for media (e.g. 'media', 'multipart').","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. 'raw', 'multipart').","title":"Upload Protocol","type":"string"},"xgafv":{"description":"V1 error format options.","enum":["1","2"],"title":"XgafvEnum","type":"string"}},"required":["folderId","id"],"title":"InsertChildRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list pending access proposals on a file. Use when you need to retrieve access proposals for a specific file. Note: Only approvers can list access proposals; non-approvers will receive a 403 error.","name":"GOOGLEDRIVE_LIST_ACCESS_PROPOSALS","parameters":{"properties":{"fileId":{"description":"The ID of the file to list access proposals for","examples":["1lu9-CzH7k2a_ktFQvt8xfYM1L0FVGJx6"],"title":"File Id","type":"string"},"pageSize":{"description":"The number of results per page","minimum":1,"title":"Page Size","type":"integer"},"pageToken":{"description":"The continuation token on the list of access requests","title":"Page Token","type":"string"}},"required":["fileId"],"title":"ListAccessProposalsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list approvals on a file for workflow-based access control. Use when you need to retrieve all approvals associated with a specific file in Google Drive.","name":"GOOGLEDRIVE_LIST_APPROVALS","parameters":{"properties":{"fileId":{"description":"The ID of the file to list approvals for","examples":["1xAHUNyfubIa8K07EVv9_5Hc5EsgdIhUx-QNcrGJ_yQk"],"title":"File Id","type":"string"},"pageSize":{"description":"The maximum number of approvals to return per page","minimum":1,"title":"Page Size","type":"integer"},"pageToken":{"description":"A pagination token returned as 'nextPageToken' from a previous list approvals response. Must be an exact, unmodified token from a prior API call - do not construct, encode, or guess token values. Only provide this parameter when paginating through results.","title":"Page Token","type":"string"}},"required":["fileId"],"title":"ListApprovalsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list the changes for a user or shared drive. Use when a full incremental change feed is needed (for simple recent-file lookups, prefer GOOGLEDRIVE_FIND_FILE instead). Tracks modifications such as creations, deletions, or permission changes. The pageToken is optional - if not provided, the current start page token will be automatically fetched; an empty result is valid if no recent activity has occurred. Example usage: ```json { \"pageToken\": \"22633\", \"pageSize\": 100, \"includeRemoved\": true } ``` Returns changes with timestamps, file IDs, and modification details. Paginate by following `nextPageToken` until it is absent — stopping early will silently omit changes. Save `newStartPageToken` to monitor future changes efficiently.","name":"GOOGLEDRIVE_LIST_CHANGES","parameters":{"properties":{"driveId":{"description":"The shared drive from which changes will be returned. If specified the change IDs will be reflective of the shared drive; use the combined drive ID and change ID as an identifier. When driveId is provided, supportsAllDrives is automatically set to true.","examples":["0AB1CDEfghijklmNOP"],"title":"Drive Id","type":"string"},"includeCorpusRemovals":{"description":"Whether changes should include the file resource if the file is still accessible by the user at the time of the request, even when a file was removed from the list of changes and there will be no further change entries for this file. Note: When set to true, includeRemoved must also be true (will be automatically set).","title":"Include Corpus Removals","type":"boolean"},"includeItemsFromAllDrives":{"description":"Whether both My Drive and shared drive items should be included in results. Must be true when driveId is specified (will be automatically set to true when driveId is provided).","title":"Include Items From All Drives","type":"boolean"},"includeLabels":{"description":"A comma-separated list of IDs of labels to include in the `labelInfo` part of the response.","examples":["labelId1,labelId2"],"title":"Include Labels","type":"string"},"includePermissionsForView":{"const":"published","description":"Specifies which additional view's permissions to include in the response.","examples":["published"],"title":"Include Permissions For View","type":"string"},"includeRemoved":{"default":true,"description":"Whether to include changes indicating that items have been removed from the list of changes, for example by deletion or loss of access.","title":"Include Removed","type":"boolean"},"pageSize":{"default":100,"description":"The maximum number of changes to return per page.","examples":[100],"maximum":1000,"minimum":1,"title":"Page Size","type":"integer"},"pageToken":{"description":"The token for continuing a previous list request on the next page. Must be a valid token from a previous LIST_CHANGES response's 'nextPageToken' field or from the get_changes_start_page_token action. If not provided, the current start page token will be automatically fetched and used. Tokens can become stale — always use a fresh token from GOOGLEDRIVE_GET_CHANGES_START_PAGE_TOKEN or the most recent prior response to avoid missed or duplicate changes. Paginate until nextPageToken is absent; stopping early silently omits changes.","examples":["22633"],"title":"Page Token","type":"string"},"restrictToMyDrive":{"description":"Whether to restrict the results to changes inside the My Drive hierarchy. This omits changes to files such as those in the Application Data folder or shared files which have not been added to My Drive.","title":"Restrict To My Drive","type":"boolean"},"spaces":{"default":"drive","description":"A comma-separated list of spaces to query within the corpora. Supported values are 'drive' and 'appDataFolder'.","examples":["drive,appDataFolder"],"title":"Spaces","type":"string"},"supportsAllDrives":{"description":"Whether the requesting application supports both My Drives and shared drives. Must be true when driveId is specified (will be automatically set to true when driveId is provided).","title":"Supports All Drives","type":"boolean"}},"title":"ListChangesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list a folder's children using Google Drive API v2. Use when you need to retrieve all files and folders within a specific folder.","name":"GOOGLEDRIVE_LIST_CHILDREN_V2","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response enum.","enum":["json","media","proto"],"title":"AltEnum","type":"string"},"callback":{"description":"JSONP callback parameter.","title":"Callback","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response. This endpoint returns ChildReference objects, NOT full File objects. Valid ChildReference fields are: 'id' (child ID), 'selfLink' (link to this reference), 'kind' (resource type), 'childLink' (link to the child). File-level fields like 'title', 'modifiedDate', 'fileSize', 'alternateLink', 'mimeType' are NOT valid. Example: 'items(id,childLink),nextPageToken'","title":"Fields","type":"string"},"folderId":{"description":"The ID of the folder.","examples":["root","1xygSVDktMDb4chxS3AQTMzABKWYdWtOB"],"title":"Folder Id","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"maxResults":{"description":"Maximum number of children to return.","title":"Max Results","type":"integer"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"orderBy":{"description":"A comma-separated list of sort keys. Valid keys are 'createdDate', 'folder', 'lastViewedByMeDate', 'modifiedByMeDate', 'modifiedDate', 'quotaBytesUsed', 'recency', 'sharedWithMeDate', 'starred', and 'title'. Each key sorts ascending by default, but may be reversed with the 'desc' modifier. Example usage: ?orderBy=folder,modifiedDate desc,title.","title":"Order By","type":"string"},"pageToken":{"description":"Page token for children.","title":"Page Token","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"q":{"description":"Query string for searching children.","title":"Q","type":"string"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"uploadType":{"description":"Legacy upload protocol for media (e.g. 'media', 'multipart').","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. 'raw', 'multipart').","title":"Upload Protocol","type":"string"},"xgafv":{"description":"V1 error format enum.","enum":["1","2"],"title":"XgafvEnum","type":"string"}},"required":["folderId"],"title":"ListChildrenV2Request","type":"object"}},"type":"function"},{"function":{"description":"Tool to list all comments for a file in Google Drive. Results are paginated; iterate using nextPageToken until absent to retrieve all comments. Filtering by author, content, or other criteria must be done client-side. Use commentId, createdTime, and author from results to uniquely identify comments before acting on them.","name":"GOOGLEDRIVE_LIST_COMMENTS","parameters":{"properties":{"fields":{"default":"*","description":"A comma-separated list of fields to include in the response. Use `*` to include all fields. Prefer selective field masks (e.g., 'comments(id,content,author)') over '*' to reduce payload size and latency.","examples":["*","comments(id,content,author)"],"title":"Fields","type":"string"},"fileId":{"description":"The ID of the file. Equivalent to the Google Docs document_id; pass it here under the fileId parameter name.","examples":["1234567890abcdefghijklmnopqrstuvwxyz"],"title":"File Id","type":"string"},"includeDeleted":{"default":false,"description":"Whether to include deleted comments. Deleted comments will not include their original content.","title":"Include Deleted","type":"boolean"},"pageSize":{"default":20,"description":"The maximum number of comments to return per page.","maximum":100,"minimum":1,"title":"Page Size","type":"integer"},"pageToken":{"description":"The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response. Comments may be added or modified during pagination on active files; use startModifiedTime to bound the window if consistency is required.","title":"Page Token","type":"string"},"startModifiedTime":{"description":"The minimum value of 'modifiedTime' for the result comments (RFC 3339 date-time).","title":"Start Modified Time","type":"string"}},"required":["fileId"],"title":"ListCommentsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list the labels already applied to a file in Google Drive. An empty labels array is a valid response indicating no labels are applied, not an error. This tool shows only applied labels; label_id and field_id values required by other Drive label tools must be obtained from admin configuration.","name":"GOOGLEDRIVE_LIST_FILE_LABELS","parameters":{"properties":{"file_id":{"description":"The ID of the file.","examples":["1aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789"],"title":"File Id","type":"string"},"max_results":{"description":"The maximum number of labels to return per page. Default is 100.","maximum":100,"minimum":1,"title":"Max Results","type":"integer"},"page_token":{"description":"Token to retrieve a specific page of results.","title":"Page Token","type":"string"}},"required":["file_id"],"title":"ListFileLabelsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list a file's properties in Google Drive API v2. Use when you need to retrieve custom properties (key-value pairs) attached to a file.","name":"GOOGLEDRIVE_LIST_FILE_PROPERTIES","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"AltFormat","type":"string"},"callback":{"description":"JSONP callback function name.","title":"Callback","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response.","title":"Fields","type":"string"},"fileId":{"description":"The ID of the file. This is a required parameter and cannot be empty.","examples":["1FT9IW4UpvEc4Ezxv8xS2jEda17MztBXzK7CMqfz-s98"],"title":"File Id","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"uploadType":{"description":"Legacy upload protocol for media (e.g. 'media', 'multipart').","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. 'raw', 'multipart').","title":"Upload Protocol","type":"string"},"xgafv":{"description":"V1 error format values.","enum":["1","2"],"title":"XgafvFormat","type":"string"}},"required":["fileId"],"title":"ListPropertiesRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GOOGLEDRIVE_FIND_FILE instead. Tool to list a user's files and folders in Google Drive. Use this to search or browse for files and folders based on various criteria.","name":"GOOGLEDRIVE_LIST_FILES","parameters":{"additionalProperties":true,"properties":{"corpora":{"description":"Specifies the bodies of items (files/documents) to which the query applies. Supported values are 'user', 'domain', 'drive', and 'allDrives'. It's generally more efficient to use 'user' or 'drive' instead of 'allDrives'. Defaults to 'user'.","examples":["user","drive"],"title":"Corpora","type":"string"},"driveId":{"description":"The ID of the shared drive to search. This is used when `corpora` is set to 'drive'.","examples":["0ABCA123456789"],"title":"Drive Id","type":"string"},"fields":{"description":"Selector specifying which file fields to include in the response. Provide a comma-separated list of file field names (e.g., 'id,name,mimeType,webViewLink'). The action will automatically format this into the proper API format 'files(field1,field2,...)'. Common file fields include: id, name, description, mimeType, webViewLink, webContentLink, size, createdTime, modifiedTime, parents, owners, permissions. To also include the pagination token, add 'nextPageToken' to the list. NOTE: Google Drive API v2 field names are automatically converted to v3 equivalents (e.g., alternateLink→webViewLink, downloadUrl→webContentLink, title→name, createdDate→createdTime, modifiedDate→modifiedTime).","examples":["id,name,mimeType","id,name,mimeType,webViewLink,modifiedTime"],"title":"Fields","type":"string"},"folderId":{"description":"ID of a specific folder to list files from. This is a convenience parameter that automatically adds \"'folder_id' in parents\" to the query. Cannot be used together with a custom 'q' parameter.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Folder Id","type":"string"},"includeItemsFromAllDrives":{"description":"Whether to include items from both My Drive and shared drives. This is relevant when `corpora` is 'user' or 'domain'. Defaults to false.","examples":[true],"title":"Include Items From All Drives","type":"boolean"},"includeLabels":{"description":"A comma-separated list of label IDs to include in the `labelInfo` part of the response for each file.","examples":["labelId1,labelId2"],"title":"Include Labels","type":"string"},"includePermissionsForView":{"const":"published","description":"Include additional permissions for a specific view. The only valid value is 'published', which includes permissions for files with published content. Omit this parameter if you don't need published view permissions.","examples":["published"],"title":"Include Permissions For View","type":"string"},"orderBy":{"description":"A comma-separated list of sort keys. Valid keys are: 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name', 'name_natural', 'quotaBytesUsed', 'recency', 'sharedWithMeTime', 'starred', 'viewedByMeTime'. IMPORTANT: Use 'quotaBytesUsed' to sort by file size (do NOT use 'size' - it is not a valid key). Each key sorts in ascending order by default, but can be reversed with the 'desc' modifier (e.g., 'modifiedTime desc').","examples":["modifiedTime desc,name","quotaBytesUsed desc"],"title":"Order By","type":"string"},"pageSize":{"default":100,"description":"The maximum number of files to return per page. The value must be between 1 and 1000, inclusive. Defaults to 100.","examples":[50],"maximum":1000,"minimum":1,"title":"Page Size","type":"integer"},"pageToken":{"description":"The token for continuing a previous list request on the next page. This MUST be set to the value of 'nextPageToken' from the previous response. Do not manually construct or modify pageToken values as they are opaque tokens generated by the API. If the token is rejected, pagination should be restarted from the first page.","examples":[" nextPageTokenValue"],"title":"Page Token","type":"string"},"q":{"description":"A query string for filtering the file results. Supports operators 'and', 'or', 'not'. VALID query terms: 'name' (contains, =, !=), 'fullText' (contains), 'mimeType' (contains, =, !=), 'modifiedTime' (<=, <, =, !=, >, >=), 'viewedByMeTime' (<=, <, =, !=, >, >=), 'trashed' (=, !=), 'starred' (=, !=), 'parents' (in), 'owners' (in), 'writers' (in), 'readers' (in), 'sharedWithMe' (=, !=), 'createdTime' (<=, <, =, !=, >, >=), 'properties' (has), 'appProperties' (has), 'visibility' (=, !=), 'shortcutDetails.targetId' (=, !=). IMPORTANT: 'id' is NOT a valid query term - you cannot search by file ID using this parameter. To get a specific file by ID, use the 'Get File Metadata' action instead. LENGTH LIMITS: Very long queries (especially with many parent folder IDs or fullText clauses) may exceed Google's URL size limits and result in errors. If searching across many folders (e.g., 100+ parent IDs), consider splitting into multiple smaller queries. Example: \"name contains 'important' and mimeType = 'application/vnd.google-apps.folder'\".","examples":["name contains 'report' and starred = true"],"title":"Q","type":"string"},"spaces":{"description":"A comma-separated list of spaces to query within the corpora. Supported values are 'drive' and 'appDataFolder'. 'drive' represents files in My Drive and shared drives, while 'appDataFolder' represents the application's private data folder.","examples":["drive,appDataFolder"],"title":"Spaces","type":"string"},"supportsAllDrives":{"description":"Whether the requesting application supports both My Drives and shared drives. Defaults to false. If true, then `includeItemsFromAllDrives` can be used to extend the search to all drives.","examples":[true],"title":"Supports All Drives","type":"boolean"}},"title":"ListFilesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list a file's permissions. Use when you need to retrieve all permissions associated with a specific file or shared drive.","name":"GOOGLEDRIVE_LIST_PERMISSIONS","parameters":{"properties":{"fileId":{"description":"The ID of the file or shared drive. Must be a non-empty string.","examples":["1234567890abcdefghijklmnopqrstuvwxyz"],"minLength":1,"title":"File Id","type":"string"},"includePermissionsForView":{"description":"Specifies which additional view's permissions to include in the response. Only 'published' is supported.","pattern":"^published$","title":"Include Permissions For View","type":"string"},"pageSize":{"description":"The maximum number of permissions to return per page. When not set for files in a shared drive, at most 100 results will be returned. When not set for files that are not in a shared drive, the entire list will be returned.","maximum":100,"minimum":1,"title":"Page Size","type":"integer"},"pageToken":{"description":"The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response.","title":"Page Token","type":"string"},"supportsAllDrives":{"description":"Whether the requesting application supports both My Drives and shared drives. Default: false","title":"Supports All Drives","type":"boolean"},"useDomainAdminAccess":{"description":"Issue the request as a domain administrator; if set to true, then theRequester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.","title":"Use Domain Admin Access","type":"boolean"}},"required":["fileId"],"title":"ListPermissionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list replies to a comment in Google Drive. Use this when you need to retrieve all replies associated with a specific comment on a file.","name":"GOOGLEDRIVE_LIST_REPLIES","parameters":{"properties":{"comment_id":{"description":"The ID of the comment.","examples":["67890ghijkl"],"title":"Comment Id","type":"string"},"fields":{"default":"*","description":"Selector specifying which fields to include in a partial response. Use '*' for all fields or e.g. 'replies(id,content),nextPageToken'","title":"Fields","type":"string"},"file_id":{"description":"The ID of the file.","examples":["12345abcdef"],"title":"File Id","type":"string"},"include_deleted":{"default":false,"description":"Whether to include deleted replies. Deleted replies will not include their original content.","title":"Include Deleted","type":"boolean"},"page_size":{"description":"The maximum number of replies to return per page.","maximum":100,"minimum":1,"title":"Page Size","type":"integer"},"page_token":{"description":"The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response.","title":"Page Token","type":"string"}},"required":["file_id","comment_id"],"title":"ListRepliesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list a file's revision metadata (not content) in Google Drive. Drive may prune old revisions, so history may be incomplete for frequently edited files. Filter client-side for specific revisionIds; do not assume the last entry is the active version.","name":"GOOGLEDRIVE_LIST_REVISIONS","parameters":{"properties":{"fileId":{"description":"The ID of the file.","examples":["1234567890abcdefghijklmnopqrstuvwxyz"],"title":"File Id","type":"string"},"pageSize":{"description":"The maximum number of revisions to return per page.","examples":[100],"maximum":1000,"minimum":1,"title":"Page Size","type":"integer"},"pageToken":{"description":"The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response. Continue paginating until `nextPageToken` is absent; stopping early silently omits revisions.","examples":["abcdef123456"],"title":"Page Token","type":"string"},"supportsAllDrives":{"description":"Whether the requesting application supports both My Drives and shared drives. Defaults to false. Must be set to `true` for shared drive files; omitting it causes `fileId` resolution failures on shared drives.","title":"Supports All Drives","type":"boolean"}},"required":["fileId"],"title":"ListRevisionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list the user's shared drives. Use when you need to get a list of all shared drives accessible to the authenticated user. Results may differ from the web UI due to admin policies; listing a drive does not guarantee access to its contents. Paginated calls may trigger 403 rateLimitExceeded or 429 tooManyRequests; apply exponential backoff when iterating many pages.","name":"GOOGLEDRIVE_LIST_SHARED_DRIVES","parameters":{"properties":{"pageSize":{"description":"Maximum number of shared drives to return per page. Maximum allowed value is 1000. Paginate by passing the returned nextPageToken back as pageToken until no nextPageToken is returned to avoid silently missing drives.","maximum":100,"minimum":1,"title":"Page Size","type":"integer"},"pageToken":{"description":"Page token for shared drives.","title":"Page Token","type":"string"},"q":{"description":"Query string for searching shared drives using Google Drive query syntax (e.g., \"name contains 'ProjectX'\" or \"createdTime > '2023-01-01T00:00:00'\"). Query format: query_term operator values. Common query terms: name, createdTime, memberCount, organizerCount, hidden. Common operators: contains, =, >, <, >=, !=. String values must be enclosed in single quotes. Special characters (apostrophes, backslashes) must be escaped. Multiple terms can be combined with 'and'/'or' operators and parentheses for grouping.","title":"Q","type":"string"},"useDomainAdminAccess":{"description":"Issue the request as a domain administrator. If set to true, then all shared drives of the domain in which the requester is an administrator are returned.","title":"Use Domain Admin Access","type":"boolean"}},"title":"ListSharedDrivesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list Team Drives (deprecated, use List Shared Drives instead). Use when you need to retrieve Team Drives using the legacy endpoint.","name":"GOOGLEDRIVE_LIST_TEAM_DRIVES","parameters":{"description":"Request parameters for listing Team Drives.","properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"AltEnum","type":"string"},"callback":{"description":"JSONP callback.","title":"Callback","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response.","title":"Fields","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports.","title":"Key","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"pageSize":{"description":"Maximum number of Team Drives to return per page.","maximum":100,"minimum":1,"title":"Page Size","type":"integer"},"pageToken":{"description":"Page token for Team Drives.","title":"Page Token","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"q":{"description":"Query string for searching Team Drives.","title":"Q","type":"string"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"uploadType":{"description":"Legacy upload protocol for media (e.g. 'media', 'multipart').","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. 'raw', 'multipart').","title":"Upload Protocol","type":"string"},"useDomainAdminAccess":{"description":"Issue the request as a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.","title":"Use Domain Admin Access","type":"boolean"},"xgafv":{"description":"V1 error format values.","enum":["1","2"],"title":"XgafvEnum","type":"string"}},"title":"ListTeamDrivesRequest","type":"object"}},"type":"function"},{"function":{"description":"Modifies the set of labels applied to a file. Returns a list of the labels that were added or modified. Use when you need to programmatically change labels on a Google Drive file, such as adding, updating, or removing them.","name":"GOOGLEDRIVE_MODIFY_FILE_LABELS","parameters":{"properties":{"file_id":{"description":"The ID of the file.","title":"File Id","type":"string"},"kind":{"default":"drive#modifyLabelsRequest","description":"This is always drive#modifyLabelsRequest.","title":"Kind","type":"string"},"label_modifications":{"description":"The list of modifications to apply to the labels on the file.","items":{"properties":{"fieldModifications":{"description":"The list of modifications to this label's fields.","items":{"properties":{"fieldId":{"description":"The internal field ID from the label schema (NOT the field's display name). Must be a bare alphanumeric ID. Obtain valid IDs using files.listLabels or the Drive Labels API.","examples":["kAAAAAHqPWmn9klX4RG_vA"],"title":"Field Id","type":"string"},"kind":{"default":"drive#labelFieldModification","description":"This is always drive#labelFieldModification.","title":"Kind","type":"string"},"setDateValues":{"description":"Replaces the value of a `date` field with these new values. The string must be in the RFC 3339 full-date format: YYYY-MM-DD.","examples":["2023-10-26"],"items":{"type":"string"},"title":"Set Date Values","type":"array"},"setIntegerValues":{"description":"Replaces the value of an `integer` field with these new values.","items":{"type":"string"},"title":"Set Integer Values","type":"array"},"setSelectionValues":{"description":"Replaces a `selection` field with these new values.","items":{"type":"string"},"title":"Set Selection Values","type":"array"},"setTextValues":{"description":"Sets the value of a `text` field.","items":{"type":"string"},"title":"Set Text Values","type":"array"},"setUserValues":{"description":"Replaces a `user` field with these new values. The values must be valid email addresses.","items":{"type":"string"},"title":"Set User Values","type":"array"},"unsetValues":{"description":"Unsets the values for this field.","title":"Unset Values","type":"boolean"}},"required":["fieldId"],"title":"FieldModification","type":"object"},"title":"Field Modifications","type":"array"},"kind":{"default":"drive#labelModification","description":"This is always drive#labelModification.","title":"Kind","type":"string"},"labelId":{"description":"The internal label ID (NOT the label's display name). Must be a bare alphanumeric ID without any prefix (do NOT include 'labels/'). Obtain valid IDs using files.listLabels or the Drive Labels API.","examples":["kAAAAAYXH8G2W_3a5Pl5gQ"],"title":"Label Id","type":"string"},"removeLabel":{"description":"If true, the label will be removed from the file.","title":"Remove Label","type":"boolean"}},"required":["labelId"],"title":"LabelModification","type":"object"},"title":"Label Modifications","type":"array"}},"required":["file_id","label_modifications"],"title":"ModifyFileLabelsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to move a file from one folder to another in Google Drive. To truly move (not just copy the parent), always provide both `add_parents` (destination folder ID) and `remove_parents` (source folder ID); omitting `remove_parents` leaves the file in multiple folders. Useful for reorganizing files, including newly created Google Docs/Sheets that default to Drive root.","name":"GOOGLEDRIVE_MOVE_FILE","parameters":{"properties":{"add_parents":{"description":"The ID of the single destination folder (e.g., '1FmTIJYwTENUDXOKyNJp7OmcRBvP_6DmT'). Must be a valid Google Drive folder ID consisting of alphanumeric characters, hyphens, and underscores. Folder names are not accepted.","examples":["1FmTIJYwTENUDXOKyNJp7OmcRBvP_6DmT"],"title":"Add Parents","type":"string"},"file_id":{"description":"The ID of the file to move. Must be a non-empty string.","examples":["1XyZ..."],"title":"File Id","type":"string"},"include_labels":{"description":"A comma-separated list of IDs of labels to include in the `labelInfo` part of the response.","title":"Include Labels","type":"string"},"include_permissions_for_view":{"description":"Specifies which additional view's permissions to include in the response. Only 'published' is supported.","title":"Include Permissions For View","type":"string"},"keep_revision_forever":{"description":"Whether to set the 'keepForever' field in the new head revision. This is only applicable to files with binary content in Google Drive.","title":"Keep Revision Forever","type":"boolean"},"ocr_language":{"description":"A language hint for OCR processing during image import (ISO 639-1 code).","title":"Ocr Language","type":"string"},"remove_parents":{"description":"A comma-separated list of parent folder IDs to remove the file from. Use this to specify the source folder.","examples":["folder_id_3,folder_id_4"],"title":"Remove Parents","type":"string"},"supports_all_drives":{"description":"Whether the requesting application supports both My Drives and shared drives. Set to true if moving files to or from a shared drive.","title":"Supports All Drives","type":"boolean"},"use_content_as_indexable_text":{"description":"Whether to use the uploaded content as indexable text.","title":"Use Content As Indexable Text","type":"boolean"}},"required":["file_id"],"title":"MoveFileRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Exports Google Workspace files (max 10MB) to a specified format using `mime_type`, or downloads other file types; use `GOOGLEDRIVE_DOWNLOAD_FILE` instead.","name":"GOOGLEDRIVE_PARSE_FILE","parameters":{"properties":{"file_id":{"description":"The unique ID of the file stored in Google Drive that you want to export or download.","title":"File Id","type":"string"},"mime_type":{"description":"Target MIME type for exporting Google Workspace files only. Supported exports by source type: Google Docs -> DOCX, ODT, RTF, PDF, TXT, ZIP (HTML), EPUB, MD; Google Sheets -> XLSX, ODS, PDF, ZIP (HTML), CSV, TSV; Google Slides -> PPTX, ODP, PDF, TXT, JPG, PNG, SVG; Google Drawings -> PDF, JPG, PNG, SVG; Apps Script -> JSON. If omitted, a default format is used: Docs->PDF, Sheets->XLSX, Slides->PDF, Drawings->PDF. For non-Workspace files (PDFs, images, text files, etc.), this parameter is ignored and the file is downloaded in its native format.","enum":["application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.oasis.opendocument.text","application/rtf","application/pdf","text/plain","application/zip","application/epub+zip","text/markdown","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.oasis.opendocument.spreadsheet","text/csv","text/tab-separated-values","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.oasis.opendocument.presentation","image/jpeg","image/png","image/svg+xml","application/vnd.google-apps.script+json","video/mp4"],"examples":["application/pdf","application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/csv"],"title":"MimeType","type":"string"}},"required":["file_id"],"title":"ParseFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update a permission using patch semantics. Use when you need to modify specific fields of an existing permission without affecting other fields. **Warning:** Concurrent permissions operations on the same file are not supported; only the last update is applied.","name":"GOOGLEDRIVE_PATCH_PERMISSION","parameters":{"properties":{"additional_roles":{"description":"Additional roles for this user. Only 'commenter' is currently allowed.","examples":[["commenter"]],"items":{"type":"string"},"title":"Additional Roles","type":"array"},"expiration_date":{"description":"The time at which this permission will expire (RFC 3339 date-time). Can only be set on user and group permissions. The date must be in the future and cannot be more than a year in the future.","examples":["2024-12-31T23:59:59Z"],"title":"Expiration Date","type":"string"},"file_id":{"description":"The ID for the file or shared drive.","examples":["1FT9IW4UpvEc4Ezxv8xS2jEda17MztBXzK7CMqfz-s98"],"title":"File Id","type":"string"},"permission_id":{"description":"The ID for the permission. Use 'anyone' for public link permissions, or specific permission IDs for user/group/domain permissions. You can get permission IDs by calling GOOGLEDRIVE_LIST_PERMISSIONS.","examples":["anyone","anyoneWithLink","18394857362947583"],"title":"Permission Id","type":"string"},"remove_expiration":{"description":"Whether to remove the expiration date. Set to true to make the permission permanent.","title":"Remove Expiration","type":"boolean"},"role":{"description":"Permission roles that can be granted in Google Drive.","enum":["owner","organizer","fileOrganizer","writer","reader"],"examples":["reader","writer"],"title":"PermissionRole","type":"string"},"supports_all_drives":{"description":"Whether the requesting application supports both My Drives and shared drives.","title":"Supports All Drives","type":"boolean"},"transfer_ownership":{"description":"Whether changing a role to 'owner' downgrades the current owners to writers. Does nothing if the specified role is not 'owner'. Required as an acknowledgement when transferring ownership.","title":"Transfer Ownership","type":"boolean"},"use_domain_admin_access":{"description":"Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.","title":"Use Domain Admin Access","type":"boolean"},"with_link":{"description":"Whether the link is required for this permission. Set to true for 'anyone with the link' access (not publicly discoverable), or false for publicly discoverable access.","title":"With Link","type":"boolean"}},"required":["file_id","permission_id"],"title":"PatchPermissionRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update a property on a file using PATCH semantics (v2 API). Use when you need to partially update custom key-value metadata attached to a Google Drive file.","name":"GOOGLEDRIVE_PATCH_PROPERTY","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"AltFormat","type":"string"},"callback":{"description":"JSONP callback function name.","title":"Callback","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response.","title":"Fields","type":"string"},"fileId":{"description":"The ID of the file.","examples":["19GP5DRpUcmQHBVnk39RTB57twIWVEMjO"],"title":"File Id","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"propertyKey":{"description":"The key of the property to update.","examples":["testPatchKey"],"title":"Property Key","type":"string"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"uploadType":{"description":"Legacy upload protocol for media (e.g. 'media', 'multipart').","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. 'raw', 'multipart').","title":"Upload Protocol","type":"string"},"value":{"description":"The value of this property.","examples":["updatedValue"],"title":"Value","type":"string"},"visibility":{"description":"Property visibility values.","enum":["PRIVATE","PUBLIC"],"examples":["PRIVATE","PUBLIC"],"title":"PropertyVisibility","type":"string"},"xgafv":{"description":"V1 error format values.","enum":["1","2"],"title":"XgafvFormat","type":"string"}},"required":["fileId","propertyKey"],"title":"PatchPropertyRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to start and complete a Google Drive resumable upload session. Use for files larger than ~5 MB to avoid timeouts or size-limit failures. HTTP 308 means continue the session from the correct byte offset; HTTP 410 means the session expired and a full restart with a new session is required.","name":"GOOGLEDRIVE_RESUMABLE_UPLOAD","parameters":{"description":"Request to initiate and perform a Drive resumable upload session.","properties":{"chunkSize":{"default":262144,"description":"Chunk size in bytes; must be a multiple of 256 KB.","examples":[262144],"minimum":262144,"title":"Chunk Size","type":"integer"},"file_id":{"description":"Optional file ID if updating an existing file instead of creating a new one.","title":"File Id","type":"string"},"file_to_upload":{"description":"File to upload to Google Drive via resumable upload.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"folder_to_upload_to":{"description":"Optional folder ID where NEW files should be uploaded. Only used during file creation, not updates. Will be added to metadata.parents. Must reference a valid, non-trashed folder ID; invalid or trashed IDs silently place files at root.","title":"Folder To Upload To","type":"string"},"metadata":{"additionalProperties":true,"description":"JSON metadata for the Drive File resource (e.g., {'name': 'photo.jpg', 'parents': ['folderId']}). To convert to a Google Docs MIME type, set metadata.mimeType to the target Docs type but send the real file MIME type as the upload content type — using the Docs MIME type as upload content type causes invalidContentType errors.","title":"Metadata","type":"object"},"queryParams":{"additionalProperties":false,"description":"Optional Drive query parameters.","properties":{"ignoreDefaultVisibility":{"description":"Bypass domain default visibility for the created file.","title":"Ignore Default Visibility","type":"boolean"},"includeLabels":{"description":"Comma-separated label IDs to include in labelInfo.","title":"Include Labels","type":"string"},"includePermissionsForView":{"const":"published","description":"Which additional view's permissions to include; only 'published' supported.","title":"Include Permissions For View","type":"string"},"keepRevisionForever":{"description":"Whether to set keepForever on the new head revision.","title":"Keep Revision Forever","type":"boolean"},"ocrLanguage":{"description":"ISO 639-1 code to hint OCR during image import.","title":"Ocr Language","type":"string"},"supportsAllDrives":{"description":"Whether the app supports both My Drive and shared drives.","title":"Supports All Drives","type":"boolean"},"uploadType":{"const":"resumable","default":"resumable","description":"Must be 'resumable'.","title":"Upload Type","type":"string"},"useContentAsIndexableText":{"description":"Whether to use uploaded content as indexable text.","title":"Use Content As Indexable Text","type":"boolean"}},"title":"Query Params","type":"object"}},"required":["file_to_upload"],"title":"ResumableUploadRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to stop watching resources through a specified channel. Use this when you want to stop receiving notifications for a previously established watch. Both `id` and `resourceId` must be saved from the original watch response — they cannot be retrieved after the fact.","name":"GOOGLEDRIVE_STOP_WATCH_CHANNEL","parameters":{"properties":{"address":{"description":"The address where notifications are delivered for this channel.","examples":["https://example.com/notifications"],"title":"Address","type":"string"},"channelType":{"description":"The type of delivery mechanism used for this channel.","enum":["web_hook","webhook"],"examples":["web_hook"],"title":"Channel Type","type":"string"},"expiration":{"description":"Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds.","examples":["1426325213000"],"title":"Expiration","type":"string"},"id":{"description":"The ID of the channel to stop.","examples":["01234567-89ab-cdef-0123-456789abcdef"],"title":"Id","type":"string"},"kind":{"default":"api#channel","description":"Identifies this as a notification channel used to watch for changes to a resource.","examples":["api#channel"],"title":"Kind","type":"string"},"params":{"additionalProperties":{"type":"string"},"description":"Additional parameters controlling delivery channel behavior.","examples":[{"ttl":"24"}],"title":"Params","type":"object"},"payload":{"description":"A Boolean value to indicate whether payload is wanted.","examples":[true],"title":"Payload","type":"boolean"},"resourceId":{"description":"The ID of the resource being watched.","examples":["0BwDAzcyS3R3CUlRMW0xVExQNk0"],"title":"Resource Id","type":"string"},"resourceUri":{"description":"A version-specific identifier for the watched resource.","examples":["https://www.googleapis.com/drive/v3/files/0BwDAzcyS3R3CUlRMW0xVExQNk0"],"title":"Resource Uri","type":"string"},"token":{"description":"An arbitrary string delivered to the target address with each notification delivered over this channel.","examples":["clientToken#0123456789"],"title":"Token","type":"string"}},"required":["id","resourceId"],"title":"StopWatchChannelRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to move a file or folder to trash (soft delete). Use when you need to delete a file but want to allow recovery via UNTRASH_FILE. This action is distinct from permanent deletion and provides a safer cleanup workflow.","name":"GOOGLEDRIVE_TRASH_FILE","parameters":{"properties":{"fields":{"description":"Comma-separated list of fields to include in the response. Use to limit the amount of data returned. If omitted, returns basic file metadata.","examples":["id,name,trashed,trashedTime"],"title":"Fields","type":"string"},"file_id":{"description":"The ID of the file to trash.","examples":["1aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789"],"title":"File Id","type":"string"},"supportsAllDrives":{"default":true,"description":"Whether the requesting application supports both My Drives and shared drives. Defaults to true.","examples":[true],"title":"Supports All Drives","type":"boolean"}},"required":["file_id"],"title":"TrashFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to unhide a shared drive. Use when you need to restore a shared drive to the default view.","name":"GOOGLEDRIVE_UNHIDE_DRIVE","parameters":{"properties":{"driveId":{"description":"The ID of the shared drive.","examples":["0AEMV2k3MjA19Uk9PVA"],"title":"Drive Id","type":"string"}},"required":["driveId"],"title":"UnhideDriveRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to restore a file from the trash. Use when you need to recover a deleted file. This action updates the file's metadata to set the 'trashed' property to false. Only works while the file remains in trash — recovery is impossible after trash is emptied via GOOGLEDRIVE_EMPTY_TRASH or auto-purged by policy.","name":"GOOGLEDRIVE_UNTRASH_FILE","parameters":{"properties":{"file_id":{"description":"The ID of the file to untrash.","examples":["1aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789"],"title":"File Id","type":"string"},"supportsAllDrives":{"description":"Whether the requesting application supports both My Drives and shared drives.","examples":[true],"title":"Supports All Drives","type":"boolean"}},"required":["file_id"],"title":"UntrashFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update an existing comment on a Google Drive file. Use when you need to change the content of a comment. NOTE: The 'resolved' field is read-only in the Google Drive API. To resolve or reopen a comment, use CREATE_REPLY with action='resolve' or action='reopen'.","name":"GOOGLEDRIVE_UPDATE_COMMENT","parameters":{"properties":{"comment_id":{"description":"The ID of the comment to update.","examples":["11a22b33c44d55e66f77g88h99i00j"],"title":"Comment Id","type":"string"},"content":{"description":"The plain text content of the comment. This field is used to update the comment's text. If not provided, the existing content will be retained unless 'resolved' is being updated.","examples":["This is the updated comment content."],"title":"Content","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response. The API documentation states this is required. If not specified by the user, this action defaults to '*' to retrieve all fields, ensuring the API requirement is met. Example: 'id,content,resolved'.","examples":["id,content,resolved"],"title":"Fields","type":"string"},"file_id":{"description":"The ID of the file.","examples":["1a2b3c4d5e6f7g8h9i0j"],"title":"File Id","type":"string"},"resolved":{"description":"NOTE: The 'resolved' field is READ-ONLY in the Google Drive API. To resolve or reopen a comment, use the CREATE_REPLY action with action='resolve' or action='reopen'. This parameter is kept for backwards compatibility but will be silently ignored by the API.","examples":[true],"title":"Resolved","type":"boolean"}},"required":["file_id","comment_id"],"title":"UpdateCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update the metadata for a shared drive. Use when you need to modify properties like the name, theme, background image, or restrictions of a shared drive.","name":"GOOGLEDRIVE_UPDATE_DRIVE","parameters":{"properties":{"backgroundImageFile":{"additionalProperties":false,"description":"An image file and cropping parameters for the shared drive's background. Cannot be set if themeId is set.","properties":{"id":{"description":"The ID of an image file in Google Drive to use for the background image.","title":"Id","type":"string"},"width":{"description":"The width of the cropped image (0.0 to 1.0). The height is computed (aspect ratio 80:9).","maximum":1,"minimum":0,"title":"Width","type":"number"},"xCoordinate":{"description":"The X coordinate of the upper left corner of the cropping area in the background image (0.0 to 1.0).","maximum":1,"minimum":0,"title":"X Coordinate","type":"number"},"yCoordinate":{"description":"The Y coordinate of the upper left corner of the cropping area in the background image (0.0 to 1.0).","maximum":1,"minimum":0,"title":"Y Coordinate","type":"number"}},"required":["id","xCoordinate","yCoordinate","width"],"title":"BackgroundImageFile","type":"object"},"colorRgb":{"description":"The color of this shared drive as an RGB hex string (e.g., \"#FF0000\"). Cannot be set if themeId is set.","pattern":"^#[0-9a-fA-F]{6}$","title":"Color Rgb","type":"string"},"driveId":{"description":"The ID of the shared drive to update.","title":"Drive Id","type":"string"},"hidden":{"description":"Whether the shared drive is hidden from the default view.","title":"Hidden","type":"boolean"},"name":{"description":"The new name for the shared drive.","title":"Name","type":"string"},"restrictions":{"additionalProperties":false,"description":"A set of restrictions to apply to the shared drive.","properties":{"adminManagedRestrictions":{"description":"If true, requires administrative privileges to modify restrictions.","title":"Admin Managed Restrictions","type":"boolean"},"copyRequiresWriterPermission":{"description":"If true, disables copy, print, or download options for readers and commenters.","title":"Copy Requires Writer Permission","type":"boolean"},"domainUsersOnly":{"description":"If true, restricts access to users of the domain to which the shared drive belongs.","title":"Domain Users Only","type":"boolean"},"driveMembersOnly":{"description":"If true, restricts access to items inside the shared drive to its members.","title":"Drive Members Only","type":"boolean"},"sharingFoldersRequiresOrganizerPermission":{"description":"If true, only users with the organizer role can share folders. If false, users with either the organizer or file organizer role can share folders.","title":"Sharing Folders Requires Organizer Permission","type":"boolean"}},"title":"DriveRestrictions","type":"object"},"themeId":{"description":"The ID of a theme to apply to the shared drive. Cannot be set if colorRgb or backgroundImageFile are set.","title":"Theme Id","type":"string"},"useDomainAdminAccess":{"description":"If set to true, the request is issued as a domain administrator.","title":"Use Domain Admin Access","type":"boolean"}},"required":["driveId"],"title":"UpdateDriveRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update file metadata using the Drive API v2 PATCH method. Use when you need to modify file properties like title, description, or labels using patch semantics.","name":"GOOGLEDRIVE_UPDATE_FILE_METADATA_PATCH","parameters":{"properties":{"addParents":{"description":"Comma-separated list of parent IDs to add.","title":"Add Parents","type":"string"},"description":{"description":"A short description of the file.","title":"Description","type":"string"},"fileId":{"description":"The ID of the file to update.","examples":["1FT9IW4UpvEc4Ezxv8xS2jEda17MztBXzK7CMqfz-s98"],"title":"File Id","type":"string"},"includeLabels":{"description":"A comma-separated list of IDs of labels to include in the labelInfo part of the response.","title":"Include Labels","type":"string"},"includePermissionsForView":{"description":"Specifies which additional view's permissions to include in the response. Only 'published' is supported.","title":"Include Permissions For View","type":"string"},"indexableText":{"additionalProperties":true,"description":"Indexable text attributes for the file (can be used to improve fulltext queries).","title":"Indexable Text","type":"object"},"labels":{"additionalProperties":true,"description":"A group of labels for the file. For example: {'starred': true, 'trashed': false, 'restricted': false, 'viewed': true}.","title":"Labels","type":"object"},"mimeType":{"description":"The MIME type of the file.","title":"Mime Type","type":"string"},"modifiedDate":{"description":"Last time this file was modified by anyone (RFC 3339 date-time). Requires setModifiedDate=true.","title":"Modified Date","type":"string"},"newRevision":{"description":"Whether a blob upload should create a new revision. If not set, a new revision is created.","title":"New Revision","type":"boolean"},"ocr":{"description":"Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.","title":"Ocr","type":"boolean"},"ocrLanguage":{"description":"If ocr is true, hints at the language to use. Valid values are BCP 47 codes.","title":"Ocr Language","type":"string"},"pinned":{"description":"Whether to pin the new revision. A file can have a maximum of 200 pinned revisions.","title":"Pinned","type":"boolean"},"properties":{"description":"The list of properties.","items":{"additionalProperties":true,"type":"object"},"title":"Properties","type":"array"},"removeParents":{"description":"Comma-separated list of parent IDs to remove.","title":"Remove Parents","type":"string"},"setModifiedDate":{"description":"Whether to set the modified date using the value supplied in the request body.","title":"Set Modified Date","type":"boolean"},"supportsAllDrives":{"default":true,"description":"Whether the requesting application supports both My Drives and shared drives. Defaults to true.","title":"Supports All Drives","type":"boolean"},"timedTextLanguage":{"description":"The language of the timed text.","title":"Timed Text Language","type":"string"},"timedTextTrackName":{"description":"The timed text track name.","title":"Timed Text Track Name","type":"string"},"title":{"description":"The title of the file. Used to change the name of the file.","title":"Title","type":"string"},"updateViewedDate":{"description":"Whether to update the view date after successfully updating the file.","title":"Update Viewed Date","type":"boolean"},"useContentAsIndexableText":{"description":"Whether to use the content as indexable text.","title":"Use Content As Indexable Text","type":"boolean"},"writersCanShare":{"description":"Whether writers can share the document with other users.","title":"Writers Can Share","type":"boolean"}},"required":["fileId"],"title":"UpdateFileMetadataPatchRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update a property on a file using Google Drive API v2. Use when you need to modify an existing custom property attached to a file.","name":"GOOGLEDRIVE_UPDATE_FILE_PROPERTY","parameters":{"properties":{"access_token":{"description":"OAuth access token.","title":"Access Token","type":"string"},"alt":{"description":"Data format for response.","enum":["json","media","proto"],"title":"AltFormat","type":"string"},"callback":{"description":"JSONP callback function name.","title":"Callback","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response.","title":"Fields","type":"string"},"fileId":{"description":"The ID of the file.","examples":["1FT9IW4UpvEc4Ezxv8xS2jEda17MztBXzK7CMqfz-s98"],"title":"File Id","type":"string"},"key":{"description":"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.","title":"Key","type":"string"},"oauth_token":{"description":"OAuth 2.0 token for the current user.","title":"Oauth Token","type":"string"},"prettyPrint":{"description":"Returns response with indentations and line breaks.","title":"Pretty Print","type":"boolean"},"propertyKey":{"description":"The key of the property.","examples":["test_property"],"title":"Property Key","type":"string"},"property_value":{"description":"The value of this property.","examples":["updated_test_value"],"title":"Property Value","type":"string"},"property_visibility":{"description":"Visibility options for the property.","enum":["PRIVATE","PUBLIC"],"title":"PropertyVisibility","type":"string"},"quotaUser":{"description":"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.","title":"Quota User","type":"string"},"uploadType":{"description":"Legacy upload protocol for media (e.g. 'media', 'multipart').","title":"Upload Type","type":"string"},"upload_protocol":{"description":"Upload protocol for media (e.g. 'raw', 'multipart').","title":"Upload Protocol","type":"string"},"visibility":{"description":"Visibility options for the property.","enum":["PRIVATE","PUBLIC"],"title":"PropertyVisibility","type":"string"},"xgafv":{"description":"V1 error format values.","enum":["1","2"],"title":"XgafvFormat","type":"string"}},"required":["fileId","propertyKey"],"title":"UpdatePropertyRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates file metadata. Uses PATCH semantics (partial update) as per Google Drive API v3 — only explicitly provided fields are updated, so omit fields you do not intend to overwrite. Use this tool to modify attributes of an existing file like its name, description, or parent folders. To move a file, supply add_parents and remove_parents together; omitting remove_parents creates multiple parents, omitting add_parents can orphan the file. Bulk updates may trigger 429 Too Many Requests; apply exponential backoff. Note: supports metadata updates only; file content updates are not yet implemented.","name":"GOOGLEDRIVE_UPDATE_FILE_PUT","parameters":{"properties":{"add_parents":{"description":"Comma-separated list of folder IDs (not folder names) to add as parents. Folder IDs are alphanumeric strings typically 20+ characters long (e.g., '1A2B3C4D5E6F7G8H9I0J'). Folder names will not work and will cause a 'Parent folder not found' error. Moving a file requires pairing with remove_parents (source folder ID); omitting remove_parents results in multiple parents. Reparenting to a shared folder changes collaborator access to that folder's permissions.","examples":["1A2B3C4D5E6F7G8H9I0J","1A2B3C4D5E6F7G8H9I0J,1B3C4D5E6F7G8H9I0J1K"],"pattern":"^[a-zA-Z0-9_-]{15,}(,[a-zA-Z0-9_-]{15,})*$","title":"Add Parents","type":"string"},"description":{"description":"A short description of the file.","examples":["Updated version of the project proposal."],"title":"Description","type":"string"},"fileId":{"description":"The ID of the file to update.","examples":["1XyZ_6AbCdEfGhIjKlMnOpQrStUvWxYz0"],"title":"File Id","type":"string"},"keep_revision_forever":{"description":"Whether to set this revision of the file to be kept forever. This is only applicable to files with binary content in Google Drive. Only 200 revisions for the file can be kept forever. If the limit is reached, try deleting pinned revisions.","title":"Keep Revision Forever","type":"boolean"},"mime_type":{"description":"The MIME type of the file. Google Drive will attempt to automatically detect an appropriate value from uploaded content if no value is provided. The value cannot be changed unless a new revision is uploaded.","examples":["application/vnd.google-apps.document"],"title":"Mime Type","type":"string"},"name":{"description":"The name of the file. Google Drive does not enforce name uniqueness within a folder; duplicate names are allowed and can cause ambiguous results when searching by name.","examples":["My Updated Document"],"title":"Name","type":"string"},"ocr_language":{"description":"A language hint for OCR processing during image import (ISO 639-1 code).","examples":["en"],"title":"Ocr Language","type":"string"},"remove_parents":{"description":"Comma-separated list of folder IDs (not folder names) to remove as parents. Folder IDs are alphanumeric strings typically 20+ characters long (e.g., '1A2B3C4D5E6F7G8H9I0J'). Folder names will not work and will cause a 'Parent folder not found' error.","examples":["1A2B3C4D5E6F7G8H9I0J","1A2B3C4D5E6F7G8H9I0J,1B3C4D5E6F7G8H9I0J1K"],"pattern":"^[a-zA-Z0-9_-]{15,}(,[a-zA-Z0-9_-]{15,})*$","title":"Remove Parents","type":"string"},"starred":{"description":"Whether the user has starred the file.","title":"Starred","type":"boolean"},"supports_all_drives":{"default":true,"description":"Whether the requesting application supports both My Drives and shared drives. Defaults to true to ensure compatibility with shared drive files.","title":"Supports All Drives","type":"boolean"},"use_domain_admin_access":{"description":"Whether the requesting application is using domain-wide delegation to access content belonging to a user in a different domain. This is only applicable to files with binary content in Google Drive.","title":"Use Domain Admin Access","type":"boolean"},"viewers_can_copy_content":{"description":"Whether viewers are prevented from copying content of the file.","title":"Viewers Can Copy Content","type":"boolean"},"writers_can_share":{"description":"Whether writers can share the document with other users.","title":"Writers Can Share","type":"boolean"}},"required":["fileId"],"title":"UpdateFilePutRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates ONLY the metadata properties of a specific file revision (keepForever, published, publishAuto, publishedOutsideDomain). IMPORTANT: This action does NOT update file content. To update file content, use EDIT_FILE or UPDATE_FILE_PUT instead. This action requires BOTH file_id AND revision_id parameters. Use LIST_REVISIONS to get available revision IDs for a file. Valid parameters: file_id (required), revision_id (required), keep_forever, published, publish_auto, published_outside_domain. Invalid parameters (use other actions): file_contents, mime_type, content, name - these are NOT supported by this action.","name":"GOOGLEDRIVE_UPDATE_FILE_REVISION_METADATA","parameters":{"properties":{"file_id":{"description":"Required. The ID of the file whose revision metadata you want to update. Use LIST_FILES or FIND_FILE to get the file ID.","examples":["1aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789"],"title":"File Id","type":"string"},"keep_forever":{"description":"Whether to keep this revision forever, even if it is no longer the head revision. If not set, the revision will be automatically purged 30 days after newer content is uploaded. This can be set on a maximum of 200 revisions for a file. This field is only applicable to files with binary content in Drive.","title":"Keep Forever","type":"boolean"},"publishAuto":{"description":"Whether subsequent revisions will be automatically republished. This is only applicable to Docs Editors files.","title":"Publish Auto","type":"boolean"},"published":{"description":"Whether this revision is published. This is only applicable to Docs Editors files.","title":"Published","type":"boolean"},"publishedOutsideDomain":{"description":"Whether this revision is published outside the domain. This is only applicable to Docs Editors files.","title":"Published Outside Domain","type":"boolean"},"revision_id":{"description":"Required. The ID of the revision to update. Use LIST_REVISIONS to get available revision IDs for a file.","examples":["1"],"title":"Revision Id","type":"string"}},"required":["file_id","revision_id"],"title":"UpdateFileRevisionMetadataRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update a permission with patch semantics. Use when you need to modify an existing permission for a file or shared drive. Inherited or domain-managed permissions may not be editable; verify editability with GOOGLEDRIVE_LIST_PERMISSIONS before updating.","name":"GOOGLEDRIVE_UPDATE_PERMISSION","parameters":{"properties":{"enforceExpansiveAccess":{"default":false,"description":"Whether the request should enforce expansive access rules. This field is deprecated, it is recommended to use `permissionDetails` instead.","title":"Enforce Expansive Access","type":"boolean"},"fileId":{"description":"The ID of the file or shared drive.","examples":["1234567890abcdefghijklmnopqrstuvwxyz"],"title":"File Id","type":"string"},"permission":{"additionalProperties":false,"description":"The permission resource to update. Only 'role' and 'expirationTime' can be updated. Role changes take effect immediately and can be difficult to reverse; confirm intent before applying.","properties":{"expirationTime":{"description":"The time at which this permission will expire (RFC 3339 date-time).","format":"date-time","title":"Expiration Time","type":"string"},"role":{"description":"Permission roles that can be granted in Google Drive.","enum":["owner","organizer","fileOrganizer","writer","commenter","reader"],"examples":["reader","writer","commenter"],"title":"PermissionRole","type":"string"}},"title":"Permission","type":"object"},"permissionId":{"description":"The ID of the permission. For anyone-type permissions, use 'anyone' as the permission ID.","examples":["01234567890123456789","anyone"],"title":"Permission Id","type":"string"},"removeExpiration":{"default":false,"description":"Whether to remove the expiration date.","title":"Remove Expiration","type":"boolean"},"supportsAllDrives":{"default":false,"description":"Whether the requesting application supports both My Drives and shared drives. Must be set to true when operating on shared drives; omitting this causes the request to fail.","title":"Supports All Drives","type":"boolean"},"transferOwnership":{"default":false,"description":"Whether to transfer ownership to the specified user and downgrade the current owner to a writer. This parameter is required as an acknowledgement of the side effect when set to true.","title":"Transfer Ownership","type":"boolean"},"useDomainAdminAccess":{"default":false,"description":"Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.","title":"Use Domain Admin Access","type":"boolean"}},"required":["fileId","permissionId","permission"],"title":"UpdatePermissionRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update a reply to a comment on a Google Drive file. Use when you need to modify the content of an existing reply.","name":"GOOGLEDRIVE_UPDATE_REPLY","parameters":{"properties":{"comment_id":{"description":"The ID of the comment.","examples":["AAAAAAMAAAAA"],"title":"Comment Id","type":"string"},"content":{"description":"The new plain text content of the reply.","examples":["This is an updated reply."],"title":"Content","type":"string"},"fields":{"description":"Selector specifying which fields to include in a partial response. If not provided, defaults to '*' to return all fields.","examples":["id,content","*"],"title":"Fields","type":"string"},"file_id":{"description":"The ID of the file.","examples":["1ZdR3L3Kek7szY1j11SQZ9A_00up1j3aA"],"title":"File Id","type":"string"},"reply_id":{"description":"The ID of the reply.","examples":["ANmBhkFXXXXX"],"title":"Reply Id","type":"string"}},"required":["file_id","comment_id","reply_id","content"],"title":"UpdateReplyRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update a Team Drive's metadata. Deprecated: Use the drives.update endpoint instead. Use when you need to modify Team Drive properties.","name":"GOOGLEDRIVE_UPDATE_TEAM_DRIVE","parameters":{"properties":{"backgroundImageFile":{"additionalProperties":false,"description":"An image file and cropping parameters from which a background image for this Team Drive is set. This is a write only field; it can only be set on drive.teamdrives.update requests that don't set themeId.","properties":{"id":{"description":"The ID of an image file in Drive to use for the background image.","title":"Id","type":"string"},"width":{"description":"The width of the cropped image in the closed range of 0 to 1.","maximum":1,"minimum":0,"title":"Width","type":"number"},"xCoordinate":{"description":"The X coordinate of the upper left corner of the cropping area in the background image (0 to 1).","maximum":1,"minimum":0,"title":"X Coordinate","type":"number"},"yCoordinate":{"description":"The Y coordinate of the upper left corner of the cropping area in the background image (0 to 1).","maximum":1,"minimum":0,"title":"Y Coordinate","type":"number"}},"required":["id"],"title":"BackgroundImageFile","type":"object"},"colorRgb":{"description":"The color of this Team Drive as an RGB hex string. It can only be set on a drive.teamdrives.update request that does not set themeId.","title":"Color Rgb","type":"string"},"name":{"description":"The name of this Team Drive.","examples":["Bug Reproduce Test Drive"],"title":"Name","type":"string"},"restrictions":{"additionalProperties":false,"description":"A set of restrictions that apply to this Team Drive or items inside this Team Drive.","properties":{"adminManagedRestrictions":{"description":"Whether administrative privileges on this Team Drive are required to modify restrictions.","title":"Admin Managed Restrictions","type":"boolean"},"copyRequiresWriterPermission":{"description":"Whether the options to copy, print, or download files inside this Team Drive should be disabled for readers and commenters.","title":"Copy Requires Writer Permission","type":"boolean"},"domainUsersOnly":{"description":"Whether access to this Team Drive and items inside this Team Drive is restricted to users of the domain.","title":"Domain Users Only","type":"boolean"},"sharingFoldersRequiresOrganizerPermission":{"description":"If true, only users with the organizer role can share folders. If false, users with either the organizer role or the file organizer role can share folders.","title":"Sharing Folders Requires Organizer Permission","type":"boolean"},"teamMembersOnly":{"description":"Whether access to items inside this Team Drive is restricted to members of this Team Drive.","title":"Team Members Only","type":"boolean"}},"title":"TeamDriveRestrictions","type":"object"},"teamDriveId":{"description":"The ID of the Team Drive to update.","examples":["0AMndV9-YuXjwUk9PVA"],"title":"Team Drive Id","type":"string"},"themeId":{"description":"The ID of the theme from which the background image and color will be set. This is a write-only field; it can only be set on requests that don't set colorRgb or backgroundImageFile.","title":"Theme Id","type":"string"},"useDomainAdminAccess":{"description":"Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.","title":"Use Domain Admin Access","type":"boolean"}},"required":["teamDriveId"],"title":"UpdateTeamDriveRequest","type":"object"}},"type":"function"},{"function":{"description":"Uploads a file (max 5MB) to Google Drive, placing it in the specified folder or root if no valid folder ID is provided. Always creates a new file (never updates existing); use GOOGLEDRIVE_EDIT_FILE to update with a stable file_id. Uploaded files are private by default; configure sharing via GOOGLEDRIVE_ADD_FILE_SHARING_PREFERENCE.","name":"GOOGLEDRIVE_UPLOAD_FILE","parameters":{"properties":{"file_to_upload":{"description":"File to upload to Google Drive (max 5MB). Must be a dict with fields: `name` (sanitized filename, no slashes or control characters), `mimetype` (accurate MIME type, e.g. `application/pdf`; incorrect values cause Drive to convert or misrender the file), and `s3key` (path from a previously staged Composio object — not an s3url, not a local path, not a fabricated key). When chaining with TEXT_TO_PDF_CONVERT_TEXT_TO_PDF, pass the returned `s3key` field, not `s3url`.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"folder_to_upload_to":{"description":"Optional ID of the target Google Drive folder; can be obtained using 'Find Folder' or similar actions. Invalid or missing IDs silently fall back to Drive root with no error — resolve the correct folder ID first using GOOGLEDRIVE_FIND_FILE.","examples":["1duXYCvYC5tIp5B_B1HWLq8LyDYXfMhPU"],"title":"Folder To Upload To","type":"string"}},"required":["file_to_upload"],"title":"UploadFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to fetch a file from a provided URL server-side and upload it into Google Drive. Use when you need to reliably persist externally hosted files into Drive without client-side downloads or temporary storage.","name":"GOOGLEDRIVE_UPLOAD_FROM_URL","parameters":{"properties":{"mime_type":{"description":"Target MIME type for the file in Google Drive. If not specified, Drive auto-detects from content. Google Workspace MIME types (application/vnd.google-apps.*) trigger automatic conversion from compatible source formats:\n- application/vnd.google-apps.document (Google Docs): converts from Microsoft Word (.docx: application/vnd.openxmlformats-officedocument.wordprocessingml.document), OpenDocument Text (.odt: application/vnd.oasis.opendocument.text), HTML (text/html, application/xhtml+xml), RTF (application/rtf, text/rtf), plain text (text/plain), PDFs (application/pdf), and images (image/jpeg, image/png, image/gif, image/bmp) using OCR (Optical Character Recognition) to extract text\n- application/vnd.google-apps.spreadsheet (Google Sheets): converts from Microsoft Excel (.xlsx: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet), OpenDocument Spreadsheet (.ods: application/vnd.oasis.opendocument.spreadsheet), CSV (text/csv), TSV (text/tab-separated-values), plain text (text/plain)\n- application/vnd.google-apps.presentation (Google Slides): converts from Microsoft PowerPoint (.pptx: application/vnd.openxmlformats-officedocument.presentationml.presentation), OpenDocument Presentation (.odp: application/vnd.oasis.opendocument.presentation)\nConversion requires the source content to be in a compatible format. Incompatible formats (e.g., JSON, video files) will cause upload errors.","examples":["application/pdf","image/png","text/csv","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.google-apps.spreadsheet","application/vnd.google-apps.document"],"title":"Mime Type","type":"string"},"name":{"description":"Name for the file in Google Drive, including extension (e.g., 'report.pdf', 'image.png').","examples":["report.pdf","presentation.pptx","data.csv"],"title":"Name","type":"string"},"parent_folder_id":{"description":"ID of the parent folder in Google Drive. If not specified, the file will be uploaded to the root of My Drive.","examples":["1aBcDeFgHiJkLmNoPqRsTuVwXyZ"],"title":"Parent Folder Id","type":"string"},"source_headers":{"additionalProperties":{"type":"string"},"description":"Optional HTTP headers to include when downloading from source_url. Use for authentication tokens, signed URLs, or CDN-specific headers.","examples":[{"Authorization":"Bearer token123"},{"X-Custom-Header":"value"}],"title":"Source Headers","type":"object"},"source_url":{"description":"URL of the file to download and upload to Google Drive. Must be a publicly accessible URL or include necessary authentication in source_headers.","examples":["https://example.com/document.pdf","https://cdn.example.com/image.png"],"title":"Source Url","type":"string"},"supports_all_drives":{"default":true,"description":"Whether the request supports both My Drives and shared drives. Defaults to true for broader compatibility.","title":"Supports All Drives","type":"boolean"},"verify_ssl":{"default":true,"description":"Whether to verify SSL certificates when downloading from HTTPS URLs. Set to false to bypass SSL verification for URLs with certificate issues (expired certificates, hostname mismatches, self-signed certificates). Only disable for trusted sources.","title":"Verify Ssl","type":"boolean"}},"required":["source_url","name"],"title":"UploadFromUrlRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update file content in Google Drive by uploading new binary content. Use when you need to replace the contents of an existing file with new file data.","name":"GOOGLEDRIVE_UPLOAD_UPDATE_FILE","parameters":{"properties":{"addParents":{"description":"Comma-separated list of parent folder IDs to add.","examples":["1A2B3C4D5E6F7G8H9I0J"],"title":"Add Parents","type":"string"},"fileId":{"description":"The ID of the file to update with new content.","examples":["1iau-j_ezb2Vcx1tZDMDdfpqlzxVzlscg"],"title":"File Id","type":"string"},"file_to_upload":{"description":"The file content to upload.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"keepRevisionForever":{"description":"Whether to set the 'keepForever' field in the new head revision.","title":"Keep Revision Forever","type":"boolean"},"ocrLanguage":{"description":"Language hint for OCR processing (ISO 639-1 code, e.g., 'en').","examples":["en","es","fr"],"title":"Ocr Language","type":"string"},"removeParents":{"description":"Comma-separated list of parent folder IDs to remove.","examples":["1A2B3C4D5E6F7G8H9I0J"],"title":"Remove Parents","type":"string"},"supportsAllDrives":{"default":true,"description":"Whether the app supports both My Drives and shared drives. Defaults to true.","title":"Supports All Drives","type":"boolean"},"uploadType":{"default":"media","description":"The type of upload request. 'media' for simple upload (content only), 'multipart' for metadata + content, 'resumable' for large files.","examples":["media","multipart","resumable"],"title":"Upload Type","type":"string"},"useContentAsIndexableText":{"description":"Whether to use the uploaded content as indexable text for search.","title":"Use Content As Indexable Text","type":"boolean"}},"required":["fileId","file_to_upload"],"title":"UploadUpdateFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to subscribe to changes for a user or shared drive in Google Drive. Use when you need to monitor a Google Drive for modifications and receive notifications at a specified webhook URL. Notifications may be batched rather than per-change; design handlers to be idempotent and fetch all changes since the last known page_token on each notification.","name":"GOOGLEDRIVE_WATCH_CHANGES","parameters":{"properties":{"address":{"description":"The URL where notifications are to be delivered. Must be a publicly reachable HTTPS URL with a valid SSL certificate; HTTP, localhost, and private network endpoints are rejected by the API.","examples":["https://example.com/notifications"],"title":"Address","type":"string"},"drive_id":{"description":"The shared drive from which changes will be returned. If specified, change IDs will be specific to the shared drive.","examples":["0ABqLz1XZc1Z9Uk9PVA"],"title":"Drive Id","type":"string"},"expiration":{"description":"Timestamp in milliseconds since the epoch for when the channel should expire. If not set, channel may not expire or have a default expiration. Channels are invalidated after expiry; re-establish the watch with a new channel before or after expiration to avoid missed changes.","examples":[1678886400000],"title":"Expiration","type":"integer"},"id":{"description":"A unique string that identifies this channel. UUIDs are recommended. Must be unique per active channel; reusing an ID can cause missed, delayed, or duplicate notifications.","examples":["your-unique-channel-id-123"],"title":"Id","type":"string"},"include_corpus_removals":{"description":"Whether changes should include the file resource if the file is still accessible by the user at the time of the request, even when a file was removed from the list of changes.","title":"Include Corpus Removals","type":"boolean"},"include_items_from_all_drives":{"description":"Whether both My Drive and shared drive items should be included in results.","title":"Include Items From All Drives","type":"boolean"},"include_labels":{"description":"A comma-separated list of IDs of labels to include in the labelInfo part of the response.","examples":["labelId1,labelId2"],"title":"Include Labels","type":"string"},"include_permissions_for_view":{"const":"published","description":"Specifies which additional view's permissions to include in the response.","examples":["published"],"title":"Include Permissions For View","type":"string"},"include_removed":{"default":true,"description":"Whether to include changes indicating that items have been removed from the list of changes (e.g., by deletion or loss of access).","title":"Include Removed","type":"boolean"},"page_size":{"default":100,"description":"The maximum number of changes to return per page.","maximum":1000,"minimum":1,"title":"Page Size","type":"integer"},"page_token":{"description":"The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response or to the response from the getStartPageToken method. Persist this token per channel so change processing can resume correctly after restarts or interruptions.","title":"Page Token","type":"string"},"params":{"additionalProperties":false,"description":"Optional parameters for the notification channel.\nExample: {\"ttl\": \"3600\"} for a 1-hour time-to-live (actual support depends on Google API).","properties":{"additional_properties":{"additionalProperties":{"type":"string"},"description":"Key-value pairs for additional parameters.","title":"Additional Properties","type":"object"}},"title":"ChannelParams","type":"object"},"restrict_to_my_drive":{"default":false,"description":"Whether to restrict the results to changes inside the My Drive hierarchy. This omits changes to files like those in the Application Data folder or shared files not added to My Drive.","title":"Restrict To My Drive","type":"boolean"},"spaces":{"default":"drive","description":"A comma-separated list of spaces to query within the corpora. Supported values are 'drive' and 'appDataFolder'.","examples":["drive","appDataFolder","drive,appDataFolder"],"title":"Spaces","type":"string"},"supports_all_drives":{"default":false,"description":"Whether the requesting application supports both My Drives and shared drives. Recommended to set to true if driveId is used or if interactions with shared drives are expected.","title":"Supports All Drives","type":"boolean"},"token":{"description":"An arbitrary string that will be delivered with each notification. Can be used for verification.","examples":["optional-arbitrary-string-for-verification"],"title":"Token","type":"string"},"type":{"const":"web_hook","description":"The type of delivery mechanism for notifications.","examples":["web_hook"],"title":"Type","type":"string"}},"required":["id","type","address"],"title":"WatchChangesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to subscribe to push notifications for changes to a specific file. Use when you need to monitor a file for modifications and receive real-time notifications at a webhook URL.","name":"GOOGLEDRIVE_WATCH_FILE","parameters":{"properties":{"acknowledgeAbuse":{"description":"Whether the user is acknowledging the risk of downloading known malware or other abusive files. Only applicable to file owner/organizer.","title":"Acknowledge Abuse","type":"boolean"},"address":{"description":"The HTTPS address where notifications are delivered for this channel. Must have a valid SSL certificate.","examples":["https://webhook.site/unique-id-here"],"title":"Address","type":"string"},"expiration":{"description":"Date and time of notification channel expiration as Unix timestamp in milliseconds. Default: 3600 seconds, max: 86400 seconds for files.","examples":[1678886400000],"title":"Expiration","type":"integer"},"fileId":{"description":"The ID of the file to watch for changes.","examples":["1xAHUNyfubIa8K07EVv9_5Hc5EsgdIhUx-QNcrGJ_yQk"],"title":"File Id","type":"string"},"id":{"description":"A UUID or similar unique string that identifies this notification channel (max 64 characters).","examples":["01234567-89ab-cdef-0123456789ab"],"title":"Id","type":"string"},"includeLabels":{"description":"A comma-separated list of IDs of labels to include in the labelInfo part of the response.","title":"Include Labels","type":"string"},"includePermissionsForView":{"const":"published","description":"Specifies which additional view's permissions to include in the response.","title":"Include Permissions For View","type":"string"},"params":{"additionalProperties":{"type":"string"},"description":"Additional parameters controlling delivery channel behavior.","examples":[{"ttl":"3600"}],"title":"Params","type":"object"},"payload":{"description":"Whether payload data should be included in notifications.","examples":[true],"title":"Payload","type":"boolean"},"supportsAllDrives":{"description":"Whether the requesting application supports both My Drives and shared drives.","title":"Supports All Drives","type":"boolean"},"supportsTeamDrives":{"description":"Deprecated. Use supportsAllDrives instead.","title":"Supports Team Drives","type":"boolean"},"token":{"description":"An arbitrary string delivered to the target address with each notification for verification (max 256 characters).","examples":["my-secret-token-12345"],"title":"Token","type":"string"},"type":{"description":"The type of delivery mechanism used for this channel.","enum":["web_hook","webhook"],"examples":["web_hook"],"title":"Type","type":"string"}},"required":["fileId","id","type","address"],"title":"WatchFileRequest","type":"object"}},"type":"function"}]}}} \ No newline at end of file diff --git a/tests/fixtures/composio_googlesheets.json b/tests/fixtures/composio_googlesheets.json new file mode 100644 index 000000000..fbc90b1ca --- /dev/null +++ b/tests/fixtures/composio_googlesheets.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"logs":["composio: 48 tool(s) listed"],"result":{"tools":[{"function":{"description":"Adds a new sheet to a spreadsheet. Supports three sheet types: GRID, OBJECT, and DATA_SOURCE. SHEET TYPES: - GRID (default): Standard spreadsheet with rows/columns. Use properties to set dimensions, tab color, etc. - OBJECT: Sheet containing a chart. Requires objectSheetConfig with chartSpec (basicChart or pieChart). - DATA_SOURCE: Sheet connected to BigQuery. Requires dataSourceConfig with bigQuery spec and bigquery.readonly OAuth scope. OTHER NOTES: - Sheet names must be unique; use forceUnique=true to auto-append suffix (_2, _3) if name exists - For tab colors, use EITHER rgbColor OR themeColor, not both - Avoid 'index' when creating sheets in parallel (causes errors) - OBJECT sheets are created via addChart with position.newSheet=true - DATA_SOURCE sheets require bigquery.readonly OAuth scope Use cases: Add standard grid sheet, create chart on dedicated sheet, connect to BigQuery data source.","name":"GOOGLESHEETS_ADD_SHEET","parameters":{"properties":{"data_source_config":{"additionalProperties":false,"description":"Configuration for creating a DATA_SOURCE sheet.\n\nDATA_SOURCE sheets connect to external data sources like BigQuery.\nThe API uses addDataSource request which automatically creates the associated sheet.\n\nIMPORTANT: Requires additional OAuth scope: bigquery.readonly","properties":{"dataSourceSpec":{"additionalProperties":false,"description":"The data source specification (currently supports BigQuery).","properties":{"bigQuery":{"additionalProperties":false,"description":"BigQuery data source configuration. Requires the bigquery.readonly OAuth scope.","properties":{"projectId":{"description":"The ID of a BigQuery-enabled Google Cloud project with billing attached.","minLength":1,"title":"Project Id","type":"string"},"querySpec":{"additionalProperties":false,"description":"Configuration for a BigQuery query-based data source.","properties":{"rawQuery":{"description":"The raw SQL query to execute in BigQuery.","minLength":1,"title":"Raw Query","type":"string"}},"required":["rawQuery"],"title":"BigQueryQuerySpec","type":"object"},"tableSpec":{"additionalProperties":false,"description":"Configuration for a BigQuery table-based data source.","properties":{"datasetId":{"description":"The BigQuery dataset ID containing the table.","minLength":1,"title":"Dataset Id","type":"string"},"tableId":{"description":"The BigQuery table ID.","minLength":1,"title":"Table Id","type":"string"},"tableProjectId":{"description":"The Google Cloud project ID containing the table (defaults to the spreadsheet's project).","title":"Table Project Id","type":"string"}},"required":["datasetId","tableId"],"title":"BigQueryTableSpec","type":"object"}},"required":["projectId"],"title":"Big Query","type":"object"}},"required":["bigQuery"],"title":"Data Source Spec","type":"object"}},"required":["dataSourceSpec"],"title":"DataSourceSheetConfig","type":"object"},"force_unique":{"default":true,"description":"When True (default), automatically ensures the sheet name is unique by appending a numeric suffix (e.g., '_2', '_3') if the requested name already exists. This makes the action resilient to retries and parallel workflows. When False, the action fails with an error if a sheet with the same name already exists.","title":"Force Unique","type":"boolean"},"object_sheet_config":{"additionalProperties":false,"description":"Configuration for creating an OBJECT sheet (a sheet containing a chart).\n\nTo create an OBJECT sheet, you must provide chart configuration.\nThe API uses addChart with position.newSheet=true to create the chart on its own sheet.","properties":{"chartSpec":{"additionalProperties":false,"description":"The chart specification. Must include either basicChart or pieChart configuration.","properties":{"basicChart":{"additionalProperties":false,"description":"Configuration for a basic chart (BAR, LINE, COLUMN, etc.).","properties":{"chartType":{"description":"The type of chart (BAR, LINE, COLUMN, SCATTER, etc.).","enum":["BAR","LINE","AREA","COLUMN","SCATTER","COMBO","STEPPED_AREA","PIE"],"title":"Chart Type","type":"string"},"domains":{"description":"The domain (X-axis) data for the chart.","items":{"description":"The domain of a chart (typically X-axis data).","properties":{"domain":{"additionalProperties":false,"description":"The data of the domain (X-axis labels).","properties":{"sourceRange":{"additionalProperties":false,"description":"The source ranges of the data.","properties":{"sources":{"description":"The ranges of data for a chart.","items":{"description":"A range on a sheet specified by sheetId and row/column indices.","properties":{"endColumnIndex":{"description":"The end column (0-indexed, exclusive). Column B = 2.","minimum":1,"title":"End Column Index","type":"integer"},"endRowIndex":{"description":"The end row (0-indexed, exclusive).","minimum":1,"title":"End Row Index","type":"integer"},"sheetId":{"description":"The sheet ID containing the data (0 for first sheet).","title":"Sheet Id","type":"integer"},"startColumnIndex":{"description":"The start column (0-indexed, inclusive). Column A = 0.","minimum":0,"title":"Start Column Index","type":"integer"},"startRowIndex":{"description":"The start row (0-indexed, inclusive).","minimum":0,"title":"Start Row Index","type":"integer"}},"required":["sheetId","startRowIndex","endRowIndex","startColumnIndex","endColumnIndex"],"title":"GridRange","type":"object"},"minItems":1,"title":"Sources","type":"array"}},"required":["sources"],"title":"Source Range","type":"object"}},"required":["sourceRange"],"title":"Domain","type":"object"}},"required":["domain"],"title":"BasicChartDomain","type":"object"},"minItems":1,"title":"Domains","type":"array"},"headerCount":{"description":"The number of rows or columns in the data that are headers.","minimum":0,"title":"Header Count","type":"integer"},"legendPosition":{"default":"BOTTOM_LEGEND","description":"Position of the chart legend.","enum":["LEGEND_POSITION_UNSPECIFIED","BOTTOM_LEGEND","LEFT_LEGEND","RIGHT_LEGEND","TOP_LEGEND","NO_LEGEND"],"title":"LegendPosition","type":"string"},"series":{"description":"The series (Y-axis values) data for the chart.","items":{"description":"A single series of data in a chart.","properties":{"series":{"additionalProperties":false,"description":"The data being visualized in this series.","properties":{"sourceRange":{"additionalProperties":false,"description":"The source ranges of the data.","properties":{"sources":{"description":"The ranges of data for a chart.","items":{"description":"A range on a sheet specified by sheetId and row/column indices.","properties":{"endColumnIndex":{"description":"The end column (0-indexed, exclusive). Column B = 2.","minimum":1,"title":"End Column Index","type":"integer"},"endRowIndex":{"description":"The end row (0-indexed, exclusive).","minimum":1,"title":"End Row Index","type":"integer"},"sheetId":{"description":"The sheet ID containing the data (0 for first sheet).","title":"Sheet Id","type":"integer"},"startColumnIndex":{"description":"The start column (0-indexed, inclusive). Column A = 0.","minimum":0,"title":"Start Column Index","type":"integer"},"startRowIndex":{"description":"The start row (0-indexed, inclusive).","minimum":0,"title":"Start Row Index","type":"integer"}},"required":["sheetId","startRowIndex","endRowIndex","startColumnIndex","endColumnIndex"],"title":"GridRange","type":"object"},"minItems":1,"title":"Sources","type":"array"}},"required":["sources"],"title":"Source Range","type":"object"}},"required":["sourceRange"],"title":"Series","type":"object"},"targetAxis":{"description":"The axis this series maps to. Usually LEFT_AXIS or RIGHT_AXIS.","title":"Target Axis","type":"string"}},"required":["series"],"title":"BasicChartSeries","type":"object"},"minItems":1,"title":"Series","type":"array"},"stackedType":{"description":"For stacked charts: NOT_STACKED, STACKED, or PERCENT_STACKED.","title":"Stacked Type","type":"string"}},"required":["chartType","domains","series"],"title":"BasicChartSpec","type":"object"},"pieChart":{"additionalProperties":false,"description":"Configuration for a pie chart.","properties":{"domain":{"additionalProperties":false,"description":"The data for the slice labels.","properties":{"sourceRange":{"additionalProperties":false,"description":"The source ranges of the data.","properties":{"sources":{"description":"The ranges of data for a chart.","items":{"description":"A range on a sheet specified by sheetId and row/column indices.","properties":{"endColumnIndex":{"description":"The end column (0-indexed, exclusive). Column B = 2.","minimum":1,"title":"End Column Index","type":"integer"},"endRowIndex":{"description":"The end row (0-indexed, exclusive).","minimum":1,"title":"End Row Index","type":"integer"},"sheetId":{"description":"The sheet ID containing the data (0 for first sheet).","title":"Sheet Id","type":"integer"},"startColumnIndex":{"description":"The start column (0-indexed, inclusive). Column A = 0.","minimum":0,"title":"Start Column Index","type":"integer"},"startRowIndex":{"description":"The start row (0-indexed, inclusive).","minimum":0,"title":"Start Row Index","type":"integer"}},"required":["sheetId","startRowIndex","endRowIndex","startColumnIndex","endColumnIndex"],"title":"GridRange","type":"object"},"minItems":1,"title":"Sources","type":"array"}},"required":["sources"],"title":"Source Range","type":"object"}},"required":["sourceRange"],"title":"Domain","type":"object"},"legendPosition":{"default":"RIGHT_LEGEND","description":"Position of the chart legend.","enum":["LEGEND_POSITION_UNSPECIFIED","BOTTOM_LEGEND","LEFT_LEGEND","RIGHT_LEGEND","TOP_LEGEND","NO_LEGEND"],"title":"LegendPosition","type":"string"},"pieHole":{"description":"The size of the hole in the pie chart (0.0-1.0 for donut chart).","maximum":1,"minimum":0,"title":"Pie Hole","type":"number"},"series":{"additionalProperties":false,"description":"The data for the slice sizes.","properties":{"sourceRange":{"additionalProperties":false,"description":"The source ranges of the data.","properties":{"sources":{"description":"The ranges of data for a chart.","items":{"description":"A range on a sheet specified by sheetId and row/column indices.","properties":{"endColumnIndex":{"description":"The end column (0-indexed, exclusive). Column B = 2.","minimum":1,"title":"End Column Index","type":"integer"},"endRowIndex":{"description":"The end row (0-indexed, exclusive).","minimum":1,"title":"End Row Index","type":"integer"},"sheetId":{"description":"The sheet ID containing the data (0 for first sheet).","title":"Sheet Id","type":"integer"},"startColumnIndex":{"description":"The start column (0-indexed, inclusive). Column A = 0.","minimum":0,"title":"Start Column Index","type":"integer"},"startRowIndex":{"description":"The start row (0-indexed, inclusive).","minimum":0,"title":"Start Row Index","type":"integer"}},"required":["sheetId","startRowIndex","endRowIndex","startColumnIndex","endColumnIndex"],"title":"GridRange","type":"object"},"minItems":1,"title":"Sources","type":"array"}},"required":["sources"],"title":"Source Range","type":"object"}},"required":["sourceRange"],"title":"Series","type":"object"},"threeDimensional":{"description":"Whether the pie chart should be 3D.","title":"Three Dimensional","type":"boolean"}},"required":["domain","series"],"title":"PieChartSpec","type":"object"},"subtitle":{"description":"The subtitle of the chart.","title":"Subtitle","type":"string"},"title":{"description":"The title of the chart.","title":"Title","type":"string"}},"title":"Chart Spec","type":"object"}},"required":["chartSpec"],"title":"ObjectSheetConfig","type":"object"},"properties":{"additionalProperties":false,"description":"Advanced sheet properties (grid dimensions, tab color, position, etc.). For simple cases, just use the 'title' parameter directly. Use this for additional customization.","properties":{"gridProperties":{"additionalProperties":false,"description":"Additional properties of the sheet if it's a grid sheet.","properties":{"columnCount":{"description":"The number of columns in the sheet. Defaults to 26 columns if not specified. Google Sheets has a 10M cell workbook limit.","minimum":0,"title":"Column Count","type":"integer"},"columnGroupControlAfter":{"description":"True if the column group control toggle is shown after the group, false if before.","title":"Column Group Control After","type":"boolean"},"frozenColumnCount":{"description":"The number of columns that are frozen in the sheet.","minimum":0,"title":"Frozen Column Count","type":"integer"},"frozenRowCount":{"description":"The number of rows that are frozen in the sheet.","minimum":0,"title":"Frozen Row Count","type":"integer"},"hideGridlines":{"description":"True if the gridlines are hidden, false if they are shown.","title":"Hide Gridlines","type":"boolean"},"rowCount":{"description":"The number of rows in the sheet. Defaults to 100 rows if not specified (to conserve cell quota). Google Sheets has a 10M cell workbook limit.","minimum":0,"title":"Row Count","type":"integer"},"rowGroupControlAfter":{"description":"True if the row group control toggle is shown after the group, false if before.","title":"Row Group Control After","type":"boolean"}},"title":"GridProperties","type":"object"},"hidden":{"description":"True if the sheet is hidden in the UI, false if it's visible.","title":"Hidden","type":"boolean"},"index":{"description":"The zero-based index where the sheet should be inserted. Must be less than or equal to the current number of sheets. If not set, the sheet will be added at the end. Example: 0 for the first position. CONCURRENCY WARNING: Do not use 'index' when creating multiple sheets in parallel - this causes 'index is too high' errors. For parallel creation, omit this field and let sheets be added at the end.","minimum":0,"title":"Index","type":"integer"},"rightToLeft":{"description":"True if the sheet is an RTL sheet, false if it's LTR.","title":"Right To Left","type":"boolean"},"sheetId":{"description":"The ID of the sheet. If not set, an ID will be randomly generated. Must be non-negative and unique within the spreadsheet. WARNING: Avoid setting this unless you need a specific ID.","minimum":0,"title":"Sheet Id","type":"integer"},"sheetType":{"default":"GRID","description":"Sheet type enum for AddSheetRequest.\n\nIMPORTANT: AddSheetRequest only supports creating GRID sheets.\n- For OBJECT sheets: Use 'Create Chart' action with position.newSheet=true\n- For DATA_SOURCE sheets: Use AddDataSourceRequest (requires extra scopes/permissions)","enum":["GRID"],"title":"RequestSheetType","type":"string"},"tabColorStyle":{"additionalProperties":false,"description":"The color of the sheet tab.","properties":{"rgbColor":{"additionalProperties":false,"description":"RGB color. Specify EITHER rgbColor OR themeColor, but not both. If using rgbColor, provide values for red, green, blue (0.0-1.0).","properties":{"alpha":{"description":"The fraction of this color that should be applied to the pixel. E.g. 0.5 for 50% transparent.","maximum":1,"minimum":0,"title":"Alpha","type":"number"},"blue":{"description":"The amount of blue in the color as a value in the interval [0, 1].","maximum":1,"minimum":0,"title":"Blue","type":"number"},"green":{"description":"The amount of green in the color as a value in the interval [0, 1].","maximum":1,"minimum":0,"title":"Green","type":"number"},"red":{"description":"The amount of red in the color as a value in the interval [0, 1].","maximum":1,"minimum":0,"title":"Red","type":"number"}},"title":"Color","type":"object"},"themeColor":{"description":"Theme color. Specify EITHER themeColor OR rgbColor, but not both. Use predefined theme colors like ACCENT1, TEXT, BACKGROUND, etc.","enum":["THEME_COLOR_TYPE_UNSPECIFIED","TEXT","BACKGROUND","ACCENT1","ACCENT2","ACCENT3","ACCENT4","ACCENT5","ACCENT6","LINK"],"title":"ThemeColorType","type":"string"}},"title":"ColorStyle","type":"object"},"title":{"description":"The name of the sheet. Must be unique within the spreadsheet. Example: \"Q3 Report\", \"Sales Data 2025\"","title":"Title","type":"string"}},"title":"SheetProperties","type":"object"},"spreadsheet_id":{"description":"REQUIRED. Cannot be empty. The ID of the target spreadsheet where the new sheet will be added. This is the long alphanumeric string in the Google Sheet URL (e.g., '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'). Use 'Search Spreadsheets' action to find the spreadsheet ID by name if you don't have it.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"minLength":1,"title":"Spreadsheet Id","type":"string"},"title":{"description":"The name for the new sheet tab. Must be unique within the spreadsheet. Example: \"Q3 Report\", \"Sales Data 2025\". This is a convenience parameter - alternatively, you can set this via properties.title. Note: sheet_name is also accepted as an alias for title.","title":"Title","type":"string"}},"required":["spreadsheet_id"],"title":"AddSheetRequest","type":"object"}},"type":"function"},{"function":{"description":"Searches for rows where a specific column matches a value and performs mathematical operations on data from another column.","name":"GOOGLESHEETS_AGGREGATE_COLUMN_DATA","parameters":{"description":"Request to search for rows matching a column value and aggregate data from another column.","properties":{"additional_filters":{"description":"Extra column=value conditions applied with AND logic on top of search_column/search_value. Use this to filter on multiple columns simultaneously. Example: [{\"column\": \"Region\", \"value\": \"APAC\"}] combined with search_column=Product/search_value=Beacon returns only rows where Product=Beacon AND Region=APAC.","items":{"description":"An extra column=value filter applied with AND logic on top of search_column/search_value.","properties":{"column":{"description":"Column letter (e.g., 'B') or header name (e.g., 'Region') to filter on.","examples":["Region","B","Product"],"title":"Column","type":"string"},"value":{"description":"Exact value to match in the column.","examples":["APAC","Beacon","North"],"title":"Value","type":"string"}},"required":["column","value"],"title":"AdditionalFilter","type":"object"},"title":"Additional Filters","type":"array"},"case_sensitive":{"default":true,"description":"Whether the search should be case-sensitive.","examples":[true,false],"title":"Case Sensitive","type":"boolean"},"has_header_row":{"default":true,"description":"Whether the first row contains column headers. If True, column names can be used for search_column and target_column.","examples":[true,false],"title":"Has Header Row","type":"boolean"},"operation":{"description":"The mathematical operation to perform on the target column values.","enum":["sum","average","count","min","max","percentage"],"examples":["sum","average","count","min","max","percentage"],"title":"Operation","type":"string"},"percentage_total":{"description":"For percentage operation, the total value to calculate percentage against. If not provided, uses sum of all values in target column.","examples":[10000,50000.5],"title":"Percentage Total","type":"number"},"search_column":{"description":"The column to search in for filtering rows. Can be a letter (e.g., 'A', 'B') or column name from header row (e.g., 'Region', 'Department'). If not provided, all rows in the target column will be aggregated without filtering.","examples":["A","Region","Department"],"title":"Search Column","type":"string"},"search_value":{"description":"The exact value to search for in the search column. Case-sensitive by default. If not provided (or if search_column is not provided), all rows in the target column will be aggregated without filtering.","examples":["HSR","Sales","North Region"],"title":"Search Value","type":"string"},"sheet_name":{"description":"The name of the specific sheet within the spreadsheet. Matching is case-insensitive. If no exact match is found, partial matches will be attempted (e.g., 'overview' will match 'Overview 2025').","examples":["Sheet1","Sales Data"],"title":"Sheet Name","type":"string"},"spreadsheet_id":{"description":"The unique identifier of the Google Sheets spreadsheet.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"target_column":{"description":"The column to aggregate data from. Can be a letter (e.g., 'C', 'D') or column name from header row (e.g., 'Sales', 'Revenue').","examples":["D","Sales","Revenue"],"title":"Target Column","type":"string"}},"required":["spreadsheet_id","sheet_name","target_column","operation"],"title":"AggregateColumnDataRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to append new rows or columns to a sheet, increasing its size. Use when you need to add empty rows or columns to an existing sheet.","name":"GOOGLESHEETS_APPEND_DIMENSION","parameters":{"properties":{"dimension":{"description":"Specifies whether to append rows or columns.","enum":["ROWS","COLUMNS"],"examples":["ROWS"],"title":"Dimension","type":"string"},"include_spreadsheet_in_response":{"description":"True if the updated spreadsheet should be included in the response.","title":"Include Spreadsheet In Response","type":"boolean"},"length":{"description":"The number of rows or columns to append.","examples":[10],"title":"Length","type":"integer"},"response_include_grid_data":{"description":"True if grid data should be included in the response (if includeSpreadsheetInResponse is true).","title":"Response Include Grid Data","type":"boolean"},"response_ranges":{"description":"Limits the ranges of the spreadsheet to include in the response.","items":{"type":"string"},"title":"Response Ranges","type":"array"},"sheet_id":{"description":"The numeric ID of the sheet (not the sheet name). This is a non-negative integer found in the sheet's URL as the 'gid' parameter (e.g., gid=0) or in the sheet properties. The first sheet in a spreadsheet typically has sheet_id=0.","examples":[0],"title":"Sheet Id","type":"integer"},"spreadsheet_id":{"description":"The ID of the spreadsheet.","examples":["1q2w3e4r5t6y7u8i9o0p"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheet_id","sheet_id","dimension","length"],"title":"AppendDimensionRequest","type":"object"}},"type":"function"},{"function":{"description":"Auto-fit column widths or row heights for a dimension range using batchUpdate.autoResizeDimensions. Use when you need to automatically adjust row heights or column widths to fit content after writing data.","name":"GOOGLESHEETS_AUTO_RESIZE_DIMENSIONS","parameters":{"description":"Request model for auto-resizing dimensions (rows or columns) in a Google Sheet.","properties":{"dimension":{"description":"The dimension to auto-resize. Use 'ROWS' to auto-fit row heights or 'COLUMNS' to auto-fit column widths.","enum":["ROWS","COLUMNS"],"examples":["COLUMNS","ROWS"],"title":"Dimension","type":"string"},"end_index":{"description":"The zero-based end index of the dimension range to resize (exclusive). Must be greater than start_index. For example, to resize columns A-C, use start_index=0 and end_index=3.","examples":[3,10],"minimum":1,"title":"End Index","type":"integer"},"sheet_id":{"description":"The numeric ID of the sheet to resize. Either sheet_id or sheet_name must be provided. If both are provided, sheet_name takes precedence and will be resolved to sheet_id.","examples":[0,123456789],"title":"Sheet Id","type":"integer"},"sheet_name":{"description":"The name of the sheet to resize. Either sheet_id or sheet_name must be provided. Using sheet_name is recommended as it's more intuitive. If both sheet_id and sheet_name are provided, sheet_name takes precedence.","examples":["Sheet1","Sales Data"],"title":"Sheet Name","type":"string"},"spreadsheet_id":{"description":"The ID of the spreadsheet containing the sheet to resize.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"start_index":{"description":"The zero-based start index of the dimension range to resize (inclusive). For columns, 0 = column A. For rows, 0 = row 1.","examples":[0,5],"minimum":0,"title":"Start Index","type":"integer"}},"required":["spreadsheet_id","dimension","start_index","end_index"],"title":"AutoResizeDimensionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Clears one or more ranges of values from a spreadsheet using data filters. The caller must specify the spreadsheet ID and one or more DataFilters. Ranges matching any of the specified data filters will be cleared. Only values are cleared -- all other properties of the cell (such as formatting, data validation, etc..) are kept.","name":"GOOGLESHEETS_BATCH_CLEAR_VALUES_BY_DATA_FILTER","parameters":{"properties":{"dataFilters":{"description":"The DataFilters used to determine which ranges to clear.","items":{"properties":{"a1Range":{"description":"Selects data that matches the specified A1 range.","title":"A1 Range","type":"string"},"developerMetadataLookup":{"additionalProperties":false,"description":"Selects data associated with the developer metadata matching the criteria described by this DeveloperMetadataLookup.","properties":{"locationMatchingStrategy":{"description":"Determines how this lookup matches the location. Valid values: DEVELOPER_METADATA_LOCATION_MATCHING_STRATEGY_UNSPECIFIED, EXACT_LOCATION, INTERSECTING_LOCATION.","title":"Location Matching Strategy","type":"string"},"locationType":{"description":"Limits the selected developer metadata to those entries which are associated with locations of the specified type. Valid values: DEVELOPER_METADATA_LOCATION_TYPE_UNSPECIFIED, ROW, COLUMN, SHEET, SPREADSHEET, ALL_METADATA_LOCATION.","title":"Location Type","type":"string"},"metadataId":{"description":"Limits the selected developer metadata to that which has a matching DeveloperMetadata.metadata_id.","title":"Metadata Id","type":"integer"},"metadataKey":{"description":"Limits the selected developer metadata to that which has a matching DeveloperMetadata.metadata_key.","title":"Metadata Key","type":"string"},"metadataLocation":{"additionalProperties":false,"description":"Limits the selected developer metadata to those entries associated with the specified location.","properties":{"dimensionRange":{"additionalProperties":false,"description":"The dimension range the metadata is associated with.","properties":{"dimension":{"description":"The dimension of the span. Valid values are ROWS or COLUMNS.","title":"Dimension","type":"string"},"endIndex":{"description":"The end (exclusive) of the span, or not set if unbounded.","title":"End Index","type":"integer"},"sheetId":{"description":"The sheet this span is on.","title":"Sheet Id","type":"integer"},"startIndex":{"description":"The start (inclusive) of the span, or not set if unbounded.","title":"Start Index","type":"integer"}},"title":"DimensionRange","type":"object"},"sheetId":{"description":"The ID of the sheet the metadata is associated with.","title":"Sheet Id","type":"integer"},"spreadsheet":{"description":"True if the metadata is associated with the entire spreadsheet.","title":"Spreadsheet","type":"boolean"},"unionedRange":{"additionalProperties":false,"description":"A grid range covering all spreadsheet, sheet, row, and column metadata that belong to the same unioned group.","properties":{"endColumnIndex":{"description":"The end column (exclusive) of the range, or not set if unbounded.","title":"End Column Index","type":"integer"},"endRowIndex":{"description":"The end row (exclusive) of the range, or not set if unbounded.","title":"End Row Index","type":"integer"},"sheetId":{"description":"The sheet this range is on.","title":"Sheet Id","type":"integer"},"startColumnIndex":{"description":"The start column (inclusive) of the range, or not set if unbounded.","title":"Start Column Index","type":"integer"},"startRowIndex":{"description":"The start row (inclusive) of the range, or not set if unbounded.","title":"Start Row Index","type":"integer"}},"title":"GridRange","type":"object"}},"title":"DeveloperMetadataLocation","type":"object"},"metadataValue":{"description":"Limits the selected developer metadata to that which has a matching DeveloperMetadata.metadata_value.","title":"Metadata Value","type":"string"},"visibility":{"description":"Limits the selected developer metadata to that which has a matching DeveloperMetadata.visibility. Valid values: DEVELOPER_METADATA_VISIBILITY_UNSPECIFIED, DOCUMENT, PROJECT.","title":"Visibility","type":"string"}},"title":"DeveloperMetadataLookup","type":"object"},"gridRange":{"additionalProperties":false,"description":"Selects data that matches the range described by the GridRange.","properties":{"endColumnIndex":{"description":"The end column (exclusive) of the range, or not set if unbounded.","title":"End Column Index","type":"integer"},"endRowIndex":{"description":"The end row (exclusive) of the range, or not set if unbounded.","title":"End Row Index","type":"integer"},"sheetId":{"description":"The sheet this range is on.","title":"Sheet Id","type":"integer"},"startColumnIndex":{"description":"The start column (inclusive) of the range, or not set if unbounded.","title":"Start Column Index","type":"integer"},"startRowIndex":{"description":"The start row (inclusive) of the range, or not set if unbounded.","title":"Start Row Index","type":"integer"}},"title":"GridRange","type":"object"}},"title":"DataFilter","type":"object"},"title":"Data Filters","type":"array"},"spreadsheetId":{"description":"The ID of the spreadsheet to update.","title":"Spreadsheet Id","type":"string"}},"required":["spreadsheetId","dataFilters"],"title":"BatchClearValuesByDataFilterRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves data from specified cell ranges in a Google Spreadsheet.","name":"GOOGLESHEETS_BATCH_GET","parameters":{"properties":{"dateTimeRenderOption":{"default":"SERIAL_NUMBER","description":"How dates and times should be rendered in the output. SERIAL_NUMBER: Dates are returned as serial numbers (default). FORMATTED_STRING: Dates returned as formatted strings.","enum":["SERIAL_NUMBER","FORMATTED_STRING"],"title":"Date Time Render Option","type":"string"},"empty_strings_filtered":{"default":false,"description":"Indicates whether empty strings were filtered from the response.","title":"Empty Strings Filtered","type":"boolean"},"majorDimension":{"description":"The major dimension for organizing data in results.","enum":["DIMENSION_UNSPECIFIED","ROWS","COLUMNS"],"title":"MajorDimension","type":"string"},"ranges":{"description":"A list of cell ranges in A1 notation from which to retrieve data. If this list is omitted, empty, or contains only empty strings, all data from the first sheet of the spreadsheet will be fetched. Empty strings in the list are automatically filtered out. Supported formats: (1) Bare sheet name like 'Sheet1' to get all data from that sheet, (2) Sheet with range like 'Sheet1!A1:B2', (3) Just cell reference like 'A1:B2' (uses first sheet). For sheet names with spaces or special characters, enclose in single quotes (e.g., \"'My Sheet'\" or \"'My Sheet'!A1:B2\"). IMPORTANT: For large sheets, always use bounded ranges with explicit row limits (e.g., 'Sheet1!A1:Z10000' instead of 'Sheet1!A:Z'). Unbounded column ranges like 'A:Z' on sheets with >10,000 rows may cause timeouts or errors. If you need all data from a large sheet, fetch in chunks of 10,000 rows at a time.","examples":["Sheet1","Sheet1!A1:B2","Sheet1!A1:Z10000","Sheet1!1:2","'My Sheet'!A1:Z500","A1:B2"],"items":{"type":"string"},"title":"Ranges","type":"array"},"spreadsheet_id":{"description":"The unique identifier of the Google Spreadsheet from which data will be retrieved. This is the ID found in the spreadsheet URL after /d/. You can provide either the spreadsheet ID directly or a full Google Sheets URL (the ID will be extracted automatically).","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"maxLength":200,"title":"Spreadsheet Id","type":"string"},"valueRenderOption":{"default":"FORMATTED_VALUE","description":"How values should be rendered in the output. FORMATTED_VALUE: Values are calculated and formatted (default). UNFORMATTED_VALUE: Values are calculated but not formatted. FORMULA: Values are not calculated; the formula is returned instead.","enum":["FORMATTED_VALUE","UNFORMATTED_VALUE","FORMULA"],"title":"Value Render Option","type":"string"}},"required":["spreadsheet_id"],"title":"BatchGetRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GOOGLESHEETS_VALUES_UPDATE instead. Write values to ONE range in a Google Sheet, or append as new rows if no start cell is given. IMPORTANT - This tool does NOT accept the Google Sheets API's native batch format: - WRONG: {\"data\": [{\"range\": \"...\", \"values\": [[...]]}], ...} - CORRECT: {\"sheet_name\": \"...\", \"values\": [[...]], \"first_cell_location\": \"...\", ...} To update MULTIPLE ranges, make SEPARATE CALLS to this tool for each range. Features: - Auto-expands grid for large datasets (prevents range errors) - Set first_cell_location to write at a specific position (e.g., \"A1\", \"B5\") - Omit first_cell_location to append values as new rows at the end Requirements: Target sheet must exist and spreadsheet must contain at least one worksheet.","name":"GOOGLESHEETS_BATCH_UPDATE","parameters":{"additionalProperties":true,"description":"Write values to ONE range in a Google Sheet, or append as new rows if no start cell is given.\n\nIMPORTANT: This tool does NOT accept the Google Sheets API's native batch format.\n- WRONG: {\"data\": [{\"range\": \"Sheet1!A1\", \"values\": [[...]]}], ...} (Google API format)\n- CORRECT: {\"sheet_name\": \"Sheet1\", \"values\": [[...]], \"first_cell_location\": \"A1\", ...}\n\nTo update MULTIPLE ranges, make separate calls to this tool for each range.","properties":{"first_cell_location":{"description":"The starting cell for the update range, specified as a single cell in A1 notation WITHOUT sheet prefix (e.g., 'A1', 'B2', 'AA931'). The update will extend from this cell to the right and down based on the provided values. Sheet name must be provided separately in the 'sheet_name' field. If omitted or set to null, values are appended as new rows to the sheet. Note: Use only a single cell reference (e.g., 'AA931'), NOT a range (e.g., 'AA931:AF931') or sheet-prefixed notation (e.g., 'Sheet1!A1').","examples":["A1","D3","AA931"],"title":"First Cell Location","type":"string"},"includeValuesInResponse":{"default":false,"description":"If set to True, the response will include the updated values in the 'spreadsheet.responses[].updatedData' field. The updatedData object contains 'range' (A1 notation), 'majorDimension' (ROWS), and 'values' (2D array of the actual cell values after the update).","examples":[true,false],"title":"Include Values In Response","type":"boolean"},"sheet_name":{"description":"The name of the specific sheet (tab) within the spreadsheet to update (required, separate from cell reference). Case-insensitive matching is supported (e.g., 'sheet1' will match 'Sheet1'). Note: Default sheet names are locale-dependent (e.g., 'Sheet1' in English, 'Foglio1' in Italian, 'Hoja 1' in Spanish, '시트1' in Korean, 'Feuille 1' in French). If you specify a common default name like 'Sheet1' and it doesn't exist, the action will automatically use the first sheet in the spreadsheet.","examples":["Sheet1","Sales Data","Budget"],"title":"Sheet Name","type":"string"},"spreadsheet_id":{"description":"The unique identifier of the Google Sheets spreadsheet to be updated. Must be an alphanumeric string (with hyphens and underscores allowed) typically 44 characters long. Can be found in the spreadsheet URL between '/d/' and '/edit'. Example: 'https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit' has ID '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"valueInputOption":{"default":"USER_ENTERED","description":"How input data should be interpreted. 'USER_ENTERED': Values are parsed as if typed by a user (e.g., strings may become numbers/dates, formulas are calculated). 'RAW': Values are stored exactly as provided without parsing (e.g., '123' stays as string, '=SUM(A1:B1)' is not calculated).","enum":["RAW","USER_ENTERED"],"examples":["USER_ENTERED","RAW"],"title":"Value Input Option","type":"string"},"values":{"description":"A 2D array of cell values where each inner array represents a row. Values can be strings, numbers, booleans, or None/null for empty cells. Ensure columns are properly aligned across rows.","examples":[[["Item","Cost","Stocked","Ship Date"],["Wheel",20.5,true,"2020-06-01"],["Screw",0.5,true,"2020-06-03"],["Nut",0.25,false,"2020-06-02"]]],"items":{"items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"type":"array"},"title":"Values","type":"array"}},"required":["spreadsheet_id","sheet_name","values"],"title":"BatchUpdateRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update values in ranges matching data filters. Use when you need to update specific data in a Google Sheet based on criteria rather than fixed cell ranges.","name":"GOOGLESHEETS_BATCH_UPDATE_VALUES_BY_DATA_FILTER","parameters":{"properties":{"data":{"description":"The new values to apply to the spreadsheet. If more than one range is matched by the specified DataFilter the specified values are applied to all of those ranges. Can be provided as a JSON string or as a list of DataFilterValueRange objects.","items":{"properties":{"dataFilter":{"additionalProperties":false,"description":"The data filter describing the criteria to select cells for update.","properties":{"a1Range":{"description":"The A1 notation of the range to update.","title":"A1 Range","type":"string"},"developerMetadataLookup":{"additionalProperties":false,"description":"Matches the data against the developer metadata that's associated with the dimensions. The developer metadata should be created with the location type set to either ROW or COLUMN and the visibility set to DOCUMENT.","properties":{"locationMatchingStrategy":{"description":"Determines how this lookup matches the location. If this field is specified as EXACT, then the lookup requires an exact match of the specified locationType, metadataKey, and metadataValue. If this field is specified as INTERSECTING, then the lookup considers all metadata that intersects the specified locationType, and then filters that metadata by the specified key and value. If this field is unspecified, it is treated as EXACT.","enum":["EXACT","INTERSECTING"],"title":"Location Matching Strategy","type":"string"},"locationType":{"description":"The type of location this object is looking for. Valid values are ROW, COLUMN, and SHEET.","enum":["ROW","COLUMN","SHEET"],"title":"Location Type","type":"string"},"metadataId":{"description":"The ID of the developer metadata to match. This field is optional. If specified, the lookup matches only the developer metadata with the specified ID.","title":"Metadata Id","type":"integer"},"metadataKey":{"description":"The key of the developer metadata to match. This field is optional. If specified, the lookup matches only the developer metadata with the specified key.","title":"Metadata Key","type":"string"},"metadataLocation":{"additionalProperties":false,"description":"The location of the developer metadata to match. This field is optional. If specified, the lookup matches only the developer metadata in the specified location.","properties":{"dimensionRange":{"additionalProperties":true,"description":"A range along a single dimension on a sheet. All indexes are 0-based. Indexes are half open: the start index is inclusive and the end index is exclusive. Missing indexes indicate the range is unbounded on that side.","title":"Dimension Range","type":"object"},"locationType":{"description":"The type of location this object represents. This field is read-only.","title":"Location Type","type":"string"},"sheetId":{"description":"The ID of the sheet the location is on.","title":"Sheet Id","type":"integer"},"spreadsheet":{"description":"True if the metadata location is the spreadsheet itself.","title":"Spreadsheet","type":"boolean"}},"title":"DeveloperMetadataLocation","type":"object"},"metadataValue":{"description":"The value of the developer metadata to match. This field is optional. If specified, the lookup matches only the developer metadata with the specified value.","title":"Metadata Value","type":"string"},"visibility":{"description":"The visibility of the developer metadata to match. This field is optional. If specified, the lookup matches only the developer metadata with the specified visibility.","title":"Visibility","type":"string"}},"title":"DeveloperMetadataLookup","type":"object"},"gridRange":{"additionalProperties":false,"description":"Selects data within the range described by a GridRange. This field is optional. If specified, the dataFilter selects data within the specified grid range.","properties":{"endColumnIndex":{"description":"The end column (exclusive) of the range, or not set if unbounded.","title":"End Column Index","type":"integer"},"endRowIndex":{"description":"The end row (exclusive) of the range, or not set if unbounded.","title":"End Row Index","type":"integer"},"sheetId":{"description":"The sheet this range is on.","title":"Sheet Id","type":"integer"},"startColumnIndex":{"description":"The start column (inclusive) of the range, or not set if unbounded.","title":"Start Column Index","type":"integer"},"startRowIndex":{"description":"The start row (inclusive) of the range, or not set if unbounded.","title":"Start Row Index","type":"integer"}},"title":"GridRange","type":"object"}},"title":"Data Filter","type":"object"},"majorDimension":{"default":"ROWS","description":"The major dimension of the values. The default value is ROWS.","enum":["ROWS","COLUMNS","DIMENSION_UNSPECIFIED"],"title":"Major Dimension","type":"string"},"values":{"description":"The data to be written. A two-dimensional array of values that will be written to the range. Values can be strings, numbers, or booleans. If the range is larger than the values array, the excess cells will not be changed. If the values array is larger than the range, the excess values will be ignored.","items":{"items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"}]},"type":"array"},"title":"Values","type":"array"}},"required":["dataFilter","values"],"title":"DataFilterValueRange","type":"object"},"title":"Data","type":"array"},"includeValuesInResponse":{"default":false,"description":"Determines if the update response should include the values of the cells that were updated. By default, responses do not include the updated values.","title":"Include Values In Response","type":"boolean"},"responseDateTimeRenderOption":{"default":"SERIAL_NUMBER","description":"Determines how dates, times, and durations in the response should be rendered. This is ignored if responseValueRenderOption is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER.","enum":["SERIAL_NUMBER","FORMATTED_STRING"],"title":"Response Date Time Render Option","type":"string"},"responseValueRenderOption":{"default":"FORMATTED_VALUE","description":"Determines how values in the response should be rendered. The default render option is FORMATTED_VALUE.","enum":["FORMATTED_VALUE","UNFORMATTED_VALUE","FORMULA"],"title":"Response Value Render Option","type":"string"},"spreadsheetId":{"description":"The ID of the spreadsheet to update.","title":"Spreadsheet Id","type":"string"},"valueInputOption":{"description":"How the input data should be interpreted. RAW: Values are stored exactly as entered, without parsing. USER_ENTERED: Values are parsed as if typed by a user (numbers stay numbers, strings prefixed with '=' become formulas, etc.). INPUT_VALUE_OPTION_UNSPECIFIED: Default input value option is not specified.","enum":["INPUT_VALUE_OPTION_UNSPECIFIED","RAW","USER_ENTERED"],"title":"Value Input Option","type":"string"}},"required":["spreadsheetId","data","valueInputOption"],"title":"BatchUpdateValuesByDataFilterRequestModel","type":"object"}},"type":"function"},{"function":{"description":"Tool to clear the basic filter from a sheet. Use when you need to remove an existing basic filter from a specific sheet within a Google Spreadsheet.","name":"GOOGLESHEETS_CLEAR_BASIC_FILTER","parameters":{"properties":{"include_spreadsheet_in_response":{"description":"Determines if the update response should include the spreadsheet resource.","title":"Include Spreadsheet In Response","type":"boolean"},"response_include_grid_data":{"description":"True if grid data should be returned in the response. Only applicable when include_spreadsheet_in_response is true.","title":"Response Include Grid Data","type":"boolean"},"response_ranges":{"description":"Limits the ranges included in the response spreadsheet. Only applicable when include_spreadsheet_in_response is true.","items":{"type":"string"},"title":"Response Ranges","type":"array"},"sheet_id":{"description":"The ID of the sheet on which the basic filter should be cleared.","examples":[0,123456789],"title":"Sheet Id","type":"integer"},"spreadsheet_id":{"description":"The ID of the spreadsheet.","examples":["abc123xyz789"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheet_id","sheet_id"],"title":"ClearBasicFilterRequest","type":"object"}},"type":"function"},{"function":{"description":"Clears cell content (preserving formatting and notes) from a specified A1 notation range in a Google Spreadsheet; the range must correspond to an existing sheet and cells.","name":"GOOGLESHEETS_CLEAR_VALUES","parameters":{"properties":{"range":{"description":"The A1 notation of the range to clear values from (e.g., 'Sheet1!A1:B2', 'MySheet!C:C', or 'A1:D5'). If the sheet name is omitted (e.g., 'A1:B2'), the operation applies to the first visible sheet.","examples":["Sheet1!A1:B10","Sheet2!C:D","A1:Z100","My Custom Sheet!B3:F10"],"title":"Range","type":"string"},"spreadsheet_id":{"description":"The unique identifier of the Google Spreadsheet from which to clear values. This ID can be found in the URL of the spreadsheet.","examples":["1qZ_g6N0g3Z0s5hJ2xQ8vP9r7T_u6X3iY2o0kE_l5N7M","spreαdsheetId_from_url"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheet_id","range"],"title":"ClearValuesRequest","type":"object"}},"type":"function"},{"function":{"description":"Create a chart in a Google Sheets spreadsheet using the specified data range and chart type. Conditional requirements: - Provide either a simple chart via chart_type + data_range (basicChart), OR supply a full chart_spec supporting all chart types. Exactly one approach should be used. - When using chart_spec, set exactly one of the union fields (basicChart | pieChart | bubbleChart | candlestickChart | histogramChart | waterfallChart | treemapChart | orgChart | scorecardChart).","name":"GOOGLESHEETS_CREATE_CHART","parameters":{"properties":{"background_blue":{"description":"Blue component of chart background color (0.0-1.0). If not specified, uses default.","examples":[0,0.5,1],"title":"Background Blue","type":"number"},"background_green":{"description":"Green component of chart background color (0.0-1.0). If not specified, uses default.","examples":[0,0.5,1],"title":"Background Green","type":"number"},"background_red":{"description":"Red component of chart background color (0.0-1.0). If not specified, uses default.","examples":[0,0.5,1],"title":"Background Red","type":"number"},"chart_spec":{"additionalProperties":true,"description":"Optional full ChartSpec object to send to the Google Sheets API. Use this to support ALL chart types and advanced options. Must set exactly one of: basicChart, pieChart, bubbleChart, candlestickChart, histogramChart, treemapChart, waterfallChart, orgChart, scorecardChart. See https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/charts#ChartSpec.","examples":[{"pieChart":{"domain":{"sourceRange":{"sources":[{"endColumnIndex":1,"endRowIndex":5,"sheetId":0,"startColumnIndex":0,"startRowIndex":0}]}},"legendPosition":"RIGHT_LEGEND","series":{"sourceRange":{"sources":[{"endColumnIndex":2,"endRowIndex":5,"sheetId":0,"startColumnIndex":1,"startRowIndex":0}]}}}}],"title":"Chart Spec","type":"object"},"chart_type":{"description":"The type of chart to create. Case-insensitive. Supported types: BAR, LINE, AREA, COLUMN, SCATTER, COMBO, STEPPED_AREA (basic charts with axes), PIE (pie/donut charts), HISTOGRAM, BUBBLE, CANDLESTICK (requires 4+ data columns for low/open/close/high), TREEMAP, WATERFALL, ORG (organizational charts), SCORECARD. Each chart type uses its appropriate Google Sheets API spec structure. For advanced customization, provide chart_spec instead.","examples":["COLUMN","LINE","BAR","AREA","PIE","SCATTER","COMBO"],"title":"Chart Type","type":"string"},"data_range":{"description":"A single contiguous range of data for the chart in A1 notation (e.g., 'A1:C10' or 'Sheet1!B2:D20'). Must be a single continuous range - comma-separated multi-ranges (e.g., 'A1:A10,C1:C10') are not supported. When chart_spec is not provided, the first column is used as the domain/labels and the remaining columns as series. IMPORTANT: PIE charts require at least 2 columns - the first column for category labels (domain) and the second column for numeric values (series). Single-column ranges are not supported for PIE charts.","examples":["A1:C10","Sheet1!B2:D20","Data!A1:E50"],"title":"Data Range","type":"string"},"legend_position":{"default":"BOTTOM_LEGEND","description":"Position of the chart legend. Options: BOTTOM_LEGEND, TOP_LEGEND, LEFT_LEGEND, RIGHT_LEGEND, NO_LEGEND.","examples":["BOTTOM_LEGEND","RIGHT_LEGEND","NO_LEGEND"],"title":"Legend Position","type":"string"},"sheet_id":{"description":"The numeric sheetId (not the sheet name/title) of the worksheet where the chart will be created. This is a unique integer identifier for the sheet within the spreadsheet. The first/default sheet typically has sheetId=0. IMPORTANT: Use 'Get Spreadsheet Info' action to retrieve valid sheetIds - look for sheets[].properties.sheetId in the response. The sheetId must exist in the target spreadsheet; using an ID from a different spreadsheet will fail.","examples":[0,123456789],"title":"Sheet Id","type":"integer"},"spreadsheet_id":{"description":"The unique identifier of the Google Sheets spreadsheet where the chart will be created. Must be the actual spreadsheet ID from the URL (e.g., '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'), NOT the spreadsheet name or title. Find it in the URL: https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"subtitle":{"description":"Optional subtitle for the chart.","examples":["Q1 2024","Year over Year"],"title":"Subtitle","type":"string"},"title":{"description":"Optional title for the chart.","examples":["Sales Data","Monthly Revenue"],"title":"Title","type":"string"},"x_axis_title":{"description":"Optional title for the X-axis.","examples":["Time Period","Categories"],"title":"X Axis Title","type":"string"},"y_axis_title":{"description":"Optional title for the Y-axis.","examples":["Revenue ($)","Count"],"title":"Y Axis Title","type":"string"}},"required":["spreadsheet_id","sheet_id","chart_type","data_range"],"title":"CreateChartRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new Google Spreadsheet in Google Drive. If a title is provided, the spreadsheet will be created with that name. If no title is provided, Google will create a spreadsheet with a default name like 'Untitled spreadsheet'. Optionally create the spreadsheet in a specific folder by providing either: - folder_id: The Google Drive folder ID (preferred, unambiguous) - folder_name: The folder name (searches for exact match; if multiple folders match, returns choices) If neither folder_id nor folder_name is provided, the spreadsheet is created in the root Drive folder.","name":"GOOGLESHEETS_CREATE_GOOGLE_SHEET1","parameters":{"properties":{"folder_id":{"description":"Google Drive folder ID where the spreadsheet should be created. If provided, the spreadsheet will be moved to this folder after creation. Takes precedence over folder_name.","examples":["1a2b3c4d5e6f7g8h9i0j"],"title":"Folder Id","type":"string"},"folder_name":{"description":"Google Drive folder name where the spreadsheet should be created. If provided and folder_id is not provided, the action will search for a folder with this exact name. If multiple folders match, you'll receive a list to choose from. If no folder matches, an error is returned.","examples":["Marketing Materials","Q4 Reports","Project Documents"],"title":"Folder Name","type":"string"},"title":{"description":"The title for the new Google Sheet. If omitted, Google will create a spreadsheet with a default name like 'Untitled spreadsheet'.","examples":["Q4 Financial Report","Project Plan Ideas","Meeting Notes"],"title":"Title","type":"string"}},"title":"CreateGoogleSheetRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new column in a Google Spreadsheet. Specify the target sheet using sheet_id (numeric) or sheet_name (text). If neither is provided, defaults to the first sheet (sheet_id=0).","name":"GOOGLESHEETS_CREATE_SPREADSHEET_COLUMN","parameters":{"properties":{"include_spreadsheet_in_response":{"description":"If true, the updated spreadsheet will be included in the response. Defaults to true if not specified.","examples":[true,false],"title":"Include Spreadsheet In Response","type":"boolean"},"inherit_from_before":{"default":false,"description":"If true, the new column inherits properties (e.g., formatting, width) from the column immediately to its left (the preceding column). If false (default), it inherits from the column immediately to its right (the succeeding column). This is ignored if there is no respective preceding or succeeding column.","examples":[true,false],"title":"Inherit From Before","type":"boolean"},"insert_index":{"default":0,"description":"The 0-based index at which the new column will be inserted. For example, an index of 0 inserts the column before the current first column (A), and an index of 1 inserts it between the current columns A and B.","examples":[0,1,5],"title":"Insert Index","type":"integer"},"response_include_grid_data":{"description":"If true, grid data will be included in the response (only used if includeSpreadsheetInResponse is true).","examples":[true,false],"title":"Response Include Grid Data","type":"boolean"},"response_ranges":{"description":"Limits the ranges of the spreadsheet to include in the response. Only used if includeSpreadsheetInResponse is true.","examples":[["Sheet1!A1:D10"],["A1:B5","C1:D10"]],"items":{"type":"string"},"title":"Response Ranges","type":"array"},"sheet_id":{"description":"The numeric identifier of the specific sheet (tab) within the spreadsheet. Defaults to 0 (the first sheet) if neither sheet_id nor sheet_name is provided. Use GOOGLESHEETS_GET_SHEET_NAMES or GOOGLESHEETS_FIND_WORKSHEET_BY_TITLE to obtain the sheet_id from a sheet name.","examples":[0,123456789],"title":"Sheet Id","type":"integer"},"sheet_name":{"description":"The name (title) of the sheet/tab where the column will be added. If provided, the action will look up the sheet_id automatically. If both sheet_id and sheet_name are provided, sheet_id takes precedence.","examples":["Sheet1","Data","Q1 Report"],"title":"Sheet Name","type":"string"},"spreadsheet_id":{"description":"The unique identifier of the Google Spreadsheet where the column will be created.","examples":["1qZysYd_N2cZ9gkZ8sR7M0rP8sX5vW2bA9gV3rF1cE0"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheet_id"],"title":"CreateSpreadsheetColumnRequest","type":"object"}},"type":"function"},{"function":{"description":"Inserts a new, empty row into a specified sheet of a Google Spreadsheet at a given index, optionally inheriting formatting from the row above.","name":"GOOGLESHEETS_CREATE_SPREADSHEET_ROW","parameters":{"properties":{"include_spreadsheet_in_response":{"description":"If True, the response will include the full updated Spreadsheet resource. Default behavior includes the spreadsheet when this parameter is not specified.","examples":[true,false],"title":"Include Spreadsheet In Response","type":"boolean"},"inherit_from_before":{"default":false,"description":"If True, the newly inserted row will inherit formatting and properties from the row immediately preceding its insertion point. If False, it will have default formatting.","examples":[true,false],"title":"Inherit From Before","type":"boolean"},"insert_index":{"default":0,"description":"The 0-based index at which the new row should be inserted. For example, an index of 0 inserts the row at the beginning of the sheet. If the index is greater than the current number of rows, the row is appended.","examples":[0,5,100],"title":"Insert Index","type":"integer"},"response_include_grid_data":{"description":"If True, grid data will be included in the response spreadsheet. Only meaningful when include_spreadsheet_in_response is True. Default is False.","examples":[true,false],"title":"Response Include Grid Data","type":"boolean"},"response_ranges":{"description":"Limits the ranges included in the response spreadsheet. Only meaningful when include_spreadsheet_in_response is True. Use A1 notation (e.g., ['Sheet1!A1:D10']).","examples":[["Sheet1!A1:D10"],["Sheet1!A:A","Sheet2!B:B"]],"items":{"type":"string"},"title":"Response Ranges","type":"array"},"sheet_id":{"description":"The numeric identifier of the sheet (tab) within the spreadsheet where the row will be inserted. This ID (gid) is found in the URL of the spreadsheet (e.g., '0' for the first sheet). Either sheet_id or sheet_name must be provided.","examples":[0,123456789],"title":"Sheet Id","type":"integer"},"sheet_name":{"description":"The human-readable name of the sheet (tab) within the spreadsheet where the row will be inserted (e.g., 'Sheet1'). Either sheet_id or sheet_name must be provided. If both are provided, sheet_id takes precedence.","examples":["Sheet1","Data","Q3 Report"],"title":"Sheet Name","type":"string"},"spreadsheet_id":{"description":"The unique identifier of the Google Spreadsheet. Can be provided as the ID (e.g., '1qpyC0XzHc_-_d824s2VfopkHh7D0jW4aXCS1D_AlGA') or as a full URL (the ID will be extracted automatically).","examples":["1qpyC0XzHc_-_d824s2VfopkHh7D0jW4aXCS1D_AlGA"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheet_id"],"title":"CreateSpreadsheetRowRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to delete specified rows or columns from a sheet in a Google Spreadsheet. Use when you need to remove a range of rows or columns.","name":"GOOGLESHEETS_DELETE_DIMENSION","parameters":{"properties":{"delete_dimension_request":{"additionalProperties":false,"description":"The details for the delete dimension request object.","properties":{"range":{"additionalProperties":false,"description":"The range of the dimension to delete.","properties":{"dimension":{"description":"The dimension to delete.","enum":["ROWS","COLUMNS"],"examples":["ROWS","COLUMNS"],"title":"Dimension","type":"string"},"end_index":{"description":"The zero-based end index of the range to delete, exclusive. Must be greater than start_index and at most equal to the sheet's current row/column count. Note: Cannot delete all rows or columns from a sheet - at least one row and one column must remain.","examples":[1,10],"exclusiveMinimum":0,"title":"End Index","type":"integer"},"sheet_id":{"description":"The unique numeric ID of the sheet (not the index/position). This ID is assigned by Google Sheets and does not change when sheets are reordered.","examples":[0,123456789],"title":"Sheet Id","type":"integer"},"start_index":{"description":"The zero-based start index of the range to delete, inclusive. Must be less than end_index and within the sheet's current row/column count. Note: Cannot delete all rows or columns from a sheet - at least one row and one column must remain.","examples":[0,5],"minimum":0,"title":"Start Index","type":"integer"}},"required":["sheet_id","dimension","start_index","end_index"],"title":"Range","type":"object"}},"required":["range"],"title":"DeleteDimensionRequestDetails","type":"object"},"dimension":{"description":"The dimension to delete (ROWS or COLUMNS).","enum":["ROWS","COLUMNS"],"examples":["ROWS","COLUMNS"],"title":"Dimension","type":"string"},"end_index":{"description":"The zero-based end index of the range to delete, exclusive. Must be greater than start_index and at most equal to the sheet's current row/column count. Note: Cannot delete all rows or columns from a sheet - at least one row and one column must remain.","examples":[1,10],"title":"End Index","type":"integer"},"include_spreadsheet_in_response":{"description":"Determines if the update response should include the spreadsheet resource.","examples":[true,false],"title":"Include Spreadsheet In Response","type":"boolean"},"response_include_grid_data":{"description":"True if grid data should be returned. This parameter is ignored if a field mask was set in the request.","examples":[true,false],"title":"Response Include Grid Data","type":"boolean"},"response_ranges":{"description":"Limits the ranges of cells included in the response spreadsheet.","examples":[["Sheet1!A1:B2","Sheet2!C:C"]],"items":{"type":"string"},"title":"Response Ranges","type":"array"},"sheet_id":{"description":"The unique numeric ID of the sheet (not the index/position). This ID is assigned by Google Sheets and does not change when sheets are reordered. Use GOOGLESHEETS_GET_SPREADSHEET_INFO to find the sheet ID, or use sheet_name instead. Either sheet_id or sheet_name must be provided.","examples":[0,123456789],"title":"Sheet Id","type":"integer"},"sheet_name":{"description":"The name/title of the sheet from which to delete the dimension. Using sheet_name is recommended as it's more intuitive than sheet_id. Either sheet_id or sheet_name must be provided.","examples":["Sheet1","MySheet"],"title":"Sheet Name","type":"string"},"spreadsheet_id":{"description":"The ID of the spreadsheet.","examples":["abc123xyz789"],"title":"Spreadsheet Id","type":"string"},"start_index":{"description":"The zero-based start index of the range to delete, inclusive. Must be less than end_index and within the sheet's current row/column count. Note: Cannot delete all rows or columns from a sheet - at least one row and one column must remain.","examples":[0,5],"title":"Start Index","type":"integer"}},"required":["spreadsheet_id"],"title":"DeleteDimensionRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to delete a sheet (worksheet) from a spreadsheet. Use when you need to remove a specific sheet from a Google Sheet document.","name":"GOOGLESHEETS_DELETE_SHEET","parameters":{"properties":{"includeSpreadsheetInResponse":{"description":"Determines if the spreadsheet resource should be returned in the response. If true, the response includes the updated spreadsheet resource with all its sheets, properties, and metadata.","title":"Include Spreadsheet In Response","type":"boolean"},"responseIncludeGridData":{"description":"True if grid data should be returned in the response spreadsheet. Only meaningful when includeSpreadsheetInResponse is true and no field mask is set on the request.","title":"Response Include Grid Data","type":"boolean"},"responseRanges":{"description":"Limits which ranges are returned when includeSpreadsheetInResponse is true. Only meaningful if includeSpreadsheetInResponse is set to true. Ranges should be in A1 notation (e.g., 'Sheet1!A1:B10').","examples":[["Sheet1!A1:B10","Sheet2!C1:D20"]],"items":{"type":"string"},"title":"Response Ranges","type":"array"},"sheetId":{"description":"The ID of the sheet to delete. Note: A spreadsheet must contain at least one sheet, so you cannot delete the last remaining sheet. If the sheet is of DATA_SOURCE type, the associated DataSource is also deleted.","examples":[123456789],"title":"Sheet Id","type":"integer"},"spreadsheetId":{"description":"The ID of the spreadsheet from which to delete the sheet.","examples":["abc123xyz789"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheetId","sheetId"],"title":"DeleteSheetRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use direct Google Sheets actions instead: - GOOGLESHEETS_VALUES_GET / GOOGLESHEETS_BATCH_GET for reads - GOOGLESHEETS_VALUES_UPDATE / GOOGLESHEETS_UPDATE_VALUES_BATCH / GOOGLESHEETS_SPREADSHEETS_VALUES_APPEND for writes Execute SQL queries against Google Sheets tables. Supports SELECT, INSERT, UPDATE, DELETE operations and WITH clauses (CTEs) with familiar SQL syntax. Tables are automatically detected and mapped from the spreadsheet structure.","name":"GOOGLESHEETS_EXECUTE_SQL","parameters":{"properties":{"delete_method":{"default":"clear","description":"For DELETE operations: 'clear' preserves row structure, 'remove_rows' shifts data up","enum":["clear","remove_rows"],"title":"Delete Method","type":"string"},"dry_run":{"default":false,"description":"Preview changes without applying them (for write operations)","title":"Dry Run","type":"boolean"},"spreadsheet_id":{"description":"The unique alphanumeric ID of the Google Spreadsheet extracted from the URL. Format: A long string of letters, numbers, hyphens, and underscores (typically 44 characters). Find it in the URL: https://docs.google.com/spreadsheets/d/{SPREADSHEET_ID}/edit. Must be a valid ID - values like 'auto' are NOT valid and will fail.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"sql":{"description":"Complete SQL query to execute. Must begin with SELECT, INSERT, UPDATE, DELETE, or WITH. Supports Common Table Expressions (CTEs) using WITH clause for complex queries. Note: WITH clauses require the sqlglot library for full support; simple SELECT/INSERT/UPDATE/DELETE operations work without it. Use table names (sheet names) in FROM/INTO clauses, not A1 range notation. The query must include proper SQL clauses (e.g., SELECT columns FROM table, not just a column name or condition). Example: SELECT * FROM \"Sheet1\" WHERE A = 'value' (correct) instead of just A = 'value' (incorrect).","examples":["SELECT * FROM \"Sales_Data\" LIMIT 10","WITH ActiveUsers AS (SELECT * FROM \"Users\" WHERE status = 'active') SELECT name, email FROM ActiveUsers","INSERT INTO \"Customers\" (name, email) VALUES ('John Doe', 'john@example.com')","UPDATE \"Inventory\" SET quantity = quantity - 10 WHERE sku = 'ABC123'","DELETE FROM \"Old_Data\" WHERE date < '2023-01-01'"],"title":"Sql","type":"string"}},"required":["spreadsheet_id","sql"],"title":"ExecuteSqlRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to find and replace text in a Google Spreadsheet. Use when you need to fix formula errors, update values, or perform bulk text replacements across cells. Common use cases: - Fix #ERROR! cells by replacing with empty string or correct formula - Update old values with new ones across multiple cells - Fix formula references or patterns - Clean up data formatting issues","name":"GOOGLESHEETS_FIND_REPLACE","parameters":{"properties":{"allSheets":{"default":false,"description":"Whether to search across all sheets in the spreadsheet. Mutually exclusive with sheet_id and range parameters.","examples":[true,false],"title":"All Sheets","type":"boolean"},"endColumnIndex":{"description":"The end column (0-indexed, exclusive) of the range. Column A = 0, B = 1, etc. Only used when range_sheet_id is provided without a 'range' parameter.","examples":[3,10,26],"title":"End Column Index","type":"integer"},"endRowIndex":{"description":"The end row (0-indexed, exclusive) of the range. Only used when range_sheet_id is provided without a 'range' parameter.","examples":[10,50,100],"title":"End Row Index","type":"integer"},"find":{"description":"The text to find. Can be a literal string or a regular expression pattern.","examples":["#ERROR!","=SUM(A1:A10)","old_value"],"title":"Find","type":"string"},"includeFormulas":{"description":"Whether to include cells with formulas in the search. If true, formulas are searched and can be replaced. If false, only cell values (not formulas) are searched. If not specified, the default API behavior applies (both formulas and values are searched).","examples":[true,false],"title":"Include Formulas","type":"boolean"},"matchCase":{"default":false,"description":"Whether the search should be case-sensitive.","examples":[true,false],"title":"Match Case","type":"boolean"},"matchEntireCell":{"default":false,"description":"Whether to match only cells that contain the entire search term.","examples":[true,false],"title":"Match Entire Cell","type":"boolean"},"range":{"description":"A1 notation range string to search within (e.g., 'A1:B10', 'Sheet1!A1:B10'). When using A1 notation with a sheet name, you must also provide range_sheet_id to specify the numeric sheet ID (the API requires numeric IDs). Alternatively, use the GridRange parameters (range_sheet_id with optional row/column indices) for explicit numeric control. Mutually exclusive with sheet_id and all_sheets.","examples":["A1:B10","Sheet1!A1:Z100","A:D"],"title":"Range","type":"string"},"rangeSheetId":{"description":"The numeric sheet ID for a GridRange-based search. Required when using the 'range' parameter with A1 notation. Can also be used alone or with row/column index parameters to define a specific range. Mutually exclusive with sheet_id and all_sheets.","examples":[0,123456789],"title":"Range Sheet Id","type":"integer"},"replace":{"description":"The text to replace the found instances with.","examples":["","=SUM(A1:A5)","new_value"],"title":"Replace","type":"string"},"searchByRegex":{"default":false,"description":"Whether to treat the find text as a regular expression.","examples":[true,false],"title":"Search By Regex","type":"boolean"},"sheetId":{"description":"The numeric ID of the sheet to search the entire sheet (e.g., 0 for the first sheet). Mutually exclusive with sheet_name, range/range_sheet_id parameters, and all_sheets. You must specify exactly one scope: either sheet_id (entire sheet), sheet_name, range/range_sheet_id (specific range), or all_sheets.","examples":[0,123456789],"title":"Sheet Id","type":"integer"},"sheetName":{"description":"The name/title of the sheet (tab) to search within (e.g., 'Sheet1', 'Sales Data'). The sheet name will be resolved to its numeric sheet ID. Mutually exclusive with sheet_id, range/range_sheet_id parameters, and all_sheets.","examples":["Sheet1","Sales Data","Q4 Report"],"title":"Sheet Name","type":"string"},"spreadsheetId":{"description":"The ID of the spreadsheet to update.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"startColumnIndex":{"description":"The start column (0-indexed, inclusive) of the range. Column A = 0, B = 1, etc. Only used when range_sheet_id is provided without a 'range' parameter.","examples":[0,2,5],"title":"Start Column Index","type":"integer"},"startRowIndex":{"description":"The start row (0-indexed, inclusive) of the range. Only used when range_sheet_id is provided without a 'range' parameter.","examples":[0,5,10],"title":"Start Row Index","type":"integer"}},"required":["spreadsheetId","find","replace"],"title":"FindReplaceRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GetSpreadsheetInfo instead. Finds a worksheet by its exact, case-sensitive title within a Google Spreadsheet; returns a boolean indicating if found and the matched worksheet's metadata when found, or None when not found.","name":"GOOGLESHEETS_FIND_WORKSHEET_BY_TITLE","parameters":{"properties":{"spreadsheet_id":{"description":"The unique identifier of the Google Spreadsheet from the URL (e.g., https://docs.google.com/spreadsheets/d/{spreadsheet_id}/edit). Important: This is NOT the spreadsheet's display name/title. It is the long alphanumeric string (typically 40-45 characters) from the URL containing only letters, numbers, hyphens, and underscores.","examples":["1aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789_drivE","1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"worksheet_title":{"description":"The exact, case-sensitive title of the worksheet (tab name) to find.","examples":["Sheet1","Q3 Report","Customer Data"],"title":"Worksheet Title","type":"string"}},"required":["spreadsheet_id","worksheet_title"],"title":"FindWorksheetByTitleRequest","type":"object"}},"type":"function"},{"function":{"description":"Applies text and background cell formatting to a specified range in a Google Sheets worksheet.","name":"GOOGLESHEETS_FORMAT_CELL","parameters":{"description":"Parameters for applying formatting to a cell range in a Google Sheet.\n\nIMPORTANT: Specify the cell range in ONE of two ways:\n1. Use 'range' field with A1 notation (RECOMMENDED): \"F9\", \"A1:B5\"\n2. Use all four index fields manually: start_row_index, start_column_index, end_row_index, end_column_index\n\nDo NOT provide both - the validator will reject mixed input.","properties":{"blue":{"default":0.9,"description":"Blue component of the background color (0.0-1.0).","examples":["0.0","0.5","1.0"],"title":"Blue","type":"number"},"bold":{"default":false,"description":"Apply bold formatting.","examples":["true","false"],"title":"Bold","type":"boolean"},"end_column_index":{"description":"OPTION 2: 0-based index of the column AFTER the last column (exclusive). Required if 'range' is not provided. Must provide ALL four index fields together.","examples":[1,2,6],"title":"End Column Index","type":"integer"},"end_row_index":{"description":"OPTION 2: 0-based index of the row AFTER the last row (exclusive). Required if 'range' is not provided. Must provide ALL four index fields together.","examples":[1,9],"title":"End Row Index","type":"integer"},"fontSize":{"default":10,"description":"Font size in points.","examples":["10","12","14"],"title":"Font Size","type":"integer"},"green":{"default":0.9,"description":"Green component of the background color (0.0-1.0).","examples":["0.0","0.5","1.0"],"title":"Green","type":"number"},"italic":{"default":false,"description":"Apply italic formatting.","examples":["true","false"],"title":"Italic","type":"boolean"},"range":{"description":"OPTION 1: Cell range in A1 notation (RECOMMENDED). Supports: single cells ('A1', 'F9'), cell ranges ('A1:B5'), entire columns ('A', 'I:J'), entire rows ('1', '1:5'). Also accepts sheet-prefixed ranges ('Sheet1!A1', 'Instagram Calendar!A1:E1') for convenience - if provided, the sheet prefix is stripped and ignored. The actual sheet used is determined by the sheet_name or worksheet_id parameter. Provide EITHER this field OR all four index fields below, not both.","examples":["A1","F9","B2:D4","C1:C10","A:C","I:J","1:5","Sheet1!A1:E1"],"title":"Range","type":"string"},"red":{"default":0.9,"description":"Red component of the background color (0.0-1.0).","examples":["0.0","0.5","1.0"],"title":"Red","type":"number"},"sheet_name":{"description":"The worksheet name/title (e.g., 'Sheet1', 'Q3 Report'). Provide either this field OR worksheet_id, not both. If both are provided, sheet_name takes precedence and will be resolved to worksheet_id.","examples":["Sheet1","Q3 Report","Customer Data"],"title":"Sheet Name","type":"string"},"spreadsheet_id":{"description":"Identifier of the Google Sheets spreadsheet.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"start_column_index":{"description":"OPTION 2: 0-based column index (A = 0, B = 1, F = 5). Required if 'range' is not provided. Must provide ALL four index fields together.","examples":[0,1,5],"title":"Start Column Index","type":"integer"},"start_row_index":{"description":"OPTION 2: 0-based row index (row 1 = index 0, row 9 = index 8). Required if 'range' is not provided. Must provide ALL four index fields together.","examples":[0,8],"title":"Start Row Index","type":"integer"},"strikethrough":{"default":false,"description":"Apply strikethrough formatting.","examples":["true","false"],"title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Apply underline formatting.","examples":["true","false"],"title":"Underline","type":"boolean"},"worksheet_id":{"default":0,"description":"The worksheet identifier. Accepts EITHER: (1) The sheetId from the Google Sheets API (a large number like 1534097477, obtainable via GOOGLESHEETS_GET_SPREADSHEET_INFO), OR (2) The 0-based positional index of the worksheet (0 for first sheet, 1 for second, etc.). The action will first try to match by sheetId, then fall back to matching by index. Defaults to 0 (first sheet). Provide either this field OR sheet_name, not both.","examples":[0,1534097477],"title":"Worksheet Id","type":"integer"}},"required":["spreadsheet_id"],"title":"FormatCellRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GOOGLESHEETS_BATCH_GET instead. Tool to return one or more ranges of values from a spreadsheet. Use when you need to retrieve data from multiple ranges in a single request.","name":"GOOGLESHEETS_GET_BATCH_VALUES","parameters":{"properties":{"date_time_render_option":{"description":"How dates, times, and durations should be represented in the output.","enum":["SERIAL_NUMBER","FORMATTED_STRING"],"title":"DateTimeRenderOption","type":"string"},"major_dimension":{"description":"The major dimension for results.","enum":["DIMENSION_UNSPECIFIED","ROWS","COLUMNS"],"title":"MajorDimension","type":"string"},"ranges":{"description":"The A1 notation or R1C1 notation of the ranges to retrieve values from. Specify one or more ranges (e.g., ['Sheet1!A1:B10', 'Sheet2!C1:D5']). For sheet names with spaces or special characters, wrap in single quotes (e.g., \"'My Sheet'!A1:B10\").","examples":[["Sheet1!A1:B10"],["Sheet1!A1:B10","Sheet2!C1:D5"]],"items":{"type":"string"},"minItems":1,"title":"Ranges","type":"array"},"spreadsheet_id":{"description":"The ID of the spreadsheet to retrieve data from. This is the unique identifier found in the spreadsheet URL between '/d/' and '/edit' (e.g., '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms').","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"value_render_option":{"description":"How values should be rendered in the output.","enum":["FORMATTED_VALUE","UNFORMATTED_VALUE","FORMULA"],"title":"ValueRenderOption","type":"string"}},"required":["spreadsheet_id","ranges"],"title":"BatchGetValuesRequest","type":"object"}},"type":"function"},{"function":{"description":"List conditional formatting rules for each sheet (or a selected sheet) in a normalized, easy-to-edit form. Use when you need to view, audit, or prepare to modify conditional format rules.","name":"GOOGLESHEETS_GET_CONDITIONAL_FORMAT_RULES","parameters":{"properties":{"exclude_tables_in_banded_ranges":{"description":"True if tables should be excluded in the banded ranges. False if not set.","title":"Exclude Tables In Banded Ranges","type":"boolean"},"sheet_id":{"description":"Optional filter: return rules only for the sheet with this exact numeric sheetId. If not provided, returns rules for all sheets. If both sheet_title and sheet_id are provided, sheet_id takes precedence.","examples":[0,1534097477],"title":"Sheet Id","type":"integer"},"sheet_title":{"description":"Optional filter: return rules only for the sheet with this exact title. If not provided, returns rules for all sheets.","examples":["Sheet1","Sales Data"],"title":"Sheet Title","type":"string"},"spreadsheet_id":{"description":"Unique identifier of the Google Spreadsheet, typically found in its URL.","examples":["12345abcdefGHIJKLMNOPqrstuvwxyz67890UVWXYZ"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheet_id"],"title":"GetConditionalFormatRulesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to extract data validation rules from a Google Sheets spreadsheet. Use when you need to understand dropdown lists, allowed values, custom formulas, or other validation constraints for cells.","name":"GOOGLESHEETS_GET_DATA_VALIDATION_RULES","parameters":{"properties":{"includeEmpty":{"default":false,"description":"If true, include cells without validation rules in the output. Default is false.","title":"Include Empty","type":"boolean"},"ranges":{"description":"Optional list of A1 ranges to scan. If omitted, the entire sheet(s) will be scanned. WARNING: Scanning entire large sheets may be slow.","examples":[["A1:A100","B1:B100"],["Sheet1!A:A"]],"items":{"type":"string"},"title":"Ranges","type":"array"},"sheetId":{"description":"Optional sheet ID to filter by. If omitted, all sheets will be scanned.","examples":[0,123456],"title":"Sheet Id","type":"integer"},"sheetTitle":{"description":"Optional sheet title to filter by. If omitted, all sheets will be scanned.","examples":["Sheet1","Data"],"title":"Sheet Title","type":"string"},"spreadsheetId":{"description":"The ID of the spreadsheet to request.","examples":["abc123xyz789"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheetId"],"title":"GetDataValidationRulesRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all worksheet names from a specified Google Spreadsheet (which must exist), useful for discovering sheets before further operations.","name":"GOOGLESHEETS_GET_SHEET_NAMES","parameters":{"properties":{"exclude_hidden":{"default":false,"description":"When True, hidden sheets will be excluded from the results. When False (default), all sheets including hidden ones are returned. Hidden sheets are sheets that have been hidden via the 'Hide sheet' option in Google Sheets UI.","title":"Exclude Hidden","type":"boolean"},"spreadsheet_id":{"description":"The unique identifier of the Google Spreadsheet (alphanumeric string, typically 44 characters). Extract only the ID portion from URLs - do not include leading/trailing slashes, '/edit' suffixes, query parameters, or URL fragments. From 'https://docs.google.com/spreadsheets/d/1qpyC0XzvTcKT6EISywY/edit#gid=0', use only '1qpyC0XzvTcKT6EISywY'.","examples":["1qpyC0XzvTcKT6EISywY_7H7D7No1tpxEXAMPLE_ID"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheet_id"],"title":"GetSheetNamesRequest","type":"object"}},"type":"function"},{"function":{"description":"Returns the spreadsheet at the given ID, filtered by the specified data filters. Use this tool when you need to retrieve specific subsets of data from a Google Sheet based on criteria like A1 notation, developer metadata, or grid ranges. Important: This action is designed for filtered data retrieval. While it accepts empty filters and returns full metadata in that case, GOOGLESHEETS_GET_SPREADSHEET_INFO is the recommended action for unfiltered spreadsheet retrieval.","name":"GOOGLESHEETS_GET_SPREADSHEET_BY_DATA_FILTER","parameters":{"properties":{"dataFilters":{"description":"The DataFilters used to select which ranges to retrieve. Supports A1 notation (e.g., 'Sheet1!A1:B2'), developer metadata lookup, or grid range filters. If empty or omitted, returns full spreadsheet metadata. Recommended: Use GOOGLESHEETS_GET_SPREADSHEET_INFO for unfiltered retrieval as it is the dedicated action for that purpose.","items":{"properties":{"a1Range":{"description":"Selects data that matches the specified A1 range. Exactly one of a1_range, developer_metadata_lookup, or grid_range must be set.","examples":["Sheet1!A1:B2"],"title":"A1 Range","type":"string"},"developerMetadataLookup":{"additionalProperties":false,"description":"Selects data associated with developer metadata. Exactly one of a1_range, developer_metadata_lookup, or grid_range must be set.","properties":{"locationType":{"description":"Location type of metadata.","enum":["ROW","COLUMN","SHEET","SPREADSHEET","OBJECT"],"title":"DeveloperMetadataLookupLocationType","type":"string"},"metadataId":{"description":"Filter by metadata ID.","examples":[123],"title":"Metadata Id","type":"integer"},"metadataKey":{"description":"Filter by metadata key.","examples":["project_id"],"title":"Metadata Key","type":"string"},"metadataValue":{"description":"Filter by metadata value.","examples":["alpha"],"title":"Metadata Value","type":"string"},"visibility":{"description":"Metadata visibility.","enum":["DOCUMENT","PROJECT"],"title":"DeveloperMetadataLookupVisibility","type":"string"}},"title":"DeveloperMetadataLookup","type":"object"},"gridRange":{"additionalProperties":false,"description":"Selects data that matches the range described by the GridRange. Exactly one of a1_range, developer_metadata_lookup, or grid_range must be set.","properties":{"endColumnIndex":{"description":"The end column (0-based, exclusive) of the range.","examples":[5],"exclusiveMinimum":0,"title":"End Column Index","type":"integer"},"endRowIndex":{"description":"The end row (0-based, exclusive) of the range.","examples":[10],"exclusiveMinimum":0,"title":"End Row Index","type":"integer"},"sheetId":{"description":"The ID of the sheet this range is on.","examples":[0],"title":"Sheet Id","type":"integer"},"startColumnIndex":{"description":"The start column (0-based, inclusive) of the range.","examples":[0],"minimum":0,"title":"Start Column Index","type":"integer"},"startRowIndex":{"description":"The start row (0-based, inclusive) of the range.","examples":[0],"minimum":0,"title":"Start Row Index","type":"integer"}},"title":"GridRange","type":"object"}},"title":"DataFilter","type":"object"},"title":"Data Filters","type":"array"},"excludeTablesInBandedRanges":{"description":"True if tables should be excluded in the banded ranges. False if not set.","examples":[false],"title":"Exclude Tables In Banded Ranges","type":"boolean"},"includeGridData":{"description":"True if grid data should be returned. Ignored if a field mask is set.","examples":[true],"title":"Include Grid Data","type":"boolean"},"spreadsheetId":{"description":"The ID of the spreadsheet to request.","examples":["abc123xyz789"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheetId"],"title":"GetSpreadsheetByDataFilterRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves metadata for a Google Spreadsheet using its ID. By default, returns essential information (ID, title, sheet properties) to avoid payload size issues. Use the fields parameter for comprehensive metadata or specific fields.","name":"GOOGLESHEETS_GET_SPREADSHEET_INFO","parameters":{"description":"Request model for getting spreadsheet information.","properties":{"exclude_tables_in_banded_ranges":{"description":"Optional. If true, tables within banded ranges will be omitted from the response. Default is false when not specified.","examples":[true,false],"title":"Exclude Tables In Banded Ranges","type":"boolean"},"fields":{"description":"Optional. Field mask specifying which fields to return. Uses Google's field mask syntax (comma-separated, dot-notation for nested fields). If not specified, a default mask returning common fields (spreadsheet ID, title, sheet properties) is applied to avoid payload size issues. For full metadata, use '*' (not recommended for large spreadsheets). When set, includeGridData is ignored. Examples: 'sheets.properties(sheetId,title)', 'properties.title,sheets.properties.sheetId'.","examples":["sheets.properties(sheetId,title)","properties.title,sheets.properties","spreadsheetId,properties.title,sheets.properties(sheetId,title,index)"],"title":"Fields","type":"string"},"include_grid_data":{"description":"Optional. If true, grid data will be returned. This parameter is ignored if a field mask was set in the request. When false or not specified, only metadata is returned without cell values.","examples":[true,false],"title":"Include Grid Data","type":"boolean"},"ranges":{"description":"Optional. The ranges to retrieve from the spreadsheet, specified using A1 notation (e.g., 'Sheet1!A1:D5', 'Sheet2!A1:C4'). Multiple ranges can be requested simultaneously. If not specified, metadata for the entire spreadsheet is returned without grid data.","examples":[["Sheet1!A1:D5"],["Sheet1!A1:B10","Sheet2!C1:E20"]],"items":{"type":"string"},"title":"Ranges","type":"array"},"spreadsheet_id":{"description":"Required. The Google Sheets spreadsheet ID or full URL. Accepts either the ID alone (e.g., '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms') or a full Google Sheets URL (e.g., 'https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit'). The ID will be automatically extracted from URLs. Note: Published/embedded URLs (containing '/d/e/2PACX-...') are not supported.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit"],"minLength":1,"title":"Spreadsheet Id","type":"string"}},"title":"GetSpreadsheetInfoRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GOOGLESHEETS_GET_SHEET_NAMES and GOOGLESHEETS_GET_SPREADSHEET_INFO for sheet structure metadata, and GOOGLESHEETS_VALUES_GET for direct range inspection. This action is used to get the schema of a table in a Google Spreadsheet, call this action to get the schema of a table in a spreadsheet BEFORE YOU QUERY THE TABLE. Analyze table structure and infer column names, types, and constraints. Uses statistical analysis of sample data to determine the most likely data type for each column. Call this action after calling the LIST_TABLES action to get the schema of a table in a spreadsheet.","name":"GOOGLESHEETS_GET_TABLE_SCHEMA","parameters":{"properties":{"sample_size":{"default":50,"description":"Number of rows to sample for type inference","maximum":1000,"minimum":1,"title":"Sample Size","type":"integer"},"sheet_name":{"description":"Sheet/tab name if table_name is ambiguous across multiple sheets","title":"Sheet Name","type":"string"},"spreadsheet_id":{"description":"The unique identifier of the Google Spreadsheet. Must be a valid Google Sheets ID (typically a 44-character alphanumeric string). Do NOT use 'auto' - only 'table_name' supports auto-detection. You can get this ID from the spreadsheet URL or from SEARCH_SPREADSHEETS action.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"table_name":{"description":"Table name from LIST_TABLES response OR the visible Google Sheets tab name (e.g., 'Sales Data', 'Projections'). Use 'auto' to analyze the largest/most prominent table.","examples":["Sales Data","Projections","auto"],"title":"Table Name","type":"string"}},"required":["spreadsheet_id","table_name"],"title":"GetTableSchemaRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to insert new rows or columns into a sheet at a specified location. Use when you need to add empty rows or columns within an existing Google Sheet.","name":"GOOGLESHEETS_INSERT_DIMENSION","parameters":{"properties":{"include_spreadsheet_in_response":{"description":"True if the updated spreadsheet should be included in the response.","title":"Include Spreadsheet In Response","type":"boolean"},"insert_dimension":{"additionalProperties":false,"description":"The details for the insert dimension request.","properties":{"inherit_from_before":{"description":"If true, the new dimensions will inherit properties from the dimension before the startIndex. If false (default), they will inherit from the dimension at the startIndex. startIndex must be greater than 0 if inheritFromBefore is true.","examples":[true],"title":"Inherit From Before","type":"boolean"},"range":{"additionalProperties":false,"description":"Specifies the dimensions to insert. Can be provided as a nested object with sheet_id, dimension, start_index, and end_index, or these fields can be provided directly in insert_dimension (will be auto-wrapped).","properties":{"dimension":{"description":"The dimension to insert. Valid values are \"ROWS\" or \"COLUMNS\".","enum":["ROWS","COLUMNS"],"examples":["ROWS"],"title":"Dimension","type":"string"},"end_index":{"description":"The 0-based exclusive end index. Must be greater than start_index. The number of rows/columns inserted equals (end_index - start_index). For example, to insert 3 rows starting at row 1, use start_index=1 and end_index=4.","examples":[3],"title":"End Index","type":"integer"},"sheet_id":{"description":"The numeric ID of the sheet (tab) where dimensions will be inserted. For newly created spreadsheets, the first sheet typically has sheet_id=0. However, sheet IDs are not guaranteed to be 0 or sequential for all spreadsheets. If you encounter a 'No grid with id' error, retrieve the actual sheet ID from spreadsheet metadata using GOOGLESHEETS_GET_SPREADSHEET_INFO or GOOGLESHEETS_GET_SHEET_NAMES (found in 'sheets[].properties.sheetId').","examples":[0,123456789],"title":"Sheet Id","type":"integer"},"start_index":{"description":"The 0-based index where the new rows/columns will be inserted. For example, to insert at row 1 (the second row), use start_index=1. Must be less than end_index.","examples":[1],"title":"Start Index","type":"integer"}},"required":["sheet_id","dimension","start_index","end_index"],"title":"Range","type":"object"}},"required":["range"],"title":"Insert Dimension","type":"object"},"response_include_grid_data":{"description":"True if grid data should be included in the response (if includeSpreadsheetInResponse is true).","title":"Response Include Grid Data","type":"boolean"},"response_ranges":{"description":"Limits the ranges of the spreadsheet to include in the response.","items":{"type":"string"},"title":"Response Ranges","type":"array"},"spreadsheet_id":{"description":"The ID of the spreadsheet to update.","examples":["abc123spreadsheetId"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheet_id","insert_dimension"],"title":"InsertDimensionRequestModel","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GOOGLESHEETS_GET_SHEET_NAMES for tab discovery and GOOGLESHEETS_GET_SPREADSHEET_INFO for full sheet metadata. This action is used to list all tables in a Google Spreadsheet, call this action to get the list of tables in a spreadsheet. Discover all tables in a Google Spreadsheet by analyzing sheet structure and detecting data patterns. Uses heuristic analysis to find header rows, data boundaries, and table structures.","name":"GOOGLESHEETS_LIST_TABLES","parameters":{"properties":{"min_columns":{"default":1,"description":"Minimum number of columns to consider a valid table","minimum":1,"title":"Min Columns","type":"integer"},"min_confidence":{"default":0.5,"description":"Minimum confidence score (0.0-1.0) to consider a valid table","maximum":1,"minimum":0,"title":"Min Confidence","type":"number"},"min_rows":{"default":2,"description":"Minimum number of data rows to consider a valid table","minimum":1,"title":"Min Rows","type":"integer"},"spreadsheet_id":{"description":"The actual Google Spreadsheet ID (not a placeholder or spreadsheet name). Find it in the spreadsheet URL: https://docs.google.com/spreadsheets/d/{SPREADSHEET_ID}/edit. It is the alphanumeric string between '/d/' and '/edit' (e.g., '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'). IMPORTANT: Do NOT pass the spreadsheet name - only pass the alphanumeric ID from the URL. Do NOT pass template placeholders like '{{spreadsheet_id}}', '', or 'your-spreadsheet-id-here'.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheet_id"],"title":"ListTablesRequest","type":"object"}},"type":"function"},{"function":{"description":"Finds the first row in a Google Spreadsheet where a cell's entire content exactly matches the query string, searching within a specified A1 notation range or the first sheet by default.","name":"GOOGLESHEETS_LOOKUP_SPREADSHEET_ROW","parameters":{"properties":{"case_sensitive":{"default":false,"description":"If `True`, the query string search is case-sensitive.","title":"Case Sensitive","type":"boolean"},"date_time_render_option":{"description":"How dates and times are represented. FORMATTED_STRING: human-readable strings (e.g. '2025-12-18 11:17'). SERIAL_NUMBER: Excel-style serial numbers. Works with all value_render_option settings.","title":"Date Time Render Option","type":"string"},"normalize_whitespace":{"default":true,"description":"If `True`, strips leading and trailing whitespace from cell values before matching. This helps match cells like ' TOTAL ' or 'TOTAL ' when searching for 'TOTAL'.","title":"Normalize Whitespace","type":"boolean"},"query":{"description":"Exact text value to find; matches the entire content of a cell in a row.","examples":["John","Completed","ID-12345"],"title":"Query","type":"string"},"range":{"description":"A1 notation range to search within. Supports cell ranges (e.g., 'Sheet1!A1:D5'), column-only ranges (e.g., 'Sheet1!A:Z'), and row-only ranges (e.g., 'Sheet1!1:1'). Defaults to the first sheet if omitted. IMPORTANT: Sheet names with spaces must be single-quoted (e.g., \"'My Sheet'!A1:Z\"). Bare sheet names without ranges (e.g., 'Sheet1') are not supported - always specify a range.","examples":["Sheet1!A1:D5","Sheet1!A:Z","Sheet1!1:1","'Admin tickets'!A:A"],"title":"Range","type":"string"},"spreadsheet_id":{"description":"Identifier of the Google Spreadsheet to search.","examples":["1BiexwqQYjfC_BXy6zDQYJqb6zxzRyP9"],"title":"Spreadsheet Id","type":"string"},"value_render_option":{"default":"UNFORMATTED_VALUE","description":"How cell values are rendered in the returned row data. unformatted: raw values without display formatting — dates appear as serial numbers, e.g. 46009.47 (default, keeps consistency with UPSERT). formatted: display-formatted values — dates appear as strings, e.g. '2025-12-18'. formula: raw formulas instead of computed values.","enum":["FORMATTED_VALUE","UNFORMATTED_VALUE","FORMULA"],"title":"Value Render Option","type":"string"}},"required":["spreadsheet_id","query"],"title":"LookupSpreadsheetRowRequest","type":"object"}},"type":"function"},{"function":{"description":"Add, update, delete, or reorder conditional format rules on a Google Sheet. Use when you need to create, modify, or remove conditional formatting without manually building batchUpdate requests. Supports four operations: ADD (create new rule), UPDATE (replace existing rule), DELETE (remove rule), MOVE (reorder rules by changing index).","name":"GOOGLESHEETS_MUTATE_CONDITIONAL_FORMAT_RULES","parameters":{"properties":{"index":{"description":"Zero-based index for the operation. Required for UPDATE, DELETE, MOVE. Optional for ADD (defaults to end of list).","examples":[0,1,2],"title":"Index","type":"integer"},"new_index":{"description":"Destination index for MOVE operation. Required when operation is MOVE.","examples":[0,1,2],"title":"New Index","type":"integer"},"operation":{"description":"Operation type: ADD (add new rule), UPDATE (replace rule), DELETE (remove rule), MOVE (change rule order/index).","enum":["ADD","UPDATE","DELETE","MOVE"],"examples":["ADD","UPDATE","DELETE","MOVE"],"title":"Operation","type":"string"},"rule":{"additionalProperties":false,"description":"Conditional format rule specification.","properties":{"booleanRule":{"additionalProperties":false,"description":"Boolean rule for conditional formatting.","properties":{"condition":{"additionalProperties":false,"description":"Condition that triggers formatting.","properties":{"type":{"description":"Condition type. Valid values: NUMBER_GREATER, NUMBER_GREATER_THAN_EQ, NUMBER_LESS, NUMBER_LESS_THAN_EQ, NUMBER_EQ, NUMBER_NOT_EQ, NUMBER_BETWEEN, NUMBER_NOT_BETWEEN, TEXT_CONTAINS, TEXT_NOT_CONTAINS, TEXT_STARTS_WITH, TEXT_ENDS_WITH, TEXT_EQ, TEXT_NOT_EQ, TEXT_IS_EMAIL, TEXT_IS_URL, DATE_EQ, DATE_BEFORE, DATE_AFTER, DATE_ON_OR_BEFORE, DATE_ON_OR_AFTER, DATE_BETWEEN, DATE_NOT_BETWEEN, DATE_NOT_EQ, DATE_IS_VALID, ONE_OF_RANGE, ONE_OF_LIST, BLANK, NOT_BLANK, CUSTOM_FORMULA, BOOLEAN, FILTER_EXPRESSION.","enum":["CONDITION_TYPE_UNSPECIFIED","NUMBER_GREATER","NUMBER_GREATER_THAN_EQ","NUMBER_LESS","NUMBER_LESS_THAN_EQ","NUMBER_EQ","NUMBER_NOT_EQ","NUMBER_BETWEEN","NUMBER_NOT_BETWEEN","TEXT_CONTAINS","TEXT_NOT_CONTAINS","TEXT_STARTS_WITH","TEXT_ENDS_WITH","TEXT_EQ","TEXT_NOT_EQ","TEXT_IS_EMAIL","TEXT_IS_URL","DATE_EQ","DATE_BEFORE","DATE_AFTER","DATE_ON_OR_BEFORE","DATE_ON_OR_AFTER","DATE_BETWEEN","DATE_NOT_BETWEEN","DATE_NOT_EQ","DATE_IS_VALID","ONE_OF_RANGE","ONE_OF_LIST","BLANK","NOT_BLANK","CUSTOM_FORMULA","BOOLEAN","FILTER_EXPRESSION"],"title":"Type","type":"string"},"values":{"description":"Values for the condition.","items":{"description":"Value for boolean condition.","properties":{"relativeDate":{"description":"Relative date value (PAST_YEAR, PAST_MONTH, PAST_WEEK, YESTERDAY, TODAY, TOMORROW). Valid only for DATE_BEFORE, DATE_AFTER, DATE_ON_OR_BEFORE, or DATE_ON_OR_AFTER condition types.","title":"Relative Date","type":"string"},"userEnteredValue":{"description":"Value as entered by user (formula, number, or text). Always provide as a string, even for numeric values (e.g., '0.01' not 0.01). For CUSTOM_FORMULA conditions: formulas must begin with '=' or '+'; the formula must evaluate to true/false; same-sheet references work normally (e.g., '=A1>100'); cross-sheet references require INDIRECT function (use '=COUNTIF(INDIRECT(\"Sheet2!A:A\"),A1)>0' instead of '=COUNTIF(Sheet2!A:A,A1)>0'). The value is parsed by Google Sheets as if typed into a cell.","title":"User Entered Value","type":"string"}},"title":"ConditionValue","type":"object"},"title":"Values","type":"array"}},"required":["type"],"title":"Condition","type":"object"},"format":{"additionalProperties":false,"description":"Formatting to apply when condition is true.","properties":{"backgroundColor":{"additionalProperties":false,"description":"RGB color representation.","properties":{"alpha":{"description":"Alpha/transparency (0.0-1.0).","title":"Alpha","type":"number"},"blue":{"description":"Blue component (0.0-1.0).","title":"Blue","type":"number"},"green":{"description":"Green component (0.0-1.0).","title":"Green","type":"number"},"red":{"description":"Red component (0.0-1.0).","title":"Red","type":"number"}},"title":"Color","type":"object"},"backgroundColorStyle":{"additionalProperties":false,"description":"Color style using either RGB or theme color.","properties":{"rgbColor":{"additionalProperties":false,"description":"RGB color representation.","properties":{"alpha":{"description":"Alpha/transparency (0.0-1.0).","title":"Alpha","type":"number"},"blue":{"description":"Blue component (0.0-1.0).","title":"Blue","type":"number"},"green":{"description":"Green component (0.0-1.0).","title":"Green","type":"number"},"red":{"description":"Red component (0.0-1.0).","title":"Red","type":"number"}},"title":"Color","type":"object"},"themeColor":{"description":"Theme color reference (TEXT, BACKGROUND, ACCENT1-6, LINK, etc.).","title":"Theme Color","type":"string"}},"title":"ColorStyle","type":"object"},"textFormat":{"additionalProperties":false,"description":"Text formatting options for conditional formatting.\n\nIMPORTANT: Only bold, italic, strikethrough, and foreground color are supported\nin conditional formatting. Fields like fontSize, fontFamily, and underline are NOT\nsupported and will cause API errors if included.","properties":{"bold":{"description":"Bold text.","title":"Bold","type":"boolean"},"foregroundColor":{"additionalProperties":false,"description":"RGB color representation.","properties":{"alpha":{"description":"Alpha/transparency (0.0-1.0).","title":"Alpha","type":"number"},"blue":{"description":"Blue component (0.0-1.0).","title":"Blue","type":"number"},"green":{"description":"Green component (0.0-1.0).","title":"Green","type":"number"},"red":{"description":"Red component (0.0-1.0).","title":"Red","type":"number"}},"title":"Color","type":"object"},"foregroundColorStyle":{"additionalProperties":false,"description":"Color style using either RGB or theme color.","properties":{"rgbColor":{"additionalProperties":false,"description":"RGB color representation.","properties":{"alpha":{"description":"Alpha/transparency (0.0-1.0).","title":"Alpha","type":"number"},"blue":{"description":"Blue component (0.0-1.0).","title":"Blue","type":"number"},"green":{"description":"Green component (0.0-1.0).","title":"Green","type":"number"},"red":{"description":"Red component (0.0-1.0).","title":"Red","type":"number"}},"title":"Color","type":"object"},"themeColor":{"description":"Theme color reference (TEXT, BACKGROUND, ACCENT1-6, LINK, etc.).","title":"Theme Color","type":"string"}},"title":"ColorStyle","type":"object"},"italic":{"description":"Italic text.","title":"Italic","type":"boolean"},"strikethrough":{"description":"Strikethrough text.","title":"Strikethrough","type":"boolean"}},"title":"TextFormat","type":"object"}},"title":"Format","type":"object"}},"required":["condition","format"],"title":"BooleanRule","type":"object"},"gradientRule":{"additionalProperties":false,"description":"Gradient rule for conditional formatting.","properties":{"maxpoint":{"additionalProperties":false,"description":"Maximum point in gradient.","properties":{"color":{"additionalProperties":false,"description":"RGB color representation.","properties":{"alpha":{"description":"Alpha/transparency (0.0-1.0).","title":"Alpha","type":"number"},"blue":{"description":"Blue component (0.0-1.0).","title":"Blue","type":"number"},"green":{"description":"Green component (0.0-1.0).","title":"Green","type":"number"},"red":{"description":"Red component (0.0-1.0).","title":"Red","type":"number"}},"title":"Color","type":"object"},"colorStyle":{"additionalProperties":false,"description":"Color style using either RGB or theme color.","properties":{"rgbColor":{"additionalProperties":false,"description":"RGB color representation.","properties":{"alpha":{"description":"Alpha/transparency (0.0-1.0).","title":"Alpha","type":"number"},"blue":{"description":"Blue component (0.0-1.0).","title":"Blue","type":"number"},"green":{"description":"Green component (0.0-1.0).","title":"Green","type":"number"},"red":{"description":"Red component (0.0-1.0).","title":"Red","type":"number"}},"title":"Color","type":"object"},"themeColor":{"description":"Theme color reference (TEXT, BACKGROUND, ACCENT1-6, LINK, etc.).","title":"Theme Color","type":"string"}},"title":"ColorStyle","type":"object"},"type":{"description":"Type (MIN, MAX, NUMBER, PERCENT, PERCENTILE).","title":"Type","type":"string"},"value":{"description":"Value when type is NUMBER, PERCENT, or PERCENTILE.","title":"Value","type":"string"}},"required":["type"],"title":"Maxpoint","type":"object"},"midpoint":{"additionalProperties":false,"description":"Point in gradient color scale.","properties":{"color":{"additionalProperties":false,"description":"RGB color representation.","properties":{"alpha":{"description":"Alpha/transparency (0.0-1.0).","title":"Alpha","type":"number"},"blue":{"description":"Blue component (0.0-1.0).","title":"Blue","type":"number"},"green":{"description":"Green component (0.0-1.0).","title":"Green","type":"number"},"red":{"description":"Red component (0.0-1.0).","title":"Red","type":"number"}},"title":"Color","type":"object"},"colorStyle":{"additionalProperties":false,"description":"Color style using either RGB or theme color.","properties":{"rgbColor":{"additionalProperties":false,"description":"RGB color representation.","properties":{"alpha":{"description":"Alpha/transparency (0.0-1.0).","title":"Alpha","type":"number"},"blue":{"description":"Blue component (0.0-1.0).","title":"Blue","type":"number"},"green":{"description":"Green component (0.0-1.0).","title":"Green","type":"number"},"red":{"description":"Red component (0.0-1.0).","title":"Red","type":"number"}},"title":"Color","type":"object"},"themeColor":{"description":"Theme color reference (TEXT, BACKGROUND, ACCENT1-6, LINK, etc.).","title":"Theme Color","type":"string"}},"title":"ColorStyle","type":"object"},"type":{"description":"Type (MIN, MAX, NUMBER, PERCENT, PERCENTILE).","title":"Type","type":"string"},"value":{"description":"Value when type is NUMBER, PERCENT, or PERCENTILE.","title":"Value","type":"string"}},"required":["type"],"title":"InterpolationPoint","type":"object"},"minpoint":{"additionalProperties":false,"description":"Minimum point in gradient.","properties":{"color":{"additionalProperties":false,"description":"RGB color representation.","properties":{"alpha":{"description":"Alpha/transparency (0.0-1.0).","title":"Alpha","type":"number"},"blue":{"description":"Blue component (0.0-1.0).","title":"Blue","type":"number"},"green":{"description":"Green component (0.0-1.0).","title":"Green","type":"number"},"red":{"description":"Red component (0.0-1.0).","title":"Red","type":"number"}},"title":"Color","type":"object"},"colorStyle":{"additionalProperties":false,"description":"Color style using either RGB or theme color.","properties":{"rgbColor":{"additionalProperties":false,"description":"RGB color representation.","properties":{"alpha":{"description":"Alpha/transparency (0.0-1.0).","title":"Alpha","type":"number"},"blue":{"description":"Blue component (0.0-1.0).","title":"Blue","type":"number"},"green":{"description":"Green component (0.0-1.0).","title":"Green","type":"number"},"red":{"description":"Red component (0.0-1.0).","title":"Red","type":"number"}},"title":"Color","type":"object"},"themeColor":{"description":"Theme color reference (TEXT, BACKGROUND, ACCENT1-6, LINK, etc.).","title":"Theme Color","type":"string"}},"title":"ColorStyle","type":"object"},"type":{"description":"Type (MIN, MAX, NUMBER, PERCENT, PERCENTILE).","title":"Type","type":"string"},"value":{"description":"Value when type is NUMBER, PERCENT, or PERCENTILE.","title":"Value","type":"string"}},"required":["type"],"title":"Minpoint","type":"object"}},"required":["minpoint","maxpoint"],"title":"GradientRule","type":"object"},"ranges":{"description":"Ranges where formatting applies (must be on same sheet).","items":{"description":"Range in a sheet where conditional formatting applies.","properties":{"endColumnIndex":{"description":"The end column (exclusive), 0-indexed.","title":"End Column Index","type":"integer"},"endRowIndex":{"description":"The end row (exclusive), 0-indexed.","title":"End Row Index","type":"integer"},"sheetId":{"description":"The sheet ID containing this range.","title":"Sheet Id","type":"integer"},"startColumnIndex":{"description":"The start column (inclusive), 0-indexed.","title":"Start Column Index","type":"integer"},"startRowIndex":{"description":"The start row (inclusive), 0-indexed.","title":"Start Row Index","type":"integer"}},"title":"GridRange","type":"object"},"title":"Ranges","type":"array"}},"required":["ranges"],"title":"ConditionalFormatRule","type":"object"},"sheet_id":{"description":"The unique numeric identifier of the sheet/tab to modify (NOT a zero-based index). This is a specific ID assigned by Google Sheets when the sheet is created, not the position of the sheet. You MUST first call GOOGLESHEETS_GET_SPREADSHEET_INFO to retrieve the actual sheetId values from the 'sheets' array in the response. Common mistake: Do not assume sheet_id=0 exists - while some spreadsheets may have a sheet with ID 0, many do not.","examples":[1534097477,438883425],"title":"Sheet Id","type":"integer"},"spreadsheet_id":{"description":"The ID of the spreadsheet containing the sheet to modify. Found in the Google Sheets URL between '/d/' and '/edit'.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheet_id","operation","sheet_id"],"title":"MutateConditionalFormatRulesRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GOOGLESHEETS_VALUES_GET / GOOGLESHEETS_BATCH_GET for table reads and GOOGLESHEETS_LOOKUP_SPREADSHEET_ROW for row lookup/filter workflows. Execute SQL-like SELECT queries against Google Spreadsheet tables. Table names correspond to sheet/tab names visible at the bottom of the spreadsheet. Use GOOGLESHEETS_LIST_TABLES first to discover available table names if unknown. Supports WHERE conditions, ORDER BY, LIMIT clauses.","name":"GOOGLESHEETS_QUERY_TABLE","parameters":{"properties":{"include_formulas":{"default":false,"description":"Whether to return formula text instead of calculated values for formula columns","title":"Include Formulas","type":"boolean"},"spreadsheet_id":{"description":"The unique identifier of a native Google Sheets file. Found in the spreadsheet URL after /d/ (e.g., '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'). Only native Google Sheets files (MIME type: application/vnd.google-apps.spreadsheet) are supported. Files uploaded to Google Drive that are not native Google Sheets (such as Excel .xlsx files, PDFs, or Google Docs) will not work even if they can be viewed in Google Sheets.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"sql":{"description":"SQL SELECT query. The table name is the Google Sheets tab/sheet name (visible at the bottom of the spreadsheet). Use GOOGLESHEETS_LIST_TABLES to discover available table names if unknown. Supported: SELECT cols FROM table WHERE conditions ORDER BY col LIMIT n. Table names must be quoted with double quotes if they contain spaces or are numeric-only (e.g., SELECT * FROM \"My Sheet\" or SELECT * FROM \"415\").","examples":["SELECT * FROM \"Sheet1\" LIMIT 10","SELECT * FROM \"Sales_Data\" LIMIT 10","SELECT project, totals FROM \"Sales_Data\" WHERE totals > 10.0 ORDER BY totals DESC","SELECT name, email FROM \"Customers\" WHERE status = 'ACTIVE'"],"title":"Sql","type":"string"}},"required":["spreadsheet_id","sql"],"title":"QueryTableRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to search for developer metadata in a spreadsheet. Use when you need to find specific metadata entries based on filters.","name":"GOOGLESHEETS_SEARCH_DEVELOPER_METADATA","parameters":{"properties":{"dataFilters":{"description":"The data filters describing the criteria used to determine which DeveloperMetadata entries to return.","items":{"properties":{"a1Range":{"description":"Selects DeveloperMetadata associated with the given A1 range. Must represent a single row or single column only. Valid examples: 'A:A' (entire column A), 'Sheet1!B:B' (column B in Sheet1), '1:1' (entire row 1), 'Sheet1!5:5' (row 5 in Sheet1). Invalid examples: 'A1:D7' (multi-row/multi-column range), 'A1' (single cell).","title":"A1 Range","type":"string"},"developerMetadataLookup":{"additionalProperties":false,"description":"Selects DeveloperMetadata that matches all of the specified fields.\nEnables filtering by various criteria like ID, key, value, location, and visibility.","properties":{"locationMatchingStrategy":{"description":"Determines how the metadata location is matched. Valid values: DEVELOPER_METADATA_LOCATION_MATCHING_STRATEGY_UNSPECIFIED, EXACT_LOCATION, INTERSECTING_LOCATION","title":"Location Matching Strategy","type":"string"},"locationType":{"description":"Restricts the search to developer metadata of the specified location type. Valid values: DEVELOPER_METADATA_LOCATION_TYPE_UNSPECIFIED, ROW, COLUMN, SHEET, SPREADSHEET","title":"Location Type","type":"string"},"metadataId":{"description":"Filters by the specific metadata ID.","title":"Metadata Id","type":"integer"},"metadataKey":{"description":"Filters by the metadata key.","title":"Metadata Key","type":"string"},"metadataLocation":{"additionalProperties":false,"description":"Describes the location where developer metadata is attached.\nExactly one of spreadsheet, sheetId, or dimensionRange is set,\nand locationType reflects that location.","properties":{"dimensionRange":{"additionalProperties":false,"description":"A range of a single dimension (either rows or columns) on a sheet.\nIndexes are zero-based; endIndex is exclusive.","properties":{"dimension":{"description":"The dimension this range spans.","title":"Dimension","type":"string"},"endIndex":{"description":"The exclusive end index of the dimension range.","title":"End Index","type":"integer"},"sheetId":{"description":"The ID of the sheet this dimension range is on.","title":"Sheet Id","type":"integer"},"startIndex":{"description":"The inclusive start index of the dimension range.","title":"Start Index","type":"integer"}},"title":"DimensionRange","type":"object"},"locationType":{"description":"The type of location the metadata is associated with.","title":"Location Type","type":"string"},"sheetId":{"description":"The ID of the sheet the metadata is associated with (sheet-wide association).","title":"Sheet Id","type":"integer"},"spreadsheet":{"description":"True if the metadata is associated with the entire spreadsheet.","title":"Spreadsheet","type":"boolean"}},"title":"DeveloperMetadataLocation","type":"object"},"metadataValue":{"description":"Filters by the metadata value.","title":"Metadata Value","type":"string"},"visibility":{"description":"Restricts to metadata with the specified visibility. Valid values: DEVELOPER_METADATA_VISIBILITY_UNSPECIFIED, DOCUMENT, PROJECT","title":"Visibility","type":"string"}},"title":"DeveloperMetadataLookup","type":"object"},"gridRange":{"additionalProperties":true,"description":"Selects DeveloperMetadata associated with the given grid range. The developer metadata must be associated with a location that overlaps the range.","title":"Grid Range","type":"object"}},"title":"DataFilter","type":"object"},"title":"Data Filters","type":"array"},"spreadsheetId":{"description":"The ID of the spreadsheet to retrieve metadata from.","examples":["1q2w3e4r5t6y7u8i9o0p"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheetId","dataFilters"],"title":"SearchDeveloperMetadataRequest","type":"object"}},"type":"function"},{"function":{"description":"Search for Google Spreadsheets using various filters including name, content, date ranges, and more.","name":"GOOGLESHEETS_SEARCH_SPREADSHEETS","parameters":{"properties":{"created_after":{"description":"Return spreadsheets created after this date. Use RFC 3339 format like '2024-01-01T00:00:00Z'.","examples":["2024-01-01T00:00:00Z","2024-12-01T12:00:00-08:00"],"title":"Created After","type":"string"},"include_shared_drives":{"default":true,"description":"Whether to include spreadsheets from shared drives you have access to. Defaults to True.","title":"Include Shared Drives","type":"boolean"},"include_trashed":{"default":false,"description":"Whether to include spreadsheets in trash. Defaults to False.","title":"Include Trashed","type":"boolean"},"max_results":{"default":10,"description":"Maximum number of spreadsheets to return (1-1000). Defaults to 10.","maximum":1000,"minimum":1,"title":"Max Results","type":"integer"},"modified_after":{"description":"Return spreadsheets modified after this date. Use RFC 3339 format like '2024-01-01T00:00:00Z'.","examples":["2024-01-01T00:00:00Z","2024-12-01T12:00:00-08:00"],"title":"Modified After","type":"string"},"order_by":{"default":"modifiedTime desc","description":"Sort order (comma-separated list for multi-field sorting). Valid fields: createdTime, folder, modifiedByMeTime, modifiedTime, name, name_natural, quotaBytesUsed, recency, sharedWithMeTime, starred, viewedByMeTime. Append ' desc' for descending order (default is ascending). Examples: 'modifiedTime desc', 'folder,name', 'starred,modifiedTime desc'.","title":"Order By","type":"string"},"page_token":{"description":"Token for retrieving the next page of results. Use the 'next_page_token' value from a previous response to get subsequent pages. Leave empty to get the first page.","title":"Page Token","type":"string"},"query":{"description":"Search query to filter spreadsheets. Behavior depends on the 'search_type' parameter. For advanced searches, use Google Drive query syntax with fields like 'name contains', 'fullText contains', or boolean filters like 'sharedWithMe = true'. DO NOT use spreadsheet IDs as search terms. Leave empty to get all spreadsheets.","examples":["Budget Report","quarterly sales","name contains 'Budget'","fullText contains 'sales data'","sharedWithMe = true"],"title":"Query","type":"string"},"search_type":{"default":"name","description":"How to search: 'name' searches filenames only (prefix matching from the START of filenames), 'content' uses fullText search which searches file content, name, description, and metadata (Google Drive API limitation: cannot search content exclusively without also matching filenames), 'both' explicitly searches both name OR content with an OR condition. Note: 'name' search only matches from the START of filenames (e.g., 'Budget' finds 'Budget 2024' but NOT 'Q1 Budget').","enum":["name","content","both"],"title":"Search Type","type":"string"},"shared_with_me":{"default":false,"description":"Whether to return only spreadsheets shared with the current user. Defaults to False.","title":"Shared With Me","type":"boolean"},"starred_only":{"default":false,"description":"Whether to return only starred spreadsheets. Defaults to False.","title":"Starred Only","type":"boolean"}},"title":"SearchSpreadsheetsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to set a basic filter on a sheet in a Google Spreadsheet. Use when you need to filter or sort data within a specific range on a sheet.","name":"GOOGLESHEETS_SET_BASIC_FILTER","parameters":{"properties":{"filter":{"additionalProperties":false,"description":"The filter to set.","properties":{"criteria":{"additionalProperties":{"properties":{"condition":{"anyOf":[{"properties":{"type":{"description":"The type of condition.","title":"Type","type":"string"},"values":{"anyOf":[{"items":{"properties":{"relative_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A relative date.","title":"Relative Date"},"user_entered_value":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A value the condition is based on.","title":"User Entered Value"}},"title":"ConditionValue","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"The values of the condition.","title":"Values"}},"required":["type"],"title":"BooleanCondition","type":"object"},{"type":"null"}],"default":null,"description":"A condition that must be true for values to be shown."},"hiddenValues":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Values that should be hidden.","title":"Hiddenvalues"},"visibleBackgroundColorStyle":{"anyOf":[{"properties":{"rgbColor":{"anyOf":[{"properties":{"alpha":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"The fraction of this color that should be applied to the pixel.","title":"Alpha"},"blue":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"The amount of blue in the color as a value in the interval [0, 1].","title":"Blue"},"green":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"The amount of green in the color as a value in the interval [0, 1].","title":"Green"},"red":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"The amount of red in the color as a value in the interval [0, 1].","title":"Red"}},"title":"Color","type":"object"},{"type":"null"}],"default":null,"description":"The RGB color value for the color style."},"themeColor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The theme color type for the color style.","title":"Themecolor"}},"title":"ColorStyle","type":"object"},{"type":"null"}],"default":null,"description":"The background fill color to filter by."},"visibleForegroundColorStyle":{"anyOf":[{"properties":{"rgbColor":{"anyOf":[{"properties":{"alpha":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"The fraction of this color that should be applied to the pixel.","title":"Alpha"},"blue":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"The amount of blue in the color as a value in the interval [0, 1].","title":"Blue"},"green":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"The amount of green in the color as a value in the interval [0, 1].","title":"Green"},"red":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"The amount of red in the color as a value in the interval [0, 1].","title":"Red"}},"title":"Color","type":"object"},{"type":"null"}],"default":null,"description":"The RGB color value for the color style."},"themeColor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The theme color type for the color style.","title":"Themecolor"}},"title":"ColorStyle","type":"object"},{"type":"null"}],"default":null,"description":"The foreground color to filter by."}},"title":"FilterCriteria","type":"object"},"description":"(Deprecated) The criteria for showing/hiding values per column. The key is the column index. Use filterSpecs instead.","title":"Criteria","type":"object"},"filterSpecs":{"description":"The filter criteria per column. Both criteria and filterSpecs are populated in responses. If both fields are specified in an update request, this field takes precedence.","items":{"properties":{"columnIndex":{"description":"The zero-based column index.","title":"Column Index","type":"integer"},"dataSourceColumnReference":{"additionalProperties":false,"description":"Reference to a data source column.","properties":{"name":{"description":"The display name of the column.","title":"Name","type":"string"}},"title":"DataSourceColumnReference","type":"object"},"filterCriteria":{"additionalProperties":false,"description":"The criteria for the column.","properties":{"condition":{"additionalProperties":false,"description":"A condition that must be true for values to be shown.","properties":{"type":{"description":"The type of condition.","title":"Type","type":"string"},"values":{"description":"The values of the condition.","items":{"properties":{"relative_date":{"description":"A relative date.","title":"Relative Date","type":"string"},"user_entered_value":{"description":"A value the condition is based on.","title":"User Entered Value","type":"string"}},"title":"ConditionValue","type":"object"},"title":"Values","type":"array"}},"required":["type"],"title":"BooleanCondition","type":"object"},"hiddenValues":{"description":"Values that should be hidden.","items":{"type":"string"},"title":"Hidden Values","type":"array"},"visibleBackgroundColorStyle":{"additionalProperties":false,"description":"The background fill color to filter by.","properties":{"rgbColor":{"additionalProperties":false,"description":"The RGB color value for the color style.","properties":{"alpha":{"description":"The fraction of this color that should be applied to the pixel.","title":"Alpha","type":"number"},"blue":{"description":"The amount of blue in the color as a value in the interval [0, 1].","title":"Blue","type":"number"},"green":{"description":"The amount of green in the color as a value in the interval [0, 1].","title":"Green","type":"number"},"red":{"description":"The amount of red in the color as a value in the interval [0, 1].","title":"Red","type":"number"}},"title":"Color","type":"object"},"themeColor":{"description":"The theme color type for the color style.","title":"Theme Color","type":"string"}},"title":"ColorStyle","type":"object"},"visibleForegroundColorStyle":{"additionalProperties":false,"description":"The foreground color to filter by.","properties":{"rgbColor":{"additionalProperties":false,"description":"The RGB color value for the color style.","properties":{"alpha":{"description":"The fraction of this color that should be applied to the pixel.","title":"Alpha","type":"number"},"blue":{"description":"The amount of blue in the color as a value in the interval [0, 1].","title":"Blue","type":"number"},"green":{"description":"The amount of green in the color as a value in the interval [0, 1].","title":"Green","type":"number"},"red":{"description":"The amount of red in the color as a value in the interval [0, 1].","title":"Red","type":"number"}},"title":"Color","type":"object"},"themeColor":{"description":"The theme color type for the color style.","title":"Theme Color","type":"string"}},"title":"ColorStyle","type":"object"}},"title":"FilterCriteria","type":"object"}},"title":"FilterSpec","type":"object"},"title":"Filter Specs","type":"array"},"range":{"additionalProperties":false,"description":"The range the filter covers. When writing, only one of range or tableId may be set.","properties":{"end_column_index":{"description":"The end column (exclusive) of the range, or not set if unbounded.","title":"End Column Index","type":"integer"},"end_row_index":{"description":"The end row (exclusive) of the range, or not set if unbounded.","title":"End Row Index","type":"integer"},"sheet_id":{"description":"The sheet this range is on.","title":"Sheet Id","type":"integer"},"start_column_index":{"description":"The start column (inclusive) of the range, or not set if unbounded.","title":"Start Column Index","type":"integer"},"start_row_index":{"description":"The start row (inclusive) of the range, or not set if unbounded.","title":"Start Row Index","type":"integer"}},"required":["sheet_id"],"title":"GridRange","type":"object"},"sortSpecs":{"description":"The sort specifications for the filter.","items":{"properties":{"backgroundColorStyle":{"additionalProperties":false,"description":"The background fill color to sort by.","properties":{"rgbColor":{"additionalProperties":false,"description":"The RGB color value for the color style.","properties":{"alpha":{"description":"The fraction of this color that should be applied to the pixel.","title":"Alpha","type":"number"},"blue":{"description":"The amount of blue in the color as a value in the interval [0, 1].","title":"Blue","type":"number"},"green":{"description":"The amount of green in the color as a value in the interval [0, 1].","title":"Green","type":"number"},"red":{"description":"The amount of red in the color as a value in the interval [0, 1].","title":"Red","type":"number"}},"title":"Color","type":"object"},"themeColor":{"description":"The theme color type for the color style.","title":"Theme Color","type":"string"}},"title":"ColorStyle","type":"object"},"dataSourceColumnReference":{"additionalProperties":false,"description":"Reference to a data source column.","properties":{"name":{"description":"The display name of the column.","title":"Name","type":"string"}},"title":"DataSourceColumnReference","type":"object"},"dimensionIndex":{"description":"The dimension the sort should be applied to.","title":"Dimension Index","type":"integer"},"foregroundColorStyle":{"additionalProperties":false,"description":"The foreground color to sort by.","properties":{"rgbColor":{"additionalProperties":false,"description":"The RGB color value for the color style.","properties":{"alpha":{"description":"The fraction of this color that should be applied to the pixel.","title":"Alpha","type":"number"},"blue":{"description":"The amount of blue in the color as a value in the interval [0, 1].","title":"Blue","type":"number"},"green":{"description":"The amount of green in the color as a value in the interval [0, 1].","title":"Green","type":"number"},"red":{"description":"The amount of red in the color as a value in the interval [0, 1].","title":"Red","type":"number"}},"title":"Color","type":"object"},"themeColor":{"description":"The theme color type for the color style.","title":"Theme Color","type":"string"}},"title":"ColorStyle","type":"object"},"sortOrder":{"description":"The order data should be sorted.","enum":["ASCENDING","DESCENDING","SORT_ORDER_UNSPECIFIED"],"title":"SortOrderEnum","type":"string"}},"title":"SortSpec","type":"object"},"title":"Sort Specs","type":"array"},"tableId":{"description":"The table this filter is backed by, if any. When writing, only one of range or tableId may be set.","title":"Table Id","type":"string"}},"title":"Filter","type":"object"},"includeSpreadsheetInResponse":{"description":"Determines if the updated spreadsheet resource appears in the response. Default is false.","title":"Include Spreadsheet In Response","type":"boolean"},"responseIncludeGridData":{"description":"True if grid data should be returned. Meaningful only if includeSpreadsheetInResponse is true. Ignored if a field mask was set in the request.","title":"Response Include Grid Data","type":"boolean"},"responseRanges":{"description":"Limits the ranges included in the response spreadsheet. Meaningful only if includeSpreadsheetInResponse is true.","items":{"type":"string"},"title":"Response Ranges","type":"array"},"spreadsheetId":{"description":"The ID of the spreadsheet.","title":"Spreadsheet Id","type":"string"}},"required":["spreadsheetId","filter"],"title":"SetBasicFilterRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to set or clear data validation rules (including dropdowns) on a range in Google Sheets. Use when you need to apply dropdown lists, range-based dropdowns, or custom formula validation to cells.","name":"GOOGLESHEETS_SET_DATA_VALIDATION_RULE","parameters":{"description":"Request to set or clear data validation rules on a range in a Google Sheet.","properties":{"condition_values":{"description":"Generic list of condition values for validation types that require specific values (e.g., NUMBER_GREATER requires one value, NUMBER_BETWEEN requires two values, TEXT_CONTAINS requires one value). For simple validations like TEXT_IS_EMAIL, BLANK, NOT_BLANK, BOOLEAN, DATE_IS_VALID, this can be omitted. Each value should be a string that will be parsed by Google Sheets.","examples":[["100"],["10","50"],["@example.com"]],"items":{"type":"string"},"title":"Condition Values","type":"array"},"end_column_index":{"description":"Ending column index (0-based, exclusive) for the validation range. To apply to column A only, use start_column_index=0 and end_column_index=1.","examples":[1,5],"title":"End Column Index","type":"integer"},"end_row_index":{"description":"Ending row index (0-based, exclusive) for the validation range. To apply to row 1 only, use start_row_index=0 and end_row_index=1.","examples":[1,10],"title":"End Row Index","type":"integer"},"filtered_rows_included":{"default":false,"description":"Whether to apply validation to rows hidden by filters. Default is false. Set to true to ensure validation applies to both visible and filtered rows.","examples":[true,false],"title":"Filtered Rows Included","type":"boolean"},"formula":{"description":"Custom formula for validation. Required when validation_type='CUSTOM_FORMULA'. Formula should evaluate to TRUE/FALSE. Example: '=A1>10'.","examples":["=A1>10","=LEN(A1)<=100","=COUNTIF(A:A,A1)=1"],"title":"Formula","type":"string"},"input_message":{"description":"Optional message shown to the user when they select the cell. Helpful hint about what values are expected.","examples":["Please select a valid option","Enter a value greater than 10"],"title":"Input Message","type":"string"},"mode":{"description":"Operation mode: 'SET' applies a validation rule to the range, 'CLEAR' removes any existing validation from the range.","enum":["SET","CLEAR"],"examples":["SET","CLEAR"],"title":"Mode","type":"string"},"sheet_id":{"description":"The unique sheet ID (numeric identifier) where the validation rule will be applied. The first sheet created in a spreadsheet typically has ID 0, while additional sheets get unique IDs (e.g., 1534097477). If a sheet is deleted, its ID is never reused - so if the original first sheet (ID 0) was deleted, attempting to use 0 will fail. Always verify the actual sheet ID exists using GOOGLESHEETS_GET_SPREADSHEET_INFO action (check 'sheets[].properties.sheetId' field).","examples":[0,1534097477],"title":"Sheet Id","type":"integer"},"show_custom_ui":{"default":true,"description":"Whether to show a dropdown UI for list-based validation. Default is true. Set to true for dropdown lists.","examples":[true,false],"title":"Show Custom Ui","type":"boolean"},"source_range_a1":{"description":"Source range in A1 notation for dropdown values. Required when validation_type='ONE_OF_RANGE'. Example: 'Sheet1!A1:A10' or 'A1:A10'.","examples":["Sheet1!A1:A10","A1:A5"],"title":"Source Range A1","type":"string"},"spreadsheet_id":{"description":"The unique identifier of the Google Sheets spreadsheet. Can be found in the spreadsheet URL between '/d/' and '/edit'.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"start_column_index":{"description":"Starting column index (0-based, inclusive) for the validation range. Column A is index 0.","examples":[0,2],"title":"Start Column Index","type":"integer"},"start_row_index":{"description":"Starting row index (0-based, inclusive) for the validation range. Row 1 is index 0.","examples":[0,5],"title":"Start Row Index","type":"integer"},"strict":{"default":true,"description":"Whether to reject invalid data (true) or show a warning (false). Default is true.","examples":[true,false],"title":"Strict","type":"boolean"},"validation_type":{"description":"Type of validation rule to apply. Required when mode='SET'. Dropdown types: 'ONE_OF_LIST' (dropdown from list), 'ONE_OF_RANGE' (dropdown from range). Number validations: 'NUMBER_GREATER', 'NUMBER_GREATER_THAN_EQ', 'NUMBER_LESS', 'NUMBER_LESS_THAN_EQ', 'NUMBER_EQ', 'NUMBER_NOT_EQ', 'NUMBER_BETWEEN', 'NUMBER_NOT_BETWEEN'. Text validations: 'TEXT_CONTAINS', 'TEXT_NOT_CONTAINS', 'TEXT_EQ', 'TEXT_NOT_EQ', 'TEXT_IS_EMAIL', 'TEXT_IS_URL' (Note: TEXT_STARTS_WITH and TEXT_ENDS_WITH are only for conditional formatting, not data validation). Date validations: 'DATE_EQ', 'DATE_BEFORE', 'DATE_AFTER', 'DATE_ON_OR_BEFORE', 'DATE_ON_OR_AFTER', 'DATE_BETWEEN', 'DATE_NOT_BETWEEN', 'DATE_NOT_EQ', 'DATE_IS_VALID'. Other: 'BLANK', 'NOT_BLANK', 'BOOLEAN', 'CUSTOM_FORMULA'.","enum":["ONE_OF_LIST","ONE_OF_RANGE","CUSTOM_FORMULA","NUMBER_GREATER","NUMBER_GREATER_THAN_EQ","NUMBER_LESS","NUMBER_LESS_THAN_EQ","NUMBER_EQ","NUMBER_NOT_EQ","NUMBER_BETWEEN","NUMBER_NOT_BETWEEN","TEXT_CONTAINS","TEXT_NOT_CONTAINS","TEXT_EQ","TEXT_NOT_EQ","TEXT_IS_EMAIL","TEXT_IS_URL","DATE_EQ","DATE_BEFORE","DATE_AFTER","DATE_ON_OR_BEFORE","DATE_ON_OR_AFTER","DATE_BETWEEN","DATE_NOT_BETWEEN","DATE_NOT_EQ","DATE_IS_VALID","BLANK","NOT_BLANK","BOOLEAN"],"examples":["ONE_OF_LIST","NUMBER_GREATER","TEXT_CONTAINS","DATE_BEFORE"],"title":"Validation Type","type":"string"},"values":{"description":"List of allowed values for dropdown. Required when validation_type='ONE_OF_LIST'. Each item becomes a dropdown option.","examples":[["Option 1","Option 2","Option 3"],["Yes","No","Maybe"]],"items":{"type":"string"},"title":"Values","type":"array"}},"required":["spreadsheet_id","sheet_id","mode","start_row_index","end_row_index","start_column_index","end_column_index"],"title":"SetDataValidationRuleRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GOOGLESHEETS_CREATE_GOOGLE_SHEET1 + GOOGLESHEETS_UPDATE_VALUES_BATCH (or GOOGLESHEETS_VALUES_UPDATE / GOOGLESHEETS_SPREADSHEETS_VALUES_APPEND) instead. Creates a new Google Spreadsheet and populates its first worksheet from `sheet_json`. When data is provided, the first item's keys establish the headers. An empty list creates an empty worksheet.","name":"GOOGLESHEETS_SHEET_FROM_JSON","parameters":{"properties":{"sheet_json":{"description":"A list of dictionaries representing the rows of the sheet. Each dictionary must have the same set of keys, which will form the header row. Values can be strings, numbers, booleans, or null (represented as empty cells). An empty list [] is allowed and will create a spreadsheet with an empty worksheet.","examples":["[{\"Name\": \"Alice\", \"Age\": 30, \"City\": \"New York\"}, {\"Name\": \"Bob\", \"Age\": 24, \"City\": \"London\"}]","[{\"Product ID\": \"A123\", \"Quantity\": 10, \"Price\": 25.50}, {\"Product ID\": \"B456\", \"Quantity\": 5, \"Price\": 100.00}]","[]"],"items":{"additionalProperties":true,"type":"object"},"title":"Sheet Json","type":"array"},"sheet_name":{"description":"The name for the first worksheet within the newly created spreadsheet. This name will appear as a tab at the bottom of the sheet.","examples":["Sheet1","Data Summary","October Metrics"],"title":"Sheet Name","type":"string"},"title":{"description":"The desired title for the new Google Spreadsheet.","examples":["Q3 Sales Report","Project Plan Alpha"],"title":"Title","type":"string"}},"required":["title","sheet_name","sheet_json"],"title":"SheetFromJsonRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to copy a single sheet from a spreadsheet to another spreadsheet. Use when you need to duplicate a sheet into a different spreadsheet.","name":"GOOGLESHEETS_SPREADSHEETS_SHEETS_COPY_TO","parameters":{"properties":{"destination_spreadsheet_id":{"description":"The ID of the spreadsheet to copy the sheet to.","examples":["2rY_..."],"title":"Destination Spreadsheet Id","type":"string"},"sheet_id":{"description":"The ID of the sheet to copy.","examples":[0],"title":"Sheet Id","type":"integer"},"spreadsheet_id":{"description":"The ID of the spreadsheet containing the sheet to copy.","examples":["1qZ_..."],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheet_id","sheet_id","destination_spreadsheet_id"],"title":"SpreadsheetsSheetsCopyToRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to append values to a spreadsheet. Use when you need to add new data to the end of an existing table in a Google Sheet.","name":"GOOGLESHEETS_SPREADSHEETS_VALUES_APPEND","parameters":{"properties":{"includeValuesInResponse":{"description":"Determines if the update response should include the values of the cells that were appended. By default, responses do not include the updated values.","examples":[true],"title":"Include Values In Response","type":"boolean"},"insertDataOption":{"description":"How the input data should be inserted.","enum":["OVERWRITE","INSERT_ROWS"],"examples":["INSERT_ROWS"],"title":"Insert Data Option","type":"string"},"majorDimension":{"description":"How to interpret the 2D values array. Use ROWS for row-wise data (most common for appends). Use COLUMNS for column-wise data. Example: if A1=1,B1=2,A2=3,B2=4 then majorDimension=ROWS yields [[1,2],[3,4]] and majorDimension=COLUMNS yields [[1,3],[2,4]].","enum":["ROWS","COLUMNS"],"examples":["ROWS"],"title":"Major Dimension","type":"string"},"range":{"description":"A1 notation range used to locate a logical table. New rows are appended after the last row of that table within this range. Valid formats: sheet name only (e.g., 'Sheet1'), column range (e.g., 'Sheet1!A:D'), or cell range (e.g., 'Sheet1!A1:D100'). Per Google Sheets API documentation, sheet names with spaces or special characters require single quotes (e.g., \"'Email Summary'!A:E\", \"'Jon's Data'!A1:D5\"). Sheet names without spaces/special characters don't need quotes (e.g., 'Sheet1!A:D'). You can provide ranges with or without quotes—the action will add them automatically when needed. The sheet name must exist in the spreadsheet; a non-existent sheet will cause an 'Unable to parse range' error. IMPORTANT: The append may land in different columns than specified due to API table detection. For example, 'Sheet1!A:M' may append to columns K-W if the API detects a table there based on data continuity patterns and existing table structures within the range. For strict column placement, use GOOGLESHEETS_SPREADSHEETS_VALUES_UPDATE instead. Always check updates.updatedRange in the response to verify where data was actually written.","examples":["Sheet1","Sheet1!A:D","Sheet1!A1:D100","'Email Summary'!A:E","Email Summary!A:E"],"title":"Range","type":"string"},"responseDateTimeRenderOption":{"description":"Determines how dates, times, and durations in the response should be rendered. This is ignored if responseValueRenderOption is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER.","enum":["SERIAL_NUMBER","FORMATTED_STRING"],"examples":["SERIAL_NUMBER"],"title":"Response Date Time Render Option","type":"string"},"responseValueRenderOption":{"description":"Determines how values in the response should be rendered. The default render option is FORMATTED_VALUE.","enum":["FORMATTED_VALUE","UNFORMATTED_VALUE","FORMULA"],"examples":["FORMATTED_VALUE"],"title":"Response Value Render Option","type":"string"},"spreadsheetId":{"description":"The spreadsheet ID (typically 44 characters containing letters, numbers, hyphens, and underscores). Found in the URL between /d/ and /edit. NOT the sheet name (tab name) - that belongs in the 'range' parameter.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"minLength":30,"pattern":"^[a-zA-Z0-9_-]+$","title":"Spreadsheet Id","type":"string"},"valueInputOption":{"description":"How the input data should be interpreted.","enum":["RAW","USER_ENTERED"],"examples":["USER_ENTERED"],"title":"Value Input Option","type":"string"},"values":{"description":"2D array of values to append. Typically, each inner list is a ROW (majorDimension=ROWS). Use null/None for empty cells.","examples":[[["A1_val1","A1_val2"],["A2_val1","A2_val2"]]],"items":{"items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"type":"array"},"title":"Values","type":"array"}},"required":["spreadsheetId","range","valueInputOption","values"],"title":"SpreadsheetsValuesAppendRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to clear one or more ranges of values from a spreadsheet. Use when you need to remove data from specific cells or ranges while keeping formatting and other properties intact.","name":"GOOGLESHEETS_SPREADSHEETS_VALUES_BATCH_CLEAR","parameters":{"properties":{"ranges":{"description":"The ranges to clear, in A1 notation (e.g., 'Sheet1!A1:B2') or R1C1 notation. Each range should be a clean string without surrounding brackets or extra quotes. Valid examples: 'Sheet1!A1:B2', 'A1:Z100', 'Sheet1'. Invalid examples: \"['Sheet1!A1:B2']\", '[Sheet1!A1]'.","examples":[["Sheet1!A1:B2","Sheet1!C3:D4"]],"items":{"type":"string"},"title":"Ranges","type":"array"},"spreadsheet_id":{"description":"The ID of the spreadsheet to update. Can be either a spreadsheet ID or a full Google Sheets URL (the ID will be extracted automatically).","examples":["1q2w3e4r5t6y7u8i9o0p","https://docs.google.com/spreadsheets/d/1q2w3e4r5t6y7u8i9o0p/edit"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheet_id","ranges"],"title":"SpreadsheetsValuesBatchClearRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to return one or more ranges of values from a spreadsheet that match the specified data filters. Use when you need to retrieve specific data sets based on filtering criteria rather than entire sheets or fixed ranges.","name":"GOOGLESHEETS_SPREADSHEETS_VALUES_BATCH_GET_BY_DATA_FILTER","parameters":{"properties":{"dataFilters":{"description":"Required. An array of data filter objects used to match ranges of values to retrieve. Each filter can specify either 'a1Range' (e.g., 'Sheet1!A1:B5') or 'gridRange'. Must be provided as a list, e.g., [{'a1Range': 'Sheet1!A1:B5'}]. A single filter object will be automatically wrapped in a list.","examples":[[{"a1Range":"Sheet1!A1:B5"}]],"items":{"properties":{"a1Range":{"description":"Selects data that matches the specified A1 range notation (e.g., 'Sheet1!A1:B10'). This is the recommended way to specify ranges as it uses the sheet name directly. Either a1Range or gridRange must be provided, but not both.","title":"A1 Range","type":"string"},"gridRange":{"additionalProperties":false,"description":"Selects data that matches the specified grid range using numeric indices. Requires knowing the sheet's numeric ID. Either a1Range or gridRange must be provided, but not both.","properties":{"endColumnIndex":{"description":"The end column (0-indexed) of the range, exclusive.","title":"End Column Index","type":"integer"},"endRowIndex":{"description":"The end row (0-indexed) of the range, exclusive.","title":"End Row Index","type":"integer"},"sheetId":{"description":"The unique numeric identifier of the sheet (NOT the sheet index or name). This is a stable ID assigned when a sheet is created. To find valid sheet IDs, use the 'Get Spreadsheet Info' or 'Get Sheet Names' action to retrieve sheet metadata. IMPORTANT: sheetId=0 is NOT a default or 'first sheet' indicator - it only works if a sheet with ID 0 actually exists in the spreadsheet. Many spreadsheets do not have a sheet with ID 0. Always verify the sheet ID from spreadsheet metadata before using gridRange. For most use cases, prefer using a1Range (e.g., 'Sheet1!A1:B10') instead, which uses the sheet name.","title":"Sheet Id","type":"integer"},"startColumnIndex":{"description":"The start column (0-indexed) of the range, inclusive.","title":"Start Column Index","type":"integer"},"startRowIndex":{"description":"The start row (0-indexed) of the range, inclusive.","title":"Start Row Index","type":"integer"}},"title":"GridRange","type":"object"}},"title":"DataFilter","type":"object"},"title":"Data Filters","type":"array"},"dateTimeRenderOption":{"description":"How dates, times, and durations should be represented in the output. This is ignored if valueRenderOption is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER.","enum":["SERIAL_NUMBER","FORMATTED_STRING"],"title":"DateTimeRenderOption","type":"string"},"majorDimension":{"description":"The major dimension that results should use. For example, if the spreadsheet data is: A1=1,B1=2,A2=3,B2=4, then a request that selects that range and sets majorDimension=ROWS returns [[1,2],[3,4]], whereas a request that sets majorDimension=COLUMNS returns [[1,3],[2,4]].","enum":["ROWS","COLUMNS"],"title":"MajorDimension","type":"string"},"spreadsheetId":{"description":"The ID of the spreadsheet to retrieve data from. This is the unique identifier found in the spreadsheet URL (e.g., in 'https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit', the ID is the SPREADSHEET_ID part). Typical Google Sheets IDs are approximately 44 characters long and contain alphanumeric characters, hyphens, and underscores.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"valueRenderOption":{"description":"How values should be represented in the output. The default render option is FORMATTED_VALUE.","enum":["FORMATTED_VALUE","UNFORMATTED_VALUE","FORMULA"],"title":"ValueRenderOption","type":"string"}},"required":["spreadsheetId","dataFilters"],"title":"SpreadsheetsValuesBatchGetByDataFilterRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to hide/unhide rows or columns and set row heights or column widths. Use when you need to change visibility or pixel sizing of dimensions in a Google Sheet.","name":"GOOGLESHEETS_UPDATE_DIMENSION_PROPERTIES","parameters":{"description":"Request to update dimension properties via batchUpdate wrapper.","properties":{"dimension":{"description":"Whether to update rows or columns.","enum":["ROWS","COLUMNS"],"examples":["ROWS","COLUMNS"],"title":"Dimension","type":"string"},"end_index":{"description":"The zero-based end index (exclusive) of the dimension range to update. For example, to update rows 5-9, use start_index=5 and end_index=10.","examples":[1,10,20],"exclusiveMinimum":0,"title":"End Index","type":"integer"},"hidden_by_user":{"description":"Whether to hide (true) or unhide (false) the specified rows/columns. At least one of hidden_by_user or pixel_size must be provided.","examples":[true,false],"title":"Hidden By User","type":"boolean"},"include_spreadsheet_in_response":{"description":"Whether to include the updated spreadsheet in the response.","examples":[false],"title":"Include Spreadsheet In Response","type":"boolean"},"pixel_size":{"description":"The height (for rows) or width (for columns) in pixels. Must be a positive integer. At least one of hidden_by_user or pixel_size must be provided.","examples":[100,150,200],"exclusiveMinimum":0,"title":"Pixel Size","type":"integer"},"response_include_grid_data":{"description":"Whether to include grid data in the response (only if includeSpreadsheetInResponse is true).","examples":[false],"title":"Response Include Grid Data","type":"boolean"},"response_ranges":{"description":"Limits the ranges included in the response spreadsheet (only if includeSpreadsheetInResponse is true).","examples":[["Sheet1!A1:B10"]],"items":{"type":"string"},"title":"Response Ranges","type":"array"},"sheet_id":{"description":"The numeric ID of the sheet (tab). Either sheet_id or sheet_name must be provided. If both are provided, sheet_name will be resolved to sheet_id and override this value.","examples":[0,123456789],"title":"Sheet Id","type":"integer"},"sheet_name":{"description":"The name of the sheet (tab). If provided, this will be resolved to the numeric sheet_id using GOOGLESHEETS_GET_SPREADSHEET_INFO. Either sheet_id or sheet_name must be provided.","examples":["Sheet1","Sales Data"],"title":"Sheet Name","type":"string"},"spreadsheet_id":{"description":"The ID of the spreadsheet to update.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"start_index":{"description":"The zero-based start index (inclusive) of the dimension range to update. For rows, 0 is the first row; for columns, 0 is column A.","examples":[0,5,10],"minimum":0,"title":"Start Index","type":"integer"}},"required":["spreadsheet_id","dimension","start_index","end_index"],"title":"UpdateDimensionPropertiesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update properties of a sheet (worksheet) within a Google Spreadsheet, such as its title, index, visibility, tab color, or grid properties. Use this when you need to modify the metadata or appearance of a specific sheet.","name":"GOOGLESHEETS_UPDATE_SHEET_PROPERTIES","parameters":{"properties":{"includeSpreadsheetInResponse":{"description":"Determines if the update response should include the spreadsheet resource. When true, the response will include the full updated spreadsheet.","title":"Include Spreadsheet In Response","type":"boolean"},"responseIncludeGridData":{"description":"True if grid data should be returned. Meaningful only if includeSpreadsheetInResponse is true. When true, the response will include cell data for the specified ranges.","title":"Response Include Grid Data","type":"boolean"},"responseRanges":{"description":"Limits the ranges included in the response spreadsheet. Meaningful only if includeSpreadsheetInResponse is true. Ranges should be in A1 notation (e.g., 'Sheet1!A1:B2').","items":{"type":"string"},"title":"Response Ranges","type":"array"},"spreadsheetId":{"description":"The ID of the spreadsheet containing the sheet to update.","title":"Spreadsheet Id","type":"string"},"updateSheetProperties":{"additionalProperties":false,"description":"The details of the sheet properties to update.","properties":{"fields":{"description":"A comma-separated string specifying which properties to update. Uses FieldMask format. For example, to update the title and index, use \"title,index\". To update all mutable sheet properties, use \"*\". If not provided, fields will be inferred from the properties being updated.","title":"Fields","type":"string"},"properties":{"additionalProperties":false,"description":"The properties to update.","properties":{"gridProperties":{"additionalProperties":false,"description":"Properties of a grid sheet.","properties":{"columnCount":{"description":"The number of columns in the sheet. Must be at least 1.","minimum":1,"title":"Column Count","type":"integer"},"columnGroupControlAfter":{"description":"Whether the column group control toggle appears after the group (true) or before the group (false).","title":"Column Group Control After","type":"boolean"},"frozenColumnCount":{"description":"The number of columns to freeze on the left side of the sheet. Must be less than the total number of columns in the sheet (frozenColumnCount < columnCount). Setting this value equal to or greater than the total column count will cause an API error.","minimum":0,"title":"Frozen Column Count","type":"integer"},"frozenRowCount":{"description":"The number of rows to freeze at the top of the sheet. Must be less than the total number of rows in the sheet (frozenRowCount < rowCount). Setting this value equal to or greater than the total row count will cause an API error.","minimum":0,"title":"Frozen Row Count","type":"integer"},"hideGridlines":{"description":"True if gridlines are hidden.","title":"Hide Gridlines","type":"boolean"},"rowCount":{"description":"The number of rows in the sheet. Must be at least 1.","minimum":1,"title":"Row Count","type":"integer"},"rowGroupControlAfter":{"description":"Whether the row group control toggle appears after the group (true) or before the group (false).","title":"Row Group Control After","type":"boolean"}},"title":"GridProperties","type":"object"},"hidden":{"description":"Whether the sheet should be hidden (true) or visible (false).","title":"Hidden","type":"boolean"},"index":{"description":"The new zero-based index of the sheet.","title":"Index","type":"integer"},"rightToLeft":{"description":"Toggles the sheet's layout direction (RTL vs LTR). Note: in practice, updates may only reliably switch RTL → LTR (disable RTL). To enable RTL, create a new sheet with rightToLeft=true (GOOGLESHEETS_ADD_SHEET) and move/copy data into it.","title":"Right To Left","type":"boolean"},"sheetId":{"description":"The ID of the sheet to update.","title":"Sheet Id","type":"integer"},"tabColorStyle":{"additionalProperties":false,"description":"The new tab color for the sheet.","properties":{"rgbColor":{"additionalProperties":false,"description":"Represents a color using RGB values.","properties":{"alpha":{"description":"The alpha component of the color, between 0.0 and 1.0.","title":"Alpha","type":"number"},"blue":{"description":"The blue component of the color, between 0.0 and 1.0.","title":"Blue","type":"number"},"green":{"description":"The green component of the color, between 0.0 and 1.0.","title":"Green","type":"number"},"red":{"description":"The red component of the color, between 0.0 and 1.0.","title":"Red","type":"number"}},"title":"Color","type":"object"},"themeColor":{"description":"Theme color types available in Google Sheets.","enum":["THEME_COLOR_TYPE_UNSPECIFIED","TEXT","BACKGROUND","ACCENT1","ACCENT2","ACCENT3","ACCENT4","ACCENT5","ACCENT6","LINK"],"title":"ThemeColorType","type":"string"}},"title":"ColorStyle","type":"object"},"title":{"description":"The new title of the sheet.","title":"Title","type":"string"}},"required":["sheetId"],"title":"Properties","type":"object"}},"required":["properties"],"title":"Update Sheet Properties","type":"object"}},"required":["spreadsheetId","updateSheetProperties"],"title":"UpdateSheetPropertiesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update SPREADSHEET-LEVEL properties such as the spreadsheet's title, locale, time zone, or auto-recalculation settings. Use when you need to modify the overall configuration of a Google Spreadsheet. NOTE: To update individual SHEET properties (like renaming a specific sheet/tab), use GOOGLESHEETS_UPDATE_SHEET_PROPERTIES instead.","name":"GOOGLESHEETS_UPDATE_SPREADSHEET_PROPERTIES","parameters":{"properties":{"fields":{"description":"Field mask specifying which properties to update (comma-separated for multiple fields). Supports nested paths using dot notation (e.g., 'iterativeCalculationSettings.maxIterations') per Protocol Buffers FieldMask specification. The root 'properties' is implied and must not be included. Special case: When updating 'spreadsheetTheme', use the field mask 'spreadsheetTheme' (not nested paths like 'spreadsheetTheme.primaryFontFamily') and provide the complete theme object with all required fields. Wildcard '*' updates all properties.","examples":["title","title,locale","spreadsheetTheme","iterativeCalculationSettings.maxIterations","title,locale,autoRecalc"],"title":"Fields","type":"string"},"includeSpreadsheetInResponse":{"description":"Determines if the update response should include the full spreadsheet resource. When true, the response will include the entire updated spreadsheet with all sheets, properties, and metadata.","title":"Include Spreadsheet In Response","type":"boolean"},"properties":{"additionalProperties":false,"description":"The spreadsheet-level properties to update (e.g., title, locale, timeZone, autoRecalc). At least one field within properties must be set. NOTE: To update individual sheet/tab properties (like renaming a specific sheet), use GOOGLESHEETS_UPDATE_SHEET_PROPERTIES instead.","properties":{"autoRecalc":{"description":"The recalculation interval for the spreadsheet.","enum":["ON_CHANGE","MINUTE","HOUR"],"examples":["ON_CHANGE"],"title":"AutoRecalcEnum","type":"string"},"defaultFormat":{"additionalProperties":false,"description":"The default cell format for the entire spreadsheet.","properties":{"backgroundColorStyle":{"additionalProperties":false,"description":"Color style representation with either RGB or theme color.","examples":[{"rgbColor":{"alpha":1,"blue":0,"green":0,"red":1}},{"rgbColor":{"blue":0.8,"green":0.6,"red":0.2}},{"themeColor":"ACCENT1"}],"properties":{"rgbColor":{"additionalProperties":false,"description":"RGB color representation.","properties":{"alpha":{"description":"Alpha component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Alpha","type":"number"},"blue":{"description":"Blue component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Blue","type":"number"},"green":{"description":"Green component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Green","type":"number"},"red":{"description":"Red component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Red","type":"number"}},"title":"Color","type":"object"},"themeColor":{"description":"Theme color types.","enum":["THEME_COLOR_TYPE_UNSPECIFIED","TEXT","BACKGROUND","ACCENT1","ACCENT2","ACCENT3","ACCENT4","ACCENT5","ACCENT6","LINK"],"title":"ThemeColorTypeEnum","type":"string"}},"title":"ColorStyle","type":"object"},"horizontalAlignment":{"description":"The horizontal alignment of the cell content. E.g., 'LEFT', 'CENTER', 'RIGHT'.","title":"Horizontal Alignment","type":"string"},"textFormat":{"additionalProperties":false,"description":"Text formatting options.","properties":{"bold":{"description":"Bold text","title":"Bold","type":"boolean"},"fontFamily":{"description":"Font family.","title":"Font Family","type":"string"},"fontSize":{"description":"Font size in points.","title":"Font Size","type":"integer"},"foregroundColor":{"additionalProperties":false,"description":"RGB color representation.","properties":{"alpha":{"description":"Alpha component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Alpha","type":"number"},"blue":{"description":"Blue component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Blue","type":"number"},"green":{"description":"Green component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Green","type":"number"},"red":{"description":"Red component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Red","type":"number"}},"title":"Color","type":"object"},"foregroundColorStyle":{"additionalProperties":false,"description":"Color style representation with either RGB or theme color.","properties":{"rgbColor":{"additionalProperties":false,"description":"RGB color representation.","properties":{"alpha":{"description":"Alpha component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Alpha","type":"number"},"blue":{"description":"Blue component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Blue","type":"number"},"green":{"description":"Green component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Green","type":"number"},"red":{"description":"Red component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Red","type":"number"}},"title":"Color","type":"object"},"themeColor":{"description":"Theme color types.","enum":["THEME_COLOR_TYPE_UNSPECIFIED","TEXT","BACKGROUND","ACCENT1","ACCENT2","ACCENT3","ACCENT4","ACCENT5","ACCENT6","LINK"],"title":"ThemeColorTypeEnum","type":"string"}},"title":"ColorStyle","type":"object"},"italic":{"description":"Italic text.","title":"Italic","type":"boolean"},"link":{"additionalProperties":false,"description":"A hyperlink.","properties":{"uri":{"description":"The link URI.","title":"Uri","type":"string"}},"title":"Link","type":"object"},"strikethrough":{"description":"Strikethrough text.","title":"Strikethrough","type":"boolean"},"underline":{"description":"Underlined text.","title":"Underline","type":"boolean"}},"title":"TextFormat","type":"object"},"verticalAlignment":{"description":"The vertical alignment of the cell content. E.g., 'TOP', 'MIDDLE', 'BOTTOM'.","title":"Vertical Alignment","type":"string"},"wrapStrategy":{"description":"The wrap strategy of the cell content. E.g., 'OVERFLOW_CELL', 'LEGACY_WRAP', 'CLIP', 'WRAP'.","title":"Wrap Strategy","type":"string"}},"title":"CellFormat","type":"object"},"importFunctionsExternalUrlAccessAllowed":{"description":"Controls whether external URL access is permitted for IMPORTRANGE, IMPORTDATA, IMPORTFEED, and IMPORTHTML functions. This field is read-only when true (cannot be disabled once enabled). When false, you can set it to true to enable external URL access. Note: This value may be bypassed if the admin has enabled URL allowlisting at the organization level.","examples":[true],"title":"Import Functions External Url Access Allowed","type":"boolean"},"iterativeCalculationSettings":{"additionalProperties":false,"description":"Settings for iterative calculation.","properties":{"convergenceThreshold":{"description":"The threshold for convergence in iterative calculation.","examples":[0.001],"title":"Convergence Threshold","type":"number"},"maxIterations":{"description":"The maximum number of iterations for iterative calculation.","examples":[100],"title":"Max Iterations","type":"integer"}},"title":"IterativeCalculationSettings","type":"object"},"locale":{"description":"The locale of the spreadsheet. Use underscore format (e.g., 'en_US', 'pt_BR'), not hyphenated BCP 47 format (e.g., 'en-US'). Google Sheets API expects underscore-separated locale codes.","examples":["en_US","fr_FR","pt_BR","de_DE"],"title":"Locale","type":"string"},"spreadsheetTheme":{"additionalProperties":false,"description":"The theme of the spreadsheet. When updating with field mask 'spreadsheetTheme', provide the complete theme object including both primaryFontFamily and themeColors array with all 9 color types. Per Google Sheets API documentation, all theme color pairs must be provided when updating the theme. Note: Nested field masks (e.g., 'spreadsheetTheme.primaryFontFamily') produce HTTP 400 errors in practice, though not explicitly documented as unsupported.","properties":{"primaryFontFamily":{"description":"The primary font family of the spreadsheet theme.","title":"Primary Font Family","type":"string"},"themeColors":{"description":"Array of theme color pairs. Each pair contains 'colorType' (TEXT, BACKGROUND, ACCENT1, ACCENT2, ACCENT3, ACCENT4, ACCENT5, ACCENT6, LINK) and 'color' with rgbColor values. All 9 color types must be provided when updating spreadsheetTheme (per Google Sheets API documentation).","items":{"description":"A pair of theme color type and color value.","properties":{"color":{"additionalProperties":false,"description":"The color value.","properties":{"rgbColor":{"additionalProperties":false,"description":"RGB color representation.","properties":{"alpha":{"description":"Alpha component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Alpha","type":"number"},"blue":{"description":"Blue component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Blue","type":"number"},"green":{"description":"Green component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Green","type":"number"},"red":{"description":"Red component (0.0 to 1.0)","maximum":1,"minimum":0,"title":"Red","type":"number"}},"title":"Color","type":"object"},"themeColor":{"description":"Theme color types.","enum":["THEME_COLOR_TYPE_UNSPECIFIED","TEXT","BACKGROUND","ACCENT1","ACCENT2","ACCENT3","ACCENT4","ACCENT5","ACCENT6","LINK"],"title":"ThemeColorTypeEnum","type":"string"}},"title":"Color","type":"object"},"colorType":{"description":"The theme color type.","enum":["THEME_COLOR_TYPE_UNSPECIFIED","TEXT","BACKGROUND","ACCENT1","ACCENT2","ACCENT3","ACCENT4","ACCENT5","ACCENT6","LINK"],"title":"Color Type","type":"string"}},"required":["colorType","color"],"title":"ThemeColorPair","type":"object"},"title":"Theme Colors","type":"array"}},"title":"SpreadsheetTheme","type":"object"},"timeZone":{"description":"The time zone of the spreadsheet in CLDR format (e.g., 'America/New_York').","examples":["America/Los_Angeles"],"title":"Time Zone","type":"string"},"title":{"description":"The title of the spreadsheet.","examples":["My Awesome Spreadsheet"],"title":"Title","type":"string"}},"title":"Properties","type":"object"},"responseIncludeGridData":{"description":"Determines if grid data (cell values) should be included in the response. Only meaningful if includeSpreadsheetInResponse is true. When true, the response will include cell data for the specified ranges or entire spreadsheet.","title":"Response Include Grid Data","type":"boolean"},"responseRanges":{"description":"Limits the ranges included in the response spreadsheet. Only meaningful if includeSpreadsheetInResponse is true. Ranges should be in A1 notation (e.g., 'Sheet1!A1:B2').","examples":[["Sheet1!A1:B10","Sheet2!C1:D20"]],"items":{"type":"string"},"title":"Response Ranges","type":"array"},"spreadsheetId":{"description":"The ID of the spreadsheet to update.","examples":["abc123spreadsheetId"],"title":"Spreadsheet Id","type":"string"}},"required":["spreadsheetId","properties","fields"],"title":"UpdateSpreadsheetPropertiesRequestModel","type":"object"}},"type":"function"},{"function":{"description":"Tool to set values in one or more ranges of a spreadsheet. Use when you need to update multiple ranges in a single operation for better performance.","name":"GOOGLESHEETS_UPDATE_VALUES_BATCH","parameters":{"properties":{"data":{"description":"The new values to apply to the spreadsheet. Each ValueRange specifies a range and the values to write to that range. Multiple ranges can be updated in a single request.","items":{"description":"Data within a range of the spreadsheet.","properties":{"majorDimension":{"description":"The major dimension of the values. ROWS (default) means each inner array is a row of values. COLUMNS means each inner array is a column of values.","enum":["ROWS","COLUMNS"],"examples":["ROWS"],"title":"Major Dimension","type":"string"},"range":{"description":"The A1 notation of the range to update (e.g., 'Sheet1!A1:B2', 'Sheet1!C:C', or 'A1:D5'). The range must specify which cells to update.","examples":["Sheet1!A1:B2","Sheet1!D1:E2"],"title":"Range","type":"string"},"values":{"description":"The data to write. This is an array of arrays, the outer array representing all the data and each inner array representing a major dimension. Each item in the inner array corresponds with one cell. Supports string, number, boolean, and null values.","examples":[[["Name","Score"],["Alice","95"]]],"items":{"items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"type":"array"},"title":"Values","type":"array"}},"required":["range","values"],"title":"ValueRange","type":"object"},"minItems":1,"title":"Data","type":"array"},"includeValuesInResponse":{"description":"Determines if the update response should include the values of the cells that were updated. By default, responses do not include the updated values.","examples":[false],"title":"Include Values In Response","type":"boolean"},"responseDateTimeRenderOption":{"description":"Determines how dates, times, and durations in the response should be rendered. Only used if includeValuesInResponse is true. SERIAL_NUMBER (default): Dates are returned as numbers. FORMATTED_STRING: Dates are returned as formatted strings.","enum":["SERIAL_NUMBER","FORMATTED_STRING"],"examples":["SERIAL_NUMBER"],"title":"Response Date Time Render Option","type":"string"},"responseValueRenderOption":{"description":"Determines how values in the response should be rendered. Only used if includeValuesInResponse is true. FORMATTED_VALUE (default): Values are formatted as displayed in the UI. UNFORMATTED_VALUE: Values are unformatted. FORMULA: Formulas are not evaluated.","enum":["FORMATTED_VALUE","UNFORMATTED_VALUE","FORMULA"],"examples":["FORMATTED_VALUE"],"title":"Response Value Render Option","type":"string"},"spreadsheet_id":{"description":"The ID of the spreadsheet to update. This ID can be found in the URL of the spreadsheet (e.g., https://docs.google.com/spreadsheets/d/{spreadsheet_id}/edit). Must be a valid Google Sheets spreadsheet ID.","examples":["16k0mZLTGKySpihrjTycQalUVQQwq4SuLSdD3r_T164A"],"pattern":"^[a-zA-Z0-9_-]+$","title":"Spreadsheet Id","type":"string"},"valueInputOption":{"description":"How the input data should be interpreted. RAW: Values are stored exactly as entered, without parsing. USER_ENTERED: Values are parsed as if typed by a user (numbers stay numbers, strings prefixed with '=' become formulas, etc.). INPUT_VALUE_OPTION_UNSPECIFIED: Default input value option is not specified.","enum":["INPUT_VALUE_OPTION_UNSPECIFIED","RAW","USER_ENTERED"],"examples":["USER_ENTERED"],"title":"Value Input Option","type":"string"}},"required":["spreadsheet_id","valueInputOption","data"],"title":"BatchUpdateValuesRequest","type":"object"}},"type":"function"},{"function":{"description":"Upsert rows - update existing rows by key, append new ones. Automatically handles column mapping and partial updates. Use for: CRM syncs (match Lead ID), transaction imports (match Transaction ID), inventory updates (match SKU), calendar syncs (match Event ID). Features: - Auto-adds missing columns to sheet - Partial column updates (only update Phone + Status, preserve other columns) - Column order doesn't matter (auto-maps by header name) - Prevents duplicates by matching key column Example inputs: - Contact update: keyColumn='Email', headers=['Email','Phone','Status'], data=[['john@ex.com','555-0101','Active']] - Inventory sync: keyColumn='SKU', headers=['SKU','Stock','Price'], data=[['WIDGET-001',50,9.99],['GADGET-002',30,19.99]] - CRM lead update: keyColumn='Lead ID', headers=['Lead ID','Score','Status'], data=[['L-12345',85,'Hot']] - Partial update: keyColumn='Email', headers=['Email','Phone'] (only updates Phone, preserves Name/Address/etc)","name":"GOOGLESHEETS_UPSERT_ROWS","parameters":{"description":"Upsert (update or insert) rows in a Google Sheet based on a key column.\nAutomatically handles column mapping, partial updates, and adds missing columns.","properties":{"headers":{"description":"List of column names for the data. These will be matched against sheet headers. If a column doesn't exist in the sheet, it will be added automatically. Order doesn't need to match sheet order. Can be auto-derived from the first row in 'rows' if not provided. Example inputs: ['Email', 'Phone', 'Status'] for contact updates, ['Lead ID', 'Name', 'Score'] for CRM, ['SKU', 'Stock', 'Price'] for inventory.","examples":[["Email","Phone","Status"],["Lead ID","Name","Score"],["SKU","Stock","Price"]],"items":{"type":"string"},"title":"Headers","type":"array"},"keyColumn":{"description":"The column NAME (header text) to use as unique identifier for matching rows. Must be an actual header name from the sheet (e.g., 'Email', 'Lead ID', 'SKU'), NOT a column letter (e.g., 'A', 'B', 'C'). If you provide a column letter like 'A', it will be automatically converted to the header name at that column position. If neither 'key_column' nor 'key_column_index' is provided, defaults to the first column (index 0).","examples":["Email","ID","SKU","Lead ID","Transaction Number"],"title":"Key Column","type":"string"},"key_column_index":{"anyOf":[{"type":"integer"},{"type":"number"}],"description":"The 0-based column index to use as unique identifier for matching rows. Alternative to 'key_column' - will be converted to column name using headers. If neither 'key_column' nor 'key_column_index' is provided, defaults to 0 (first column). Example: 0 for first column, 1 for second column.","examples":[0,1,2],"title":"Key Column Index"},"normalization_message":{"description":"Internal field to track input normalization (e.g., row truncation). Not part of API.","title":"Normalization Message","type":"string"},"rows":{"description":"2D array of data rows to upsert. IMPORTANT: If 'headers' is NOT provided, the FIRST row is treated as column headers and remaining rows as data - so you need at least 2 rows (1 header + 1 data). If 'headers' IS provided separately, then ALL rows in this array are treated as data rows. Each row should have the same number of values as headers. If a row has MORE values than headers: with strict_mode=true (default), an error is returned showing which rows are affected; with strict_mode=false, extra values are silently truncated. If a row has FEWER values than headers, an error is returned during execution. Cell values can be strings, numbers, booleans, or null. Example with headers provided: headers=['Email','Status'], rows=[['john@ex.com','Active']] (1 data row). Example without headers: rows=[['Email','Status'],['john@ex.com','Active']] (row 1 = headers, row 2 = data).","examples":[[["john@example.com","555-0101","Active"],["jane@example.com","555-0102","Pending"]],[["WIDGET-001",50,9.99],["GADGET-002",30,19.99]],[["L-12345","John Doe",85]]],"items":{"items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"type":"array"},"minItems":1,"title":"Rows","type":"array"},"sheetName":{"description":"The name of the sheet/tab within the spreadsheet. Note: Google Sheets creates default sheets with localized names based on account language (e.g., 'Sheet1' for English, '工作表1' for Chinese, 'Hoja1' for Spanish, 'Feuille1' for French, 'Planilha1' for Portuguese, 'Лист1' for Russian). If you specify a common default name and the sheet is not found, the action will automatically use the first sheet if only one exists.","examples":["Leads","Transactions","Inventory","Sheet1","工作表1"],"title":"Sheet Name","type":"string"},"spreadsheetId":{"description":"The ID of the spreadsheet. Must be a non-empty string, typically a 44-character alphanumeric string found in the spreadsheet URL.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"],"title":"Spreadsheet Id","type":"string"},"strictMode":{"default":true,"description":"Controls how rows with mismatched column counts are handled. When True (default), an error is returned if any row has more values than headers - the error message shows exactly which rows are affected and what values would need to be removed. When False, extra values are silently truncated to match the header count. Set to False only if you explicitly want automatic truncation of extra values.","title":"Strict Mode","type":"boolean"},"tableStart":{"default":"A1","description":"Cell where the table starts (where headers are located). Defaults to 'A1'. Use this if your table is offset (e.g., 'C5', 'D10').","examples":["A1","C5","D10"],"title":"Table Start","type":"string"}},"required":["spreadsheetId","sheetName","rows"],"title":"UpsertRowsRequest","type":"object"}},"type":"function"},{"function":{"description":"Returns a range of values from a spreadsheet. Use when you need to read data from specific cells or ranges in a Google Sheet.","name":"GOOGLESHEETS_VALUES_GET","parameters":{"properties":{"date_time_render_option":{"default":"SERIAL_NUMBER","description":"How dates, times, and durations should be represented in the output. SERIAL_NUMBER: Dates are returned as serial numbers (default). FORMATTED_STRING: Dates returned as formatted strings.","enum":["SERIAL_NUMBER","FORMATTED_STRING"],"title":"Date Time Render Option","type":"string"},"end_row":{"description":"1-based row number to stop reading at (inclusive). Use with start_row for pagination to avoid large response errors. Example: start_row=501, end_row=1000 fetches rows 501-1000.","title":"End Row","type":"integer"},"major_dimension":{"description":"The major dimension for results.","enum":["DIMENSION_UNSPECIFIED","ROWS","COLUMNS"],"title":"MajorDimension","type":"string"},"range":{"description":"The A1 notation or R1C1 notation of the range to retrieve values from. If the sheet name contains spaces or special characters, wrap the sheet name in single quotes (e.g., \"'My Sheet'!A1:B2\"). Without single quotes, the API will return a 400 error for sheet names with spaces. Examples: 'Sheet1!A1:B3', \"'Sheet With Spaces'!A1:D5\", 'A1:D5' (no sheet name uses first visible sheet), 'Sheet1!A:A' (entire column), 'SheetName' (entire sheet).","examples":["Sheet1!A1:B3","'My Sheet'!A1:D5","'Feuille 1'!A1:C10","A1:D5","Sheet1!A:A"],"title":"Range","type":"string"},"spreadsheet_id":{"description":"The unique identifier of the Google Spreadsheet from which to retrieve values. This is the long alphanumeric string found in the spreadsheet URL between '/d/' and '/edit' (e.g., '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'). WARNING: Do NOT use the spreadsheet name or title (e.g., 'My Sales Report'); you must use the actual ID from the URL.","examples":["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms","13I9BjRCKl1iy7VZ-_Ir29qr5Yu79iIyIkooVqApymS8"],"title":"Spreadsheet Id","type":"string"},"start_row":{"description":"1-based row number to start reading from (inclusive). Use with end_row for pagination to avoid large response errors. Example: start_row=1, end_row=500 fetches the first 500 rows.","title":"Start Row","type":"integer"},"value_render_option":{"default":"FORMATTED_VALUE","description":"How values should be rendered in the output. FORMATTED_VALUE: Values are calculated and formatted (default). UNFORMATTED_VALUE: Values are calculated but not formatted. FORMULA: Values are not calculated; the formula is returned instead.","enum":["FORMATTED_VALUE","UNFORMATTED_VALUE","FORMULA"],"title":"Value Render Option","type":"string"}},"required":["spreadsheet_id","range"],"title":"ValuesGetRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to set values in a range of a Google Spreadsheet. Use when you need to update or overwrite existing cell values in a specific range.","name":"GOOGLESHEETS_VALUES_UPDATE","parameters":{"properties":{"auto_expand_sheet":{"default":true,"description":"If True (default), automatically expands the sheet's dimensions (adds columns/rows) when the target range exceeds the current grid limits. If False, the operation will fail with an error if the range exceeds grid limits.","examples":[true],"title":"Auto Expand Sheet","type":"boolean"},"include_values_in_response":{"description":"Determines if the update response should include the values of the cells that were updated. By default, responses do not include the updated values.","examples":[false],"title":"Include Values In Response","type":"boolean"},"major_dimension":{"description":"The major dimension of the values. ROWS (default) means each inner array is a row of values. COLUMNS means each inner array is a column of values. Defaults to ROWS if unspecified.","enum":["ROWS","COLUMNS"],"examples":["ROWS"],"title":"Major Dimension","type":"string"},"range":{"description":"The A1 notation of the range to update values in (e.g., 'Sheet1!A1:C2', 'MySheet!C:C', or 'A1:D5'). Must be actual cell references, not placeholder values. If the sheet name is omitted (e.g., 'A1:B2'), the operation applies to the first visible sheet. IMPORTANT: The range must not exceed the sheet's grid dimensions. By default, new sheets have 1000 rows and 26 columns (A-Z). If you need to write to columns beyond Z (e.g., AA, AB), first expand the sheet using GOOGLESHEETS_APPEND_DIMENSION or check the current dimensions using GOOGLESHEETS_GET_SPREADSHEET_INFO.","examples":["Sheet1!A1:C2","Sheet2!B3:F10","A1:Z100"],"title":"Range","type":"string"},"response_datetime_render_option":{"description":"Determines how dates, times, and durations in the response should be rendered. Only used if includeValuesInResponse is true. SERIAL_NUMBER (default): Dates are returned as numbers. FORMATTED_STRING: Dates are returned as strings formatted per the cell's locale.","enum":["SERIAL_NUMBER","FORMATTED_STRING"],"examples":["SERIAL_NUMBER"],"title":"Response Datetime Render Option","type":"string"},"response_value_render_option":{"description":"Determines how values in the response should be rendered. Only used if includeValuesInResponse is true. FORMATTED_VALUE (default): Values are formatted as displayed in the UI. UNFORMATTED_VALUE: Values are unformatted (numbers, booleans, formulas). FORMULA: Formulas are not evaluated and remain as text.","enum":["FORMATTED_VALUE","UNFORMATTED_VALUE","FORMULA"],"examples":["FORMATTED_VALUE"],"title":"Response Value Render Option","type":"string"},"spreadsheet_id":{"description":"The unique identifier of the Google Spreadsheet to update. This ID can be found in the URL of the spreadsheet (e.g., https://docs.google.com/spreadsheets/d/{spreadsheet_id}/edit). Must be a non-empty string.","examples":["13I9BjRCKl1iy7VZ-_Ir29qr5Yu79iIyIkooVqApymS8"],"title":"Spreadsheet Id","type":"string"},"value_input_option":{"description":"How the input data should be interpreted. RAW: Values are stored exactly as entered, without parsing (dates, formulas, etc. remain as strings). USER_ENTERED: Values are parsed as if typed by a user (numbers stay numbers, strings prefixed with '=' become formulas, etc.).","enum":["RAW","USER_ENTERED"],"examples":["USER_ENTERED","RAW"],"title":"Value Input Option","type":"string"},"values":{"description":"The data to write. This is an array of arrays, the outer array representing all the data and each inner array representing a major dimension. Each item in the inner array corresponds with one cell.","examples":[[["Name","Age","City"],["Test User","25","San Francisco"]]],"items":{"items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"}]},"type":"array"},"title":"Values","type":"array"}},"required":["spreadsheet_id","range","value_input_option","values"],"title":"ValuesUpdateRequest","type":"object"}},"type":"function"}]}}} \ No newline at end of file diff --git a/tests/fixtures/composio_instagram.json b/tests/fixtures/composio_instagram.json new file mode 100644 index 000000000..75f81b69f --- /dev/null +++ b/tests/fixtures/composio_instagram.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"logs":["composio: 36 tool(s) listed"],"result":{"tools":[{"function":{"description":"Create a draft carousel post with multiple images/videos before publishing. Instagram requires carousels to have between 2 and 10 media items. Container creation_ids expire in under 24 hours, so publish promptly after creation.","name":"INSTAGRAM_CREATE_CAROUSEL_CONTAINER","parameters":{"properties":{"caption":{"description":"Caption for the carousel post (maximum 2,200 characters) Maximum 30 hashtags.","maxLength":2200,"title":"Caption","type":"string"},"child_image_files":{"description":"List of local image files to include as carousel children. Images must meet Instagram's requirements: JPEG format, aspect ratio between 4:5 (0.8) and 1.91:1, width between 320-1440px (images below 320px are scaled up, larger images are downscaled), maximum file size 8MB. Total carousel items across all sources must be between 2 and 10.","items":{"file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"title":"Child Image Files","type":"array"},"child_image_urls":{"description":"List of image URLs to include as carousel children. Images must meet Instagram's requirements: JPEG format, aspect ratio between 4:5 (0.8) and 1.91:1, width between 320-1440px (images below 320px are scaled up, larger images are downscaled), maximum file size 8MB. URLs must be publicly accessible by Instagram's servers. Total carousel items across all sources must be between 2 and 10. Must be direct HTTPS URLs (not HTML pages, redirects, or generic Google Drive share links); use a public direct-download link.","items":{"type":"string"},"title":"Child Image Urls","type":"array"},"child_video_files":{"description":"List of local video files to include as carousel children. Videos must meet Instagram's requirements: MP4 or MOV format, aspect ratio between 4:5 (0.8) and 1.91:1, duration 3-60 seconds, maximum file size 4GB. Total carousel items across all sources must be between 2 and 10.","items":{"file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"title":"Child Video Files","type":"array"},"child_video_urls":{"description":"List of video URLs to include as carousel children. Videos must meet Instagram's requirements: MP4 or MOV format, aspect ratio between 4:5 (0.8) and 1.91:1, duration 3-60 seconds, maximum file size 4GB. URLs must be publicly accessible by Instagram's servers. Total carousel items across all sources must be between 2 and 10. Must be direct HTTPS URLs (not HTML pages, redirects, or generic Google Drive share links).","items":{"type":"string"},"title":"Child Video Urls","type":"array"},"children":{"description":"List of child creation_ids (image/video items). Total carousel items across all sources must be between 2 and 10. All child containers must be in FINISHED status before use; pending or failed items will block carousel creation. Order of IDs determines slide sequence.","items":{"type":"string"},"title":"Children","type":"array"},"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business Account ID Must be a Business or Creator account; personal accounts are rejected.","title":"Ig User Id","type":"string"}},"required":["ig_user_id"],"title":"CreateCarouselContainerRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use INSTAGRAM_POST_IG_USER_MEDIA instead. Creates a draft media container for photos/videos/reels before publishing. Business/Creator accounts only — personal accounts unsupported. Returns a container ID (data.id or data.creation_id) used as creation_id for publishing. Containers expire in ~24 hours — recreate stale containers rather than reusing old IDs. Before publishing via INSTAGRAM_CREATE_POST, call INSTAGRAM_GET_POST_STATUS and wait for FINISHED status — publishing before FINISHED triggers error 9007. Each creation_id is one-time-use; if container creation fails (status_code='ERROR'), fix media params and recreate via this tool rather than retrying publish with the failed ID.","name":"INSTAGRAM_CREATE_MEDIA_CONTAINER","parameters":{"properties":{"caption":{"description":"Post caption text. Maximum 2,200 characters. Hashtag limit: 30 hashtags maximum per post (Instagram enforces this limit). Mention limit: 20 @mentions maximum.","title":"Caption","type":"string"},"content_type":{"description":"What you want to post: 'photo', 'video', 'reel', or 'carousel_item' (for carousel drafts)","enum":["photo","video","reel","carousel_item"],"title":"Content Type","type":"string"},"cover_url":{"description":"Cover image URL for videos. For feed videos (content_type='video'), if image_url is not provided, this will be used as the required thumbnail. For reels, this is optional.","title":"Cover Url","type":"string"},"graph_api_version":{"default":"v21.0","description":"The Facebook Graph API version to use for the request.","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business Account ID (numeric string like '17841400008460056'). Optional - defaults to the current authenticated user. Do NOT pass Composio connection IDs (starting with 'ca_') or other auth identifiers.","title":"Ig User Id","type":"string"},"image_url":{"description":"Public URL of the image. CRITICAL REQUIREMENTS: (1) Must be a DIRECT link to the raw image file - no redirects, no authentication, no HTML wrappers. (2) Must be publicly accessible by Meta's crawlers (URLs from Google Drive, dynamic API endpoints, or generated URLs like 'backend.composio.dev/dynamic-module-load/...' will NOT work). (3) Must return proper HTTP 200 status with correct Content-Type header (image/jpeg or image/png). (4) Supported formats: JPG, PNG (WebP not supported). Max 8MB, min 320px width, aspect ratio 4:5 to 1.91:1. RECOMMENDED: Use image hosting services like Imgur, Cloudinary, AWS S3 (public), or similar that provide direct download URLs. For feed videos (content_type='video'), this parameter is required as a thumbnail.","title":"Image Url","type":"string"},"is_carousel_item":{"description":"Legacy parameter to mark media as a carousel item. Prefer using content_type='carousel_item' instead, which automatically sets this flag. When creating carousel items, you must provide either image_url or video_url. Carousels support a maximum of 10 items; each item must independently satisfy format, size, and aspect-ratio constraints.","title":"Is Carousel Item","type":"boolean"},"media_type":{"description":"Explicit media type override (IMAGE, REELS, or CAROUSEL). If not provided, media_type is automatically inferred: IMAGE for image_url, REELS for video_url. IMPORTANT: Each media_type has specific URL requirements: IMAGE requires image_url; REELS requires video_url. NOTE: VIDEO media_type was deprecated on November 9, 2023. If VIDEO is provided, it will be automatically converted to REELS.","title":"Media Type","type":"string"},"video_url":{"description":"Public URL of the video. CRITICAL REQUIREMENTS: (1) Must be a DIRECT link to the raw video file - no redirects, no authentication, no HTML wrappers. (2) Must be publicly accessible by Meta's crawlers (URLs from Google Drive, dynamic API endpoints, or generated URLs will NOT work). (3) Must return proper HTTP 200 status with correct Content-Type header (video/mp4 or video/quicktime). (4) Supported formats: MP4, MOV. Max 100MB for feed videos, max 1GB for IGTV, min 3 seconds duration. RECOMMENDED: Use video hosting services or cloud storage like AWS S3 (public), Cloudinary, or similar.","title":"Video Url","type":"string"}},"title":"CreateMediaContainerRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use INSTAGRAM_POST_IG_USER_MEDIA_PUBLISH instead. Publish a draft media container to Instagram (final publishing step). Posts become immediately and publicly visible upon success — confirm intent before calling. Requires Business or Creator account with publish scopes; missing scopes return Graph error code 10. After creating a media container, Instagram may need time to process media before publishing. If called too early, error code 9007 is returned. This action automatically retries with exponential backoff (up to ~44 seconds total). For large videos, use INSTAGRAM_GET_POST_STATUS to poll until status_code='FINISHED' before calling; for carousels, all child containers must individually reach FINISHED status first. No native scheduling support — use an external scheduler to trigger this call at the desired time.","name":"INSTAGRAM_CREATE_POST","parameters":{"properties":{"creation_id":{"description":"The media container ID returned in the 'id' field from INSTAGRAM_CREATE_MEDIA_CONTAINER or INSTAGRAM_CREATE_CAROUSEL_CONTAINER. Typically a long numeric string like '17895695668004550'. IMPORTANT: Do NOT use datetime strings (e.g., '2024-01-15T10:30:00+0000') - those are unrelated fields in Instagram responses. The container ID is found in the response like: {'id': '17895695668004550'}. Containers expire after ~24 hours; recreate via INSTAGRAM_CREATE_MEDIA_CONTAINER if stale.","title":"Creation Id","type":"string"},"graph_api_version":{"default":"v21.0","description":"The Facebook Graph API version to use for the request.","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business Account ID. Must be a numeric string (e.g., '25162441193410545'). Personal accounts and misconfigured IDs are rejected.","title":"Ig User Id","type":"string"}},"required":["ig_user_id","creation_id"],"title":"CreatePostRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to delete a comment on Instagram media. Use when you need to remove a comment that was created by your Instagram Business or Creator Account. Note: You can only delete comments that your account created - you cannot delete other users' comments unless they are on your own media.","name":"INSTAGRAM_DELETE_COMMENT","parameters":{"properties":{"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use. Defaults to v21.0.","title":"Graph Api Version","type":"string"},"ig_comment_id":{"description":"The unique identifier of the Instagram comment to delete. This must be a comment created by your Instagram Business or Creator Account.","examples":["17871247656396682"],"title":"Ig Comment Id","type":"string"}},"required":["ig_comment_id"],"title":"DeleteCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to delete messenger profile settings for an Instagram account. Use when you need to remove ice breakers, persistent menu, greeting messages, or other messaging configuration from the messenger profile.","name":"INSTAGRAM_DELETE_MESSENGER_PROFILE","parameters":{"description":"Request to delete messenger profile settings for an Instagram account.","properties":{"fields":{"description":"Array of messenger profile properties to delete. Valid values: ice_breakers, persistent_menu, get_started, greeting, account_linking_url, whitelisted_domains. Only the specified fields will be removed from the messenger profile.","examples":[["ice_breakers"],["ice_breakers","greeting"]],"items":{"description":"Valid messenger profile fields that can be deleted.","enum":["ice_breakers","persistent_menu","get_started","greeting","account_linking_url","whitelisted_domains"],"title":"MessengerProfileField","type":"string"},"title":"Fields","type":"array"},"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use. Defaults to v21.0.","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business Account ID whose messenger profile settings will be deleted.","examples":["25162441193410545"],"title":"Ig User Id","type":"string"}},"required":["ig_user_id","fields"],"title":"DeleteMessengerProfileRequest","type":"object"}},"type":"function"},{"function":{"description":"Get details about a specific Instagram DM conversation (participants, etc). Requires a Business or Creator account with Instagram messaging permissions; personal accounts will return permission errors. Newly sent/received messages may take a few seconds to appear in results.","name":"INSTAGRAM_GET_CONVERSATION","parameters":{"properties":{"conversation_id":{"description":"The unique identifier for the Instagram conversation thread. The thread must already exist; first-contact DMs cannot be initiated via the API — a manual first message must be sent before a conversation_id is available.This is typically a base64-encoded string obtained from the list_conversations or list_all_conversations actions. Must not be empty or contain only whitespace.","title":"Conversation Id","type":"string"},"graph_api_version":{"default":"v21.0","description":"The Graph API version to use (e.g., 'v21.0'). Defaults to 'v21.0'.","title":"Graph Api Version","type":"string"}},"required":["conversation_id"],"title":"GetConversationRequest","type":"object"}},"type":"function"},{"function":{"description":"Get replies to a specific Instagram comment. Returns a list of comment replies with details like text, username, timestamp, and like count. Use when you need to retrieve child comments (replies) for a specific parent comment.","name":"INSTAGRAM_GET_IG_COMMENT_REPLIES","parameters":{"properties":{"after":{"description":"Cursor for forward pagination - get replies after this cursor","title":"After","type":"string"},"before":{"description":"Cursor for backward pagination - get replies before this cursor","title":"Before","type":"string"},"fields":{"default":"id,text,username,timestamp,like_count,hidden,from,media,parent_id,legacy_instagram_comment_id","description":"Comma-separated list of fields to return. Available fields: id, text, username, timestamp, like_count, hidden, from, media, parent_id, replies, legacy_instagram_comment_id","title":"Fields","type":"string"},"graph_api_version":{"default":"v21.0","description":"Graph API version to use","title":"Graph Api Version","type":"string"},"ig_comment_id":{"description":"Instagram Comment ID to get replies for","examples":["18101534863756048"],"title":"Ig Comment Id","type":"string"},"limit":{"default":25,"description":"Number of replies to return per page (max 100)","maximum":100,"minimum":1,"title":"Limit","type":"integer"}},"required":["ig_comment_id"],"title":"GetIgCommentRepliesRequest","type":"object"}},"type":"function"},{"function":{"description":"Get a published Instagram Media object (photo, video, story, reel, or carousel). Use when you need to retrieve detailed information about a specific Instagram post including engagement metrics, caption, media URLs, and metadata. NOTE: This action is for published media only. For unpublished container IDs (from INSTAGRAM_CREATE_MEDIA_CONTAINER), use INSTAGRAM_GET_POST_STATUS to check status instead.","name":"INSTAGRAM_GET_IG_MEDIA","parameters":{"additionalProperties":true,"properties":{"fields":{"default":"id,caption,media_type,media_url,permalink,timestamp,like_count,comments_count,media_product_type","description":"Comma-separated list of fields to return. Defaults to commonly useful fields including id, caption, media_type, media_url, permalink, timestamp, like_count, comments_count, and media_product_type. Supported fields: id, caption, comments_count, is_comment_enabled, like_count, media_type, media_url, media_product_type, owner, permalink, shortcode, thumbnail_url, timestamp, username, children, comments. For nested fields use syntax like 'children{media_url,media_type}'. UNSUPPORTED FIELDS (will cause errors): tagged_users, user_tags, location, filter_name, latitude, longitude, text. Note: Use 'caption' instead of 'text' for the media caption. INSIGHTS METRICS (use INSTAGRAM_GET_IG_MEDIA_INSIGHTS instead): plays, reach, saved, impressions, video_views, engagement. To get media where a user is tagged, use INSTAGRAM_GET_IG_USER_TAGS instead. IMPORTANT: If you receive a MediaBuilder error, the ID is an unpublished container - use INSTAGRAM_GET_POST_STATUS instead.","title":"Fields","type":"string"},"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use","title":"Graph Api Version","type":"string"},"ig_media_id":{"description":"The numeric ID of the Instagram media object from the Graph API (e.g., '17858625294504375'). IMPORTANT: This must be a numeric string, NOT an alphanumeric shortcode from instagram.com/p// URLs (e.g., 'DUTi4n4D9wg' is NOT valid). Obtain numeric IDs from INSTAGRAM_GET_IG_USER_MEDIA or similar endpoints. For unpublished container IDs, use INSTAGRAM_GET_POST_STATUS instead.","examples":["17858625294504375"],"title":"Ig Media Id","type":"string"}},"required":["ig_media_id"],"title":"GetIgMediaRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get media objects (images/videos) that are children of an Instagram carousel/album post. Use when you need to retrieve individual media items from a carousel album post. Note: Carousel children media do not support insights queries - for analytics, query metrics at the parent carousel level.","name":"INSTAGRAM_GET_IG_MEDIA_CHILDREN","parameters":{"properties":{"fields":{"default":"id,media_type,media_url,permalink,timestamp","description":"Comma-separated list of fields to return for each child media item. Available fields: id, caption, media_type, media_url, username, timestamp, permalink, thumbnail_url, ig_id, owner, shortcode, is_comment_enabled, comments_count, like_count","title":"Fields","type":"string"},"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use","title":"Graph Api Version","type":"string"},"ig_media_id":{"description":"The ID of a CAROUSEL_ALBUM media post (not a user ID). This must be a media ID from a carousel/album post, typically obtained by calling 'Get IG User Media' action first and filtering for media_type='CAROUSEL_ALBUM'. Media IDs are numeric strings (17 digits) that identify specific Instagram posts, distinct from user/account IDs.","examples":["17858625294504375"],"title":"Ig Media Id","type":"string"}},"required":["ig_media_id"],"title":"GetIgMediaChildrenRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve comments on an Instagram media object. Use when you need to fetch comments from a specific Instagram post, photo, video, or carousel owned by the connected Business/Creator account. Supports cursor-based pagination for navigating through large comment lists. An empty data array in the response indicates the post has no comments and is not an error. Bulk-fetching across many media objects may trigger API rate limits.","name":"INSTAGRAM_GET_IG_MEDIA_COMMENTS","parameters":{"properties":{"after":{"description":"Cursor for forward pagination. Use the cursor value from previous response's paging.cursors.after field","title":"After","type":"string"},"before":{"description":"Cursor for backward pagination. Use the cursor value from previous response's paging.cursors.before field","title":"Before","type":"string"},"fields":{"default":"id,text,username,timestamp,like_count,from,hidden,media,parent_id","description":"Comma-separated list of fields to retrieve for each comment. Available fields: id, text, username, timestamp, like_count, replies, from, hidden, media, parent_id, user","title":"Fields","type":"string"},"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use","title":"Graph Api Version","type":"string"},"ig_media_id":{"description":"The ID of the Instagram media object (post/photo/video/album) to retrieve comments from. Must be a Media ID, not a User ID. Media IDs can be obtained from endpoints like GET /ig-user-id/media. Media IDs typically look like '17858625294504375'. The media must belong to the connected Business/Creator account; media from other accounts will return empty data or an error.","examples":["17858625294504375"],"title":"Ig Media Id","type":"string"},"limit":{"default":25,"description":"Number of comments to return per page (typically 50-100)","maximum":100,"minimum":1,"title":"Limit","type":"integer"}},"required":["ig_media_id"],"title":"GetIgMediaCommentsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get insights and metrics for Instagram media objects (photos, videos, reels, carousel albums). Use when you need to retrieve performance data such as views, reach, likes, comments, saves, and shares for specific media. Note: Insights data is only available for media published within the last 2 years, and the account must have at least 1,000 followers. Requires a Business or Creator account; personal Instagram profiles are not supported.","name":"INSTAGRAM_GET_IG_MEDIA_INSIGHTS","parameters":{"properties":{"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use","title":"Graph Api Version","type":"string"},"ig_media_id":{"description":"The ID of the Instagram media object (photo, video, reel, carousel album) for which to retrieve insights","examples":["18044673371703564"],"title":"Ig Media Id","type":"string"},"metric":{"description":"List of metrics to retrieve. Must be provided as an array of strings, e.g., ['reach', 'saved', 'likes']. COMMONLY SUPPORTED METRICS: views, reach, saved, likes, comments, shares, total_interactions. REELS-SPECIFIC METRICS: ig_reels_video_view_total_time, ig_reels_avg_watch_time, reels_skip_rate, facebook_views, crossposted_views. STORIES-SPECIFIC METRICS: replies, navigation, follows, profile_visits. DEPRECATED METRICS (will be filtered out): 'impressions', 'plays', 'video_views', 'clips_replays_count', 'ig_reels_aggregated_all_plays_count' (use 'views' instead); 'taps_forward', 'taps_back', 'exits' (Story navigation metrics deprecated in API v18+, use 'navigation' instead). INVALID METRIC NAMES (will be rejected): 'clicks', 'engagement' are NOT valid metric names.","examples":[["views","reach","likes","comments","saved"]],"items":{"type":"string"},"title":"Metric","type":"array"},"period":{"default":"lifetime","description":"The time period for metric aggregation. For media insights, 'lifetime' is the default and typically the only available option. Note: You can only request metrics for one period type per request.","title":"Period","type":"string"}},"required":["ig_media_id","metric"],"title":"GetIgMediaInsightsRequest","type":"object"}},"type":"function"},{"function":{"description":"Get an Instagram Business Account's current content publishing usage. Use this to monitor quota usage before publishing; exceeding the daily cap blocks new posts until the quota resets (no partial failure — new publish calls are rejected until reset). IMPORTANT: This endpoint requires an IG User ID (Instagram Business Account ID), NOT an IGSID (Instagram Scoped ID). IGSID is only used for messaging-related endpoints. Content publishing endpoints require a proper IG User ID. Excessive polling of this endpoint may trigger Graph error 613 (rate limit); space calls several seconds apart.","name":"INSTAGRAM_GET_IG_USER_CONTENT_PUBLISHING_LIMIT","parameters":{"properties":{"fields":{"default":"quota_usage,config","description":"Comma-separated list of fields to return. Available fields: quota_usage, config. Defaults to 'quota_usage,config'.","examples":["quota_usage","config","quota_usage,config"],"title":"Fields","type":"string"},"graph_api_version":{"default":"v21.0","description":"Facebook Graph API version to use","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business Account ID (IG User ID). Must be a valid IG User ID, NOT an IGSID/scoped ID (used for messaging). Defaults to 'me' for current user. To get your IG User ID, use GET /{facebook-page-id}?fields=instagram_business_account.","title":"Ig User Id","type":"string"}},"title":"GetIgUserContentPublishingLimitRequest","type":"object"}},"type":"function"},{"function":{"description":"Get live media objects during an active Instagram broadcast. Returns the live video media ID and metadata when a live broadcast is in progress on an Instagram Business or Creator account. Use this to monitor active live streams and access real-time engagement data.","name":"INSTAGRAM_GET_IG_USER_LIVE_MEDIA","parameters":{"properties":{"fields":{"default":"id,media_type,media_url,timestamp,permalink","description":"Comma-separated list of fields to return for the live media object. Available fields: id, media_type, media_url, timestamp, permalink. Defaults to all available fields.","examples":["id","id,media_type,timestamp","id,media_type,media_url,timestamp,permalink"],"title":"Fields","type":"string"},"graph_api_version":{"default":"v21.0","description":"Facebook Graph API version to use","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business or Creator Account ID (optional, defaults to 'me' for current user). Must be an account with an active live broadcast.","title":"Ig User Id","type":"string"}},"title":"GetIgUserLiveMediaRequest","type":"object"}},"type":"function"},{"function":{"description":"Get Instagram user's media collection (posts, photos, videos, reels, carousels). Use when you need to retrieve all media published by an Instagram Business or Creator account with support for pagination and time-based filtering.","name":"INSTAGRAM_GET_IG_USER_MEDIA","parameters":{"properties":{"after":{"description":"Cursor for forward pagination - retrieve media after this cursor Value comes from paging.cursors.after in the response; stopping at the first page silently omits older posts.","title":"After","type":"string"},"auto_resolve_fb_page_id":{"default":true,"description":"If true and the provided ig_user_id fails, automatically attempt to resolve it as a Facebook Page ID by retrieving the instagram_business_account field. Set to false to disable this behavior.","title":"Auto Resolve Fb Page Id","type":"boolean"},"before":{"description":"Cursor for backward pagination - retrieve media before this cursor","title":"Before","type":"string"},"fields":{"default":"id,caption,media_type,media_url,permalink,thumbnail_url,timestamp,username","description":"Comma-separated list of fields to return. Available fields: id, caption, media_type, media_url, permalink, thumbnail_url, timestamp, username, comments_count, like_count, ig_id, is_comment_enabled, owner, shortcode, media_product_type, video_title, children{media_url,media_type,thumbnail_url} Reels appear as media_type=VIDEO and media_product_type=REELS; filter both fields to identify reels. media_url is a direct file URL; permalink is the user-facing share link. Optional fields like caption and like_count may be null or absent in the response.","title":"Fields","type":"string"},"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use (e.g., 'v21.0')","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business or Creator Account ID. Use 'me' for the authenticated user, or provide the numeric ID obtained from the Instagram Graph API (typically 17 digits, e.g., '17841405793187218'). If you provide a Facebook Page ID, it will be automatically converted to the Instagram Business Account ID.","examples":["me","17841405793187218"],"minLength":2,"title":"Ig User Id","type":"string"},"limit":{"default":25,"description":"Number of media items to return per page (default: 25, max: 100)","maximum":100,"minimum":1,"title":"Limit","type":"integer"},"since":{"description":"Unix timestamp - filter results to media created after this time. If both 'since' and 'until' are provided, 'since' must be less than 'until'.","title":"Since","type":"integer"},"until":{"description":"Unix timestamp - filter results to media created before this time. If both 'since' and 'until' are provided, 'since' must be less than 'until'.","title":"Until","type":"integer"}},"required":["ig_user_id"],"title":"GetIgUserMediaRequest","type":"object"}},"type":"function"},{"function":{"description":"Get active story media objects for an Instagram Business or Creator account. Stories are retrieved via the /stories endpoint. Returns stories that are currently active within the 24-hour window. Use this to retrieve story content, metadata, and engagement metrics for monitoring or analytics purposes.","name":"INSTAGRAM_GET_IG_USER_STORIES","parameters":{"properties":{"after":{"description":"Cursor for pagination to get the next page of results. Use the 'after' cursor from the previous response's paging object.","title":"After","type":"string"},"before":{"description":"Cursor for pagination to get the previous page of results. Use the 'before' cursor from the previous response's paging object.","title":"Before","type":"string"},"fields":{"default":"id,media_type,media_url,permalink,timestamp","description":"Comma-separated list of fields to return for each story. Available fields: id, caption, comments_count, ig_id, is_comment_enabled, like_count, media_type, media_url, owner, permalink, shortcode, thumbnail_url, timestamp, username. If not specified, defaults to id, media_type, media_url, permalink, and timestamp.","examples":["id","id,media_type,timestamp","id,media_type,media_url,permalink,timestamp,caption"],"title":"Fields","type":"string"},"graph_api_version":{"default":"v21.0","description":"Facebook Graph API version to use","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business or Creator Account ID (optional, defaults to 'me' for current user). Must be an account with active stories within the 24-hour window. Must be a numeric ID; usernames are not accepted.","title":"Ig User Id","type":"string"},"limit":{"description":"Number of stories to return per page for pagination. If not specified, returns all active stories.","minimum":1,"title":"Limit","type":"integer"}},"title":"GetIgUserStoriesRequest","type":"object"}},"type":"function"},{"function":{"description":"Get Instagram media where the user has been tagged by other users. Use when you need to retrieve all media in which an Instagram Business or Creator account has been tagged, including tags in captions, comments, or on the media itself.","name":"INSTAGRAM_GET_IG_USER_TAGS","parameters":{"properties":{"after":{"description":"Cursor for forward pagination - retrieve media after this cursor","title":"After","type":"string"},"before":{"description":"Cursor for backward pagination - retrieve media before this cursor","title":"Before","type":"string"},"fields":{"default":"id,caption,media_type,media_url,permalink,timestamp,username","description":"Comma-separated list of fields to return. Available fields: id, caption, comments_count, ig_id, is_comment_enabled, like_count, media_product_type, media_type, media_url, owner, permalink, shortcode, thumbnail_url, timestamp, username, video_title. If not specified, defaults to commonly used fields.","title":"Fields","type":"string"},"graph_api_version":{"description":"Instagram Graph API version (e.g., 'v21.0'). If not specified, uses v21.0 as default.","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business or Creator Account ID. Use 'me' for the authenticated user's account.","examples":["me","17841405793187218","25162441193410545"],"title":"Ig User Id","type":"string"},"limit":{"default":25,"description":"Number of tagged media items to return per page (default: 25, max: 100)","maximum":100,"minimum":1,"title":"Limit","type":"integer"}},"required":["ig_user_id"],"title":"GetIgUserTagsRequest","type":"object"}},"type":"function"},{"function":{"description":"Get the messenger profile settings for an Instagram account. Returns ice breakers and other messaging configuration. Use when you need to retrieve messaging settings, ice breaker questions, or messenger configuration for an Instagram Business account.","name":"INSTAGRAM_GET_MESSENGER_PROFILE","parameters":{"properties":{"fields":{"description":"Comma-separated list of messenger profile fields to retrieve. Available options: ice_breakers, greeting, persistent_menu, get_started, account_linking_url, whitelisted_domains. If not provided, all available fields will be returned.","title":"Fields","type":"string"},"graph_api_version":{"default":"v21.0","description":"The Graph API version to use (e.g., 'v21.0'). Defaults to 'v21.0'.","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"The Instagram User ID for which to retrieve messenger profile settings","title":"Ig User Id","type":"string"}},"required":["ig_user_id"],"title":"GetMessengerProfileRequest","type":"object"}},"type":"function"},{"function":{"description":"Get Instagram conversations for a Page connected to an Instagram Business account. Use platform=instagram parameter to filter for Instagram conversations only.","name":"INSTAGRAM_GET_PAGE_CONVERSATIONS","parameters":{"properties":{"after":{"description":"Cursor for pagination to get the next page of results.","title":"After","type":"string"},"graph_api_version":{"default":"v21.0","description":"The Graph API version to use (e.g., 'v21.0'). Defaults to 'v21.0'.","title":"Graph Api Version","type":"string"},"limit":{"default":25,"description":"Maximum number of conversations to return per page.","maximum":200,"minimum":1,"title":"Limit","type":"integer"},"page_id":{"description":"Instagram user ID or page ID to get conversations for. This is the Instagram Business Account ID that can be obtained from the /me endpoint.","examples":["25162441193410545"],"title":"Page Id","type":"string"},"platform":{"default":"instagram","description":"Platform to filter conversations. Set to 'instagram' to get Instagram conversations only.","examples":["instagram"],"title":"Platform","type":"string"}},"required":["page_id"],"title":"GetPageConversationsRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use INSTAGRAM_GET_IG_MEDIA_COMMENTS instead. Get comments on an Instagram post. Requires Instagram Business or Creator account. Returns empty `data` array (not an error) when no comments exist. Response data is nested under `data.data`; unwrap before processing. Timestamps are timezone-aware ISO 8601 strings; use UTC-based comparison.","name":"INSTAGRAM_GET_POST_COMMENTS","parameters":{"properties":{"after":{"description":"Cursor for pagination - get comments after this cursor Value comes from `paging.cursors.after` in the response.","title":"After","type":"string"},"graph_api_version":{"default":"v21.0","description":"The Facebook Graph API version to use for the request.","title":"Graph Api Version","type":"string"},"ig_post_id":{"description":"Instagram Post ID","title":"Ig Post Id","type":"string"},"limit":{"default":25,"description":"Number of comments to return (max 100)","maximum":100,"minimum":1,"title":"Limit","type":"integer"}},"required":["ig_post_id"],"title":"GetPostCommentsRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use INSTAGRAM_GET_IG_MEDIA_INSIGHTS instead. Get Instagram post insights/analytics (impressions, reach, engagement, etc.). Requires a Business or Creator account; personal accounts cannot access insights. Metrics may be unavailable for several minutes after publishing; verify post status is FINISHED before calling.","name":"INSTAGRAM_GET_POST_INSIGHTS","parameters":{"properties":{"graph_api_version":{"default":"v21.0","description":"The Facebook Graph API version to use for the request.","title":"Graph Api Version","type":"string"},"ig_post_id":{"description":"Numeric Instagram Media ID from the Graph API (e.g., '17895695668004196'). This must be the numeric ID, NOT the shortcode from Instagram URLs (e.g., 'DT0ndbTgcLH' from instagram.com/p/DT0ndbTgcLH/ will NOT work). Use INSTAGRAM_GET_IG_USER_MEDIA to obtain valid numeric media IDs.","title":"Ig Post Id","type":"string"},"metric":{"description":"Metrics to retrieve for the media. If not provided and metric_preset is not set, uses auto_safe preset. Allowed metrics vary by media_product_type: IMAGE/CAROUSEL: reach, likes, comments, saved, shares. VIDEO: reach, plays, likes, comments, saved, shares. REELS: reach, likes, comments, saved, shares, total_interactions, ig_reels_video_view_total_time, ig_reels_avg_watch_time, clips_replays_count, ig_reels_aggregated_all_plays_count, views, reels_skip_rate. Note: 'plays' may not work consistently for all reel types - use 'views' instead (plays is being deprecated in API v22). Stories: reach, replies, taps_forward, taps_back, exits. Note: 'engagement' and 'impressions' are NOT valid standalone metrics - use individual metrics like likes, comments, saved, shares instead. If a metric is unsupported for the post type, API returns 400 error. Some metrics (e.g., shares) may return null even for supported media types; handle missing values before computing ratios.","items":{"type":"string"},"title":"Metric","type":"array"},"metric_preset":{"default":"auto_safe","description":"Predefined metric sets for different media types to avoid API errors.","enum":["auto_safe","image_basic","video_basic","reel_basic","carousel_basic"],"title":"MetricPreset","type":"string"}},"required":["ig_post_id"],"title":"GetPostInsightsRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GetIgMedia instead. Check the processing status of a draft post container. Poll until status_code='FINISHED' before calling INSTAGRAM_CREATE_POST; publishing early triggers OAuthException 9007 (HTTP 400). If status_code='ERROR' or remains non-terminal after ~30 attempts, the container is permanently failed — recreate a new container. Poll every 3–5s with exponential backoff to avoid error 613/code 4/HTTP 429. For carousels, all child containers must reach FINISHED before publishing the parent.","name":"INSTAGRAM_GET_POST_STATUS","parameters":{"properties":{"creation_id":{"description":"The media container ID returned from INSTAGRAM_CREATE_MEDIA_CONTAINER action. This is a numeric string (e.g., '17843131380645284') that uniquely identifies the media container. Use this ID to check the container's publishing status before calling the publish endpoint. Sourced from the data.id field (not data.creation_id) in the INSTAGRAM_CREATE_MEDIA_CONTAINER response. Containers expire after ~24 hours; do not reuse an expired creation_id.","title":"Creation Id","type":"string"},"graph_api_version":{"default":"v21.0","description":"The Facebook Graph API version to use for the request.","title":"Graph Api Version","type":"string"}},"required":["creation_id"],"title":"GetPostStatusRequest","type":"object"}},"type":"function"},{"function":{"description":"Get Instagram Business Account info including profile details and statistics. IMPORTANT: Only works for Business/Creator accounts you manage through Facebook Business Manager. Cannot query arbitrary public Instagram accounts. Use \"me\" to query your own authenticated account. NOTE: followers_count and follows_count are ONLY available when querying your own profile with ig_user_id=\"me\" - these fields return null for specific user IDs due to Instagram Graph API limitations.","name":"INSTAGRAM_GET_USER_INFO","parameters":{"properties":{"graph_api_version":{"default":"v21.0","description":"The Facebook Graph API version to use for the request.","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business Account ID. IMPORTANT: You can only query Business/Creator accounts that you manage through Facebook Business Manager. Use \"me\" to query your own authenticated account. To query other accounts you manage, provide their numeric Business Account ID. Arbitrary public accounts cannot be queried. If not provided, defaults to \"me\".","title":"Ig User Id","type":"string"}},"title":"GetUserInfoRequest","type":"object"}},"type":"function"},{"function":{"description":"Get Instagram account-level insights and analytics (profile views, reach, follower count, etc.). Requires a Business or Creator account; personal accounts are not supported. Returned timestamps are in UTC. metric_type (time_series or total_value): When set to total_value, the API returns a total_value object instead of values. breakdown: Only applicable when metric_type=total_value and only for supported metrics. timeframe: Required for demographics-related metrics and overrides since/until for those metrics.","name":"INSTAGRAM_GET_USER_INSIGHTS","parameters":{"properties":{"breakdown":{"description":"Breakdown to use when metric_type=total_value. Allowed values: contact_button_type, follow_type, media_product_type, age, city, country, gender.","title":"Breakdown","type":"string"},"graph_api_version":{"default":"v21.0","description":"The Facebook Graph API version to use for the request.","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business Account ID - must be a numeric ID (e.g., '17841400008460056'). Content API IDs with 'ca_' prefix are not supported. Optional, defaults to current user.","title":"Ig User Id","type":"string"},"metric":{"description":"Metrics to retrieve for the user account. Accepts a list of metric names or a comma-separated string. Core metrics: reach, follower_count, online_followers. Engagement metrics: accounts_engaged, total_interactions, likes, comments, shares, saves, replies. Activity metrics: follows_and_unfollows, profile_links_taps, views. Demographics metrics (require timeframe parameter): engaged_audience_demographics, reached_audience_demographics, follower_demographics. Threads metrics: threads_likes, threads_replies, reposts, quotes, threads_followers, etc. If multiple metrics are provided, all must support the same period. DEPRECATED (January 2025, Graph API v21+): impressions, email_contacts, phone_call_clicks, text_message_clicks, get_directions_clicks, profile_views, and website_clicks are no longer supported.","items":{"description":"Valid metrics for Instagram account-level insights.\n\nCore metrics:\n- reach, follower_count, online_followers\n\nEngagement metrics:\n- accounts_engaged, total_interactions, likes, comments, shares, saves, replies\n\nActivity metrics:\n- follows_and_unfollows, profile_links_taps, views\n\nDemographics metrics (require timeframe parameter):\n- engaged_audience_demographics, reached_audience_demographics, follower_demographics\n\nThreads metrics (for Threads integration):\n- threads_likes, threads_replies, reposts, quotes, threads_followers,\n threads_follower_demographics, content_views, threads_views, threads_clicks, threads_reposts\n\nDEPRECATED (January 8, 2025 - Graph API v21+): The following metrics are no longer supported\nand will return errors if requested:\n- impressions, email_contacts, phone_call_clicks, text_message_clicks, get_directions_clicks,\n profile_views, website_clicks","enum":["reach","follower_count","online_followers","accounts_engaged","total_interactions","likes","comments","shares","saves","replies","follows_and_unfollows","profile_links_taps","views","engaged_audience_demographics","reached_audience_demographics","follower_demographics","threads_likes","threads_replies","reposts","quotes","threads_followers","threads_follower_demographics","content_views","threads_views","threads_clicks","threads_reposts"],"title":"UserInsightMetric","type":"string"},"title":"Metric","type":"array"},"metric_type":{"description":"Aggregation type for results. Allowed values: time_series, total_value.","title":"Metric Type","type":"string"},"period":{"default":"day","description":"Valid period values for Instagram user insights aggregation.\n\nAvailable periods:\n- day: Daily aggregation\n- week: Weekly aggregation\n- days_28: 28-day aggregation\n- lifetime: Lifetime aggregation (for audience-related metrics)","enum":["day","week","days_28","lifetime"],"title":"InsightPeriod","type":"string"},"since":{"description":"Start of time range (inclusive) as a Unix timestamp (seconds). Also accepts date strings (YYYY-MM-DD or ISO 8601 format) which will be converted to timestamps.","title":"Since","type":"integer"},"timeframe":{"description":"Valid timeframe values for demographics-related Instagram user insights.\n\nRequired for engaged_audience_demographics and reached_audience_demographics metrics.\nOverrides since/until parameters when specified.\n\nNote: As of 2025, Instagram deprecated the following timeframe values for demographics metrics:\nlast_14_days, last_30_days, last_90_days, and prev_month. Only this_week and this_month are\ncurrently supported by the Instagram Graph API.\n\nThe follower_demographics metric uses period=lifetime and does not support the timeframe parameter.","enum":["this_month","this_week"],"title":"InsightTimeframe","type":"string"},"until":{"description":"End of time range (inclusive) as a Unix timestamp (seconds). Also accepts date strings (YYYY-MM-DD or ISO 8601 format) which will be converted to timestamps.","title":"Until","type":"integer"}},"title":"GetUserInsightsRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use INSTAGRAM_GET_IG_USER_MEDIA instead. Get Instagram user's media (posts, photos, videos). Only works for connected Business or Creator accounts; personal accounts return no data. Response data is nested under `data.data`; unwrap before processing. Items mix images, videos, carousels, and reels — filter by `media_type` and `media_product_type`. Use `media_url` for file download, `permalink` for share links. Fields like `caption`, `like_count` may be null. Timestamps are UTC ISO 8601. HTTP 429 with `Retry-After` header indicates rate limiting.","name":"INSTAGRAM_GET_USER_MEDIA","parameters":{"properties":{"after":{"description":"Cursor for pagination - get media after this cursor Chain calls using `paging.cursors.after` from the response to paginate; set an upper bound (e.g., ~300 posts) to avoid unbounded loops.","title":"After","type":"string"},"graph_api_version":{"default":"v21.0","description":"The Facebook Graph API version to use for the request.","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Numeric Instagram Business Account ID (NOT username). Must be a numeric ID like '17841405793187218'. Omit or leave empty to get the current authenticated user's media. To find an account's numeric ID, use the INSTAGRAM_GET_USER_INFO action.","title":"Ig User Id","type":"string"},"limit":{"default":25,"description":"Number of media items to return (max 100) A single call may not return all media; paginate via `after` for complete results.","maximum":100,"minimum":1,"title":"Limit","type":"integer"}},"title":"GetUserMediaRequest","type":"object"}},"type":"function"},{"function":{"description":"List all Instagram DM conversations for the authenticated user. Requires a Business/Creator account with messaging permissions; personal accounts return empty results. Response conversations are nested under `data.data` — accessing top-level `data` as the final list returns zero items. An empty `data` list is a valid non-error outcome meaning no conversations exist in scope.","name":"INSTAGRAM_LIST_ALL_CONVERSATIONS","parameters":{"properties":{"after":{"description":"Cursor for pagination Obtain from `paging.cursors.after` in the response; absence of `paging.cursors.after` or `paging.next` signals end-of-results.","title":"After","type":"string"},"graph_api_version":{"default":"v21.0","description":"The Facebook Graph API version to use for the request.","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business Account ID (optional for /me/conversations)","title":"Ig User Id","type":"string"},"limit":{"default":25,"description":"Maximum number of conversations to return.","maximum":200,"minimum":1,"title":"Limit","type":"integer"}},"title":"ListInstagramConversationsRequest","type":"object"}},"type":"function"},{"function":{"description":"List all messages from a specific Instagram DM conversation. Requires a Business or Creator account with messaging permissions; personal accounts return empty results. Response data is nested under data.data (double-wrapped); attachment-only messages may have empty text fields.","name":"INSTAGRAM_LIST_ALL_MESSAGES","parameters":{"properties":{"after":{"description":"Cursor for paginationPass paging.cursors.after from the previous response to fetch the next page. Stop when paging.cursors.after or paging.next is absent.","title":"After","type":"string"},"conversation_id":{"description":"Unique identifier for the Instagram conversation. Obtain this by calling the INSTAGRAM_LIST_ALL_CONVERSATIONS action, which returns conversation IDs in the format 'aWdfZAG06...' (base64-encoded string).","title":"Conversation Id","type":"string"},"graph_api_version":{"default":"v21.0","description":"The Facebook Graph API version to use for the request.","title":"Graph Api Version","type":"string"},"limit":{"default":25,"description":"Maximum number of messages to return.","maximum":200,"minimum":1,"title":"Limit","type":"integer"}},"required":["conversation_id"],"title":"ListInstagramMessagesRequest","type":"object"}},"type":"function"},{"function":{"description":"Mark Instagram DM messages as read/seen for a specific user. Sends a 'mark_seen' sender action to indicate messages from the specified recipient have been read. Marking as seen is visible to the other party and changes inbox read state — use with explicit user approval in automated or bulk flows. IMPORTANT LIMITATIONS: - The sender_action API feature may have limited support on Instagram - The recipient must have an active 24-hour messaging window open - Requires instagram_manage_messages permission - Only works with Instagram Business or Creator accounts If this action fails with a 500 error, it may indicate that the sender_action feature is not supported for your Instagram account or the specific recipient.","name":"INSTAGRAM_MARK_SEEN","parameters":{"description":"Request to mark Instagram DM messages as read/seen using the sender_action API.\n\nNOTE: The sender_action feature (mark_seen, typing_on, typing_off) is primarily\ndocumented for Facebook Messenger. Support on Instagram Messaging API may be\nlimited or require specific account configurations.\n\nThe recipient must have an active conversation with your Instagram Business/Creator\naccount, and the 24-hour messaging window must be open (user must have messaged\nyour account within the last 24 hours).","properties":{"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use (e.g., 'v21.0').","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business Account ID. Optional - when not provided, the /me/messages endpoint is used instead of /{ig_user_id}/messages.","title":"Ig User Id","type":"string"},"recipient_id":{"description":"Instagram-Scoped User ID (IGSID) of the recipient. This is a numeric string obtained from conversation participants (e.g., '17841479358498320'). The recipient must have an existing conversation with your Instagram Business/Creator account. In multi-participant threads, use the individual participant's IGSID, not a group or thread identifier.","title":"Recipient Id","type":"string"}},"required":["recipient_id"],"title":"MarkSeenRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create a reply to an Instagram comment. Use when you need to reply to a specific comment on an Instagram post owned by a Business or Creator account. The reply must be 300 characters or less, contain at most 4 hashtags and 1 URL, and cannot consist entirely of capital letters.","name":"INSTAGRAM_POST_IG_COMMENT_REPLIES","parameters":{"properties":{"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use. Defaults to v21.0.","title":"Graph Api Version","type":"string"},"ig_comment_id":{"description":"The unique identifier of the Instagram comment to which you want to reply. This is the ID of the parent comment that will receive the reply.","examples":["18542901907038144"],"title":"Ig Comment Id","type":"string"},"message":{"description":"The text content of the reply to be posted. Maximum length: 300 characters. Maximum 4 hashtags allowed. Maximum 1 URL allowed. Cannot consist entirely of capital letters.","examples":["This is a test reply via Instagram Graph API","Thank you for your comment!"],"title":"Message","type":"string"}},"required":["ig_comment_id","message"],"title":"PostIgCommentRepliesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create a comment on an Instagram media object. Use when you need to post a comment on a specific Instagram post, photo, video, or carousel. The comment must be 300 characters or less, contain at most 4 hashtags and 1 URL, and cannot consist entirely of capital letters.","name":"INSTAGRAM_POST_IG_MEDIA_COMMENTS","parameters":{"properties":{"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use. Defaults to v21.0.","title":"Graph Api Version","type":"string"},"ig_media_id":{"description":"The unique identifier of the Instagram media object where the comment will be posted. This is the ID of the Instagram post, photo, video, or carousel.","examples":["17858625294504375"],"title":"Ig Media Id","type":"string"},"message":{"description":"The text content of the comment to be posted on the media object. Maximum length: 300 characters. Maximum 4 hashtags allowed. Maximum 1 URL allowed. Cannot consist entirely of capital letters.","examples":["This is a great post!","Love this! #awesome"],"title":"Message","type":"string"}},"required":["ig_media_id","message"],"title":"PostIgMediaCommentsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create a media container for Instagram posts. Use this to create a container for images, videos, Reels, or carousels. This is the first step in Instagram's two-step publishing process - after creating the container, use the media_publish endpoint to publish it.","name":"INSTAGRAM_POST_IG_USER_MEDIA","parameters":{"additionalProperties":true,"properties":{"audio_name":{"description":"For Reels - custom name for the audio track (default: 'Original Audio').","examples":["My Custom Audio"],"title":"Audio Name","type":"string"},"caption":{"description":"Caption text for the post. Use HTML URL encoding for hashtags (# becomes %23).","examples":["Testing Instagram API","Check out this post! #awesome"],"title":"Caption","type":"string"},"children":{"description":"For carousel posts - array of container IDs (2-10 items) from previously created media containers.","examples":[["17842618866645284","17842618866645285"]],"items":{"type":"string"},"title":"Children","type":"array"},"collaborators":{"description":"Array of up to 3 public Instagram usernames to tag as collaborators. Supported for images, videos, and parent carousel containers (not Stories or carousel child items). Cannot be used when is_carousel_item=true - collaborators must be set on the parent carousel container instead.","examples":[["username1","username2"]],"items":{"type":"string"},"title":"Collaborators","type":"array"},"cover_url":{"description":"For Reels - MUST be a valid HTTP/HTTPS URL pointing to a custom cover image. Must start with 'http://' or 'https://'. IMPORTANT: URLs with query parameters (like signed URLs) are NOT supported by Instagram. Use direct, publicly accessible URLs without query strings. If both cover_url and thumb_offset provided, cover_url takes precedence.","examples":["https://example.com/cover.jpg"],"pattern":"^https?://","title":"Cover Url","type":"string"},"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use. Defaults to v21.0.","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"The unique identifier of the Instagram Business account (IG User ID) to create media for. This must be an Instagram Business account.","examples":["17841405309211844"],"title":"Ig User Id","type":"string"},"image_file":{"description":"Local image file to upload. FileUploadable object where 'name' is the filename. The file will be uploaded to a temporary public URL for Instagram to fetch. At least one of: image_url, image_file, video_url, video_file, or children must be provided.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"image_url":{"description":"MUST be a valid HTTP/HTTPS URL pointing to a publicly accessible JPEG image file. Must start with 'http://' or 'https://' (e.g., 'https://example.com/image.jpg'). IMPORTANT: URLs with query parameters (like AWS S3 signed URLs with authentication tokens) are NOT supported by Instagram and will be rejected. Use direct, publicly accessible URLs without query strings. DO NOT pass image descriptions or text - only actual URLs are accepted. At least one of: image_url, image_file, video_url, video_file, or children must be provided.","examples":["https://example.com/image.jpg","https://cdn.example.com/photos/my-photo.jpeg"],"pattern":"^https?://","title":"Image Url","type":"string"},"is_carousel_item":{"description":"Indicates this container is part of a carousel. For carousels: create 2-10 individual containers, then create a parent carousel container with their IDs. When true, collaborators cannot be set on this child item - they must be set on the parent carousel container instead.","title":"Is Carousel Item","type":"boolean"},"location_id":{"description":"Facebook Page ID of a location to tag. The Page must have latitude/longitude data.","examples":["123456789"],"title":"Location Id","type":"string"},"media_type":{"description":"Media type for the container. Valid values: 'REELS' (for video content), 'CAROUSEL' (for carousel posts with children), 'STORIES' (for story posts). When posting video content with video_url alone (no image_url), this will automatically default to 'REELS' if not specified. Note: 'VIDEO' is deprecated and no longer supported - use 'REELS' for all video content.","enum":["REELS","CAROUSEL","STORIES"],"examples":["REELS"],"title":"Media Type","type":"string"},"share_to_feed":{"description":"For Reels - whether to share to both Feed and Reels tabs. Only applicable when media_type is REELS.","title":"Share To Feed","type":"boolean"},"thumb_offset":{"description":"For videos/Reels - millisecond offset for thumbnail frame (default: 0).","examples":[1000],"title":"Thumb Offset","type":"integer"},"user_tags":{"description":"Array of user tag objects for tagging public Instagram accounts. For images: x and y coordinates (0.0-1.0, from top-left) are REQUIRED. For Reels: only username is allowed; x/y coordinates CANNOT be used.","examples":[[{"username":"testuser","x":0.5,"y":0.5}]],"items":{"description":"Model representing a user tag for Instagram media.\n\nUser tags allow tagging public Instagram accounts in media posts.\nFor images: x and y coordinates are REQUIRED to specify tag position.\nFor Reels: only username is used; x and y coordinates CANNOT be included.","properties":{"username":{"description":"Instagram username to tag (without @ symbol). Must be a public Instagram account.","examples":["instagram_handle","testuser"],"title":"Username","type":"string"},"x":{"description":"Horizontal position of the tag (0.0=left, 1.0=right). REQUIRED for images, CANNOT be used with Reels.","examples":[0.5],"maximum":1,"minimum":0,"title":"X","type":"number"},"y":{"description":"Vertical position of the tag (0.0=top, 1.0=bottom). REQUIRED for images, CANNOT be used with Reels.","examples":[0.5],"maximum":1,"minimum":0,"title":"Y","type":"number"}},"required":["username"],"title":"UserTag","type":"object"},"title":"User Tags","type":"array"},"video_file":{"description":"Local video file to upload. FileUploadable object where 'name' is the filename. The file will be uploaded to a temporary public URL for Instagram to fetch. At least one of: image_url, image_file, video_url, video_file, or children must be provided.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"video_url":{"description":"MUST be a valid HTTP/HTTPS URL pointing to a publicly accessible video or Reel MP4 file. Must start with 'http://' or 'https://' (e.g., 'https://example.com/video.mp4'). IMPORTANT: URLs with query parameters (like AWS S3 signed URLs with authentication tokens) are NOT supported by Instagram and will be rejected. Use direct, publicly accessible URLs without query strings. DO NOT pass video descriptions or text - only actual URLs are accepted. At least one of: image_url, image_file, video_url, video_file, or children must be provided. When using video_url alone, media_type will be automatically set to 'REELS' if not specified.","examples":["https://example.com/video.mp4","https://cdn.example.com/videos/my-video.mp4"],"pattern":"^https?://","title":"Video Url","type":"string"}},"required":["ig_user_id"],"title":"PostIgUserMediaRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to publish a media container to an Instagram Business account. This action automatically waits for the container to finish processing before publishing. Rate limited to 25 API-published posts per 24-hour moving window. The publishing process: 1. First, create a media container using INSTAGRAM_CREATE_MEDIA_CONTAINER 2. Call this action with the creation_id - it will automatically poll for FINISHED status 3. Once ready, the media is published and the published media ID is returned For videos/reels, processing may take 30-120 seconds. Images are typically instant.","name":"INSTAGRAM_POST_IG_USER_MEDIA_PUBLISH","parameters":{"properties":{"creation_id":{"description":"Container ID returned by INSTAGRAM_CREATE_MEDIA_CONTAINER (numeric string). This is NOT the same as ig_user_id. Do NOT pass bank account numbers or other non-Instagram identifiers.","examples":["17842618866645284"],"title":"Creation Id","type":"string"},"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use. Defaults to v21.0.","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business Account ID (numeric string) or 'me' for the authenticated user. This ID is returned by INSTAGRAM_GET_USER_INFO or similar actions. Do NOT pass bank account numbers, connection IDs, or other non-Instagram identifiers.","examples":["17841405309211844","me"],"title":"Ig User Id","type":"string"},"max_wait_seconds":{"default":60,"description":"Maximum time in seconds to wait for the container to reach FINISHED status before publishing. Images are typically ready instantly, but videos/reels commonly take 30-120 seconds to process. WARNING: Setting this to 0 skips all status checks and attempts immediate publish, which will fail with error 9007 if the container is still processing (common for videos). Only use 0 if you are certain the container is already in FINISHED status (rare - typically only after manually checking via INSTAGRAM_GET_POST_STATUS). For videos/reels, use at least 60 seconds (default) or higher (up to 300).","maximum":300,"minimum":0,"title":"Max Wait Seconds","type":"integer"},"poll_interval_seconds":{"default":3,"description":"Interval in seconds between status checks while waiting for the container to be ready. Default is 3 seconds.","maximum":30,"minimum":1,"title":"Poll Interval Seconds","type":"number"}},"required":["ig_user_id","creation_id"],"title":"PostIgUserMediaPublishRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to reply to a mention of your Instagram Business or Creator account. Use when you need to respond to comments or media captions where your account has been @mentioned by another Instagram user. This creates a comment on the media or comment containing the mention.","name":"INSTAGRAM_POST_IG_USER_MENTIONS","parameters":{"properties":{"comment_id":{"description":"Optional ID of a specific comment where you were mentioned. If provided, your reply will be directed to that comment. If not provided, the reply will be posted on the media itself.","examples":["17862345678901234"],"title":"Comment Id","type":"string"},"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use. Defaults to v21.0.","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"The unique identifier of the Instagram Business or Creator account that was mentioned. This is the ID of your Instagram account that received the mention.","examples":["25162441193410545"],"title":"Ig User Id","type":"string"},"media_id":{"description":"The ID of the Instagram media object (post, photo, video, or carousel) where your account was mentioned. This is the media containing the original mention.","examples":["17867229126432217"],"title":"Media Id","type":"string"},"message":{"description":"The text content of your reply to the mention. This creates a comment on the media or comment where you were mentioned.","examples":["Thank you for mentioning us!","Thanks for the shoutout!"],"title":"Message","type":"string"}},"required":["ig_user_id","media_id","message"],"title":"PostIgUserMentionsRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use INSTAGRAM_POST_IG_COMMENT_REPLIES instead. Reply to a comment on Instagram media. Only usable on comments belonging to media owned by the authenticated account. Creates a public, irreversible reply; invoke only with explicit user confirmation, not for bulk or speculative use.","name":"INSTAGRAM_REPLY_TO_COMMENT","parameters":{"properties":{"graph_api_version":{"default":"v21.0","description":"The Facebook Graph API version to use for the request.","title":"Graph Api Version","type":"string"},"ig_comment_id":{"description":"Instagram Comment ID to reply to Must belong to media owned by the authenticated Instagram account; replies to other accounts' media are not permitted.","title":"Ig Comment Id","type":"string"},"message":{"description":"Reply message text Must comply with Instagram content policies; overly long or policy-violating text may be rejected.","title":"Message","type":"string"}},"required":["ig_comment_id","message"],"title":"ReplyToCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Send an image via Instagram DM to a specific user. Each send modifies inbox state; avoid bulk or automated sends without explicit user approval.","name":"INSTAGRAM_SEND_IMAGE","parameters":{"properties":{"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use (e.g., 'v21.0').","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business Account ID. Must be a numeric ID string (e.g., '17841400123456789'), not a username. Optional when using /me/messages endpoint.","title":"Ig User Id","type":"string"},"image_url":{"description":"Publicly accessible URL of the image to send. Must be a direct link to an image file (JPEG, PNG, or GIF) that is reachable over HTTPS. The URL must not require authentication to access.","title":"Image Url","type":"string"},"recipient_id":{"description":"Recipient's IGSID (Instagram Scoped User ID). Must be a numeric ID string (e.g., '17841479358498320'), NOT a username. IGSIDs are obtained from conversations or webhook events when users message your business first. You can only send messages to users who have initiated a conversation with your business within the past 24 hours (or 7 days with HUMAN_AGENT tag).","title":"Recipient Id","type":"string"}},"required":["recipient_id","image_url"],"title":"SendImageRequest","type":"object"}},"type":"function"},{"function":{"description":"Send a text message to an Instagram user via DM in an existing conversation. Cannot initiate new DM threads — a prior conversation must exist. Requires an Instagram Business or Creator account with messaging permissions. Fails with error_subcode 2534022 if outside the messaging window; do not retry these failures.","name":"INSTAGRAM_SEND_TEXT_MESSAGE","parameters":{"description":"Send a message to an Instagram user via the Messenger API for Instagram.\n\nRequires a valid IG business account token with messaging permissions and the\nrecipient's PSID (Instagram scoped ID) obtained from prior interactions.","properties":{"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version","title":"Graph Api Version","type":"string"},"ig_user_id":{"description":"Instagram Business Account ID (optional when using /me/messages)","title":"Ig User Id","type":"string"},"recipient_id":{"description":"Recipient PSID (Instagram-scoped ID) Must be a real PSID obtained from INSTAGRAM_LIST_ALL_CONVERSATIONS or INSTAGRAM_LIST_ALL_MESSAGES — usernames or fabricated IDs cause HTTP 400 (code 100).","title":"Recipient Id","type":"string"},"reply_to_message_id":{"description":"Message ID (mid) to reply to. This creates a visual reply link to the original message in the conversation. The mid can be obtained from webhook events or previous API responses.","title":"Reply To Message Id","type":"string"},"text":{"description":"Message text to send","title":"Text","type":"string"}},"required":["recipient_id","text"],"title":"SendInstagramMessageRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to update the messenger profile settings for an Instagram account. Use when you need to configure ice breakers and messaging options. Ice breakers are suggested questions that help users start conversations with your Instagram Business account.","name":"INSTAGRAM_UPDATE_MESSENGER_PROFILE","parameters":{"description":"Request to update the messenger profile settings for an Instagram account.","properties":{"graph_api_version":{"default":"v21.0","description":"Instagram Graph API version to use. Defaults to v21.0.","title":"Graph Api Version","type":"string"},"ice_breakers":{"description":"Array of ice breaker objects to configure for the messenger profile. Ice breakers provide suggested questions to help users start conversations. Maximum 4 ice breakers allowed.","examples":[[{"payload":"HOURS_PAYLOAD","question":"What are your business hours?"},{"payload":"CONTACT_PAYLOAD","question":"How can I contact you?"}]],"items":{"description":"Ice breaker object for messenger profile.","properties":{"payload":{"description":"The payload data returned as a postback when the user selects this ice breaker. This can be used to trigger specific responses or actions in your messaging flow.","examples":["HOURS_PAYLOAD","CONTACT_PAYLOAD"],"title":"Payload","type":"string"},"question":{"description":"The question text displayed to users as an ice breaker prompt. This helps start conversations by providing suggested questions.","examples":["What are your business hours?","How can I contact you?"],"title":"Question","type":"string"}},"required":["question","payload"],"title":"IceBreaker","type":"object"},"title":"Ice Breakers","type":"array"},"ig_user_id":{"description":"Instagram Business Account ID whose messenger profile will be updated.","examples":["25162441193410545"],"title":"Ig User Id","type":"string"}},"required":["ig_user_id","ice_breakers"],"title":"UpdateMessengerProfileRequest","type":"object"}},"type":"function"}]}}} \ No newline at end of file diff --git a/tests/fixtures/composio_notion.json b/tests/fixtures/composio_notion.json new file mode 100644 index 000000000..0022311ba --- /dev/null +++ b/tests/fixtures/composio_notion.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"logs":["composio: 48 tool(s) listed"],"result":{"tools":[{"function":{"description":"Bulk-add content blocks to Notion. Text >2000 chars auto-splits. Parses markdown formatting. ⚠️ PARENT BLOCK TYPES: Content is added AS CHILDREN of parent_block_id. - To add content AFTER a heading, use PAGE ID as parent + heading ID in 'after' param. - Headings CANNOT have children unless is_toggleable=True. Simplified format: {'content': 'text', 'block_property': 'paragraph'} Full format for code: {'type': 'code', 'code': {'rich_text': [...], 'language': 'python'}} Array format also supported (auto-normalized): [{\"parent_block_id\": \"...\"}, {block1}, {block2}] => proper request structure","name":"NOTION_ADD_MULTIPLE_PAGE_CONTENT","parameters":{"properties":{"after":{"description":"Block ID to insert content AFTER (as siblings). Use this to add content after a heading: set parent_block_id to the PAGE ID and 'after' to the HEADING block ID. The new blocks appear immediately after this block at the same nesting level. If omitted, blocks are appended to the end of the parent's children list.","examples":["4b5f6e87-123a-456b-789c-9de8f7a9e4c0"],"title":"After","type":"string"},"content_blocks":{"description":"⚠️ CRITICAL: Notion API enforces 2000 char limit per text.content field. Content >2000 chars auto-splits.\nList of blocks to add (max 100). Also accepts 'blocks' as alias. Each item can be in EITHER format:\nA) Unwrapped (recommended): {'content': 'text', 'block_property': 'paragraph'}\nB) Wrapped: {'content_block': {'content': 'text', 'block_property': 'paragraph'}}\nBlock content formats:\n1) Simplified: {'content': 'text (REQUIRED for text blocks)', 'block_property': 'type'}\n2) Full Notion: {'type': 'code', 'code': {...}} for complex blocks.\nAuto-features: Markdown parsing (**bold** *italic* ~~strike~~ `code` [link](url)), text splitting at 2000 chars.\nValid block_property values: paragraph, heading_1-3, callout, to_do, toggle, quote, bulleted/numbered_list_item, divider.\nNOTE: 'code' and 'table' blocks require full Notion format with nested children/properties. 'divider' blocks don't require content.\n⚠️ UNSUPPORTED: child_database (use NOTION_CREATE_DATABASE), child_page (use NOTION_CREATE_NOTION_PAGE), link_preview (read-only).","examples":[[{"block_property":"heading_1","content":"# Project Status Report"},{"block_property":"paragraph","content":"System is **running smoothly** with *excellent* performance."},{"block_property":"divider"},{"block_property":"to_do","content":"Task item"}],[{"content_block":{"block_property":"heading_1","content":"# Project Status Report"}},{"content_block":{"block_property":"paragraph","content":"System is **running smoothly** with *excellent* performance."}},{"content_block":{"code":{"language":"javascript","rich_text":[{"text":{"content":"const api = await fetch('/api');"},"type":"text"}]},"type":"code"}}],[{"table":{"children":[{"table_row":{"cells":[[{"text":{"content":"Header 1"},"type":"text"}],[{"text":{"content":"Header 2"},"type":"text"}],[{"text":{"content":"Header 3"},"type":"text"}]]},"type":"table_row"},{"table_row":{"cells":[[{"text":{"content":"Row 1 Col 1"},"type":"text"}],[{"text":{"content":"Row 1 Col 2"},"type":"text"}],[{"text":{"content":"Row 1 Col 3"},"type":"text"}]]},"type":"table_row"}],"has_column_header":true,"has_row_header":false,"table_width":3},"type":"table"}]],"items":{"description":"Represents a single content block that can be added to a Notion page.","properties":{"content_block":{"anyOf":[{"description":"Include these fields in the json: {'content': 'Some words', 'link': 'https://random-link.com'. For content styling, refer to https://developers.notion.com/reference/rich-text.\n\nENHANCED: The 'content' field now automatically detects and parses markdown formatting - supports bold (**text**), italic (*text*), strikethrough (~~text~~), inline code (`code`), and links ([text](url)). Headers (# ## ###) are handled via block_property.","properties":{"block_property":{"default":"paragraph","description":"The block property of the block to be added. **Common text blocks:** `paragraph`, `heading_1`, `heading_2`, `heading_3`, `callout`, `to_do`, `toggle`, `quote`, `bulleted_list_item`, `numbered_list_item`. **Special blocks:** `divider` (creates a horizontal divider line, no content required). **Media/embed blocks:** `file`, `image`, `video` (requires `link` field with external URL - direct file uploads not supported). \n\n**NOTE:** Notion API only supports heading levels 1-3. heading_4, heading_5, etc. are automatically converted to heading_3.","enum":["paragraph","heading_1","heading_2","heading_3","callout","to_do","toggle","quote","bulleted_list_item","numbered_list_item","file","image","video","divider"],"examples":["paragraph","heading_1","heading_2","heading_3","bulleted_list_item","numbered_list_item","to_do","callout","toggle","quote","divider"],"title":"BlockProperty","type":"string"},"bold":{"default":false,"description":"Indicates if the text is bold.","examples":[true,false],"title":"Bold","type":"boolean"},"code":{"default":false,"description":"Indicates if the text is formatted as code.","examples":[true,false],"title":"Code","type":"boolean"},"color":{"default":"default","description":"The color of the text background or text itself.","examples":["blue_background","yellow_background","gray","purple"],"title":"Color","type":"string"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The textual content for TEXT blocks only. ENHANCED: Automatically parses markdown formatting including bold (**text**), italic (*text*), strikethrough (~~text~~), inline code (`code`), and links ([text](url)). Required for: paragraph, heading_1, heading_2, heading_3, callout, to_do, toggle, quote. NOT USED for media blocks (image, video, file) - use 'link' field instead.","examples":["Hello World","This is **bold** and *italic* text","Visit [our site](https://example.com)","Use `code` snippets","~~Strikethrough~~ text"],"title":"Content"},"italic":{"default":false,"description":"Indicates if the text is italic.","examples":[true,false],"title":"Italic","type":"boolean"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL for hyperlinks or media blocks. For TEXT blocks: optional URL to make text clickable. For MEDIA blocks (image, video, file): REQUIRED - must be a valid external URL (http/https). Do not pass placeholder text in 'content' for media blocks.","examples":["https://www.google.com","https://example.com/image.png"],"title":"Link"},"strikethrough":{"default":false,"description":"Indicates if the text has strikethrough.","examples":[true,false],"title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Indicates if the text is underlined.","examples":[true,false],"title":"Underline","type":"boolean"}},"title":"NotionRichText","type":"object"},{"additionalProperties":true,"type":"object"}],"description":"Flattened NotionRichText schema with 'content' (required for text blocks) and 'block_property' (block type), OR a full Notion block dict with 'type' and properties, OR a hybrid format with 'content' as Notion rich_text array and 'block_property' for block type. For code blocks, use the full Notion format: {'type': 'code', 'code': {...}}.","examples":[{"block_property":"paragraph","content":"This is a paragraph added via API."},{"block_property":"paragraph","content":[{"text":{"content":"Text with "},"type":"text"},{"annotations":{"bold":true},"text":{"content":"formatting"},"type":"text"}]},{"code":{"language":"javascript","rich_text":[{"text":{"content":"console.log('Hello');"},"type":"text"}]},"type":"code"},{"paragraph":{"rich_text":[{"text":{"content":"Full block schema example."},"type":"text"}]},"type":"paragraph"},{"table":{"children":[{"table_row":{"cells":[[{"text":{"content":"Name"},"type":"text"}],[{"text":{"content":"Value"},"type":"text"}]]},"type":"table_row"},{"table_row":{"cells":[[{"text":{"content":"Item 1"},"type":"text"}],[{"text":{"content":"100"},"type":"text"}]]},"type":"table_row"}],"has_column_header":true,"table_width":2},"type":"table"}],"title":"Content Block"}},"required":["content_block"],"title":"MultipleContentBlock","type":"object"},"maxItems":100,"minItems":1,"title":"Content Blocks","type":"array"},"parent_block_id":{"description":"The UUID of the parent page or block where content will be added AS CHILDREN (nested inside). ⚠️ COMMON MISTAKE: To add content AFTER a block (as siblings), use the page ID as parent_block_id and specify the block ID in the 'after' parameter. Using a heading block ID here will fail because headings cannot have children unless they are toggleable. CONTAINER BLOCKS that support children: pages, paragraph, toggle, callout, quote, bulleted_list_item, numbered_list_item, to_do, column, column_list, table, synced_block, and heading_1/2/3 ONLY if is_toggleable=True. NON-CONTAINER blocks that CANNOT have children: heading_1/2/3 (unless toggleable), divider, image, video, file, embed, bookmark, equation, breadcrumb, table_of_contents, code, and child_database (databases don't support block children - use database entry actions instead). Accepts 32 hex chars with/without hyphens. Example: '4b5f6e87-123a-456b-789c-9de8f7a9e4c1'. Get valid IDs from create_page, search_pages, or other Notion actions.","examples":["4b5f6e87-123a-456b-789c-9de8f7a9e4c1","4b5f6e87123a456b789c9de8f7a9e4c1"],"title":"Parent Block Id","type":"string"}},"required":["parent_block_id","content_blocks"],"title":"AddMultiplePageContentRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use 'add_multiple_page_content' for better performance. Adds a single content block to a Notion page/block. CRITICAL: Notion API enforces a HARD LIMIT of 2000 characters per text.content field. Content exceeding 2000 chars is AUTOMATICALLY SPLIT into multiple sequential blocks. REQUIRED 'content' field for text blocks: paragraph, heading_1-3, callout, to_do, toggle, quote, list items. Parent blocks MUST be: Page, Toggle, To-do, Bulleted/Numbered List Item, Callout, or Quote. Common errors: - \"content.length should be ≤ 2000\": Text exceeds API limit (should be auto-handled) - \"Content is required for paragraph blocks\": Missing 'content' field for text blocks - \"object_not_found\": Invalid parent_block_id or no integration access For bulk operations, use 'add_multiple_page_content' instead.","name":"NOTION_ADD_PAGE_CONTENT","parameters":{"properties":{"after":{"description":"Identifier of an existing block. The new content block will be appended immediately after this block. If omitted or null, the new block is appended to the end of the parent's children list.","examples":["4b5f6e87-123a-456b-789c-9de8f7a9e4c0"],"title":"After","type":"string"},"content_block":{"anyOf":[{"description":"Include these fields in the json: {'content': 'Some words', 'link': 'https://random-link.com'. For content styling, refer to https://developers.notion.com/reference/rich-text.\n\nENHANCED: The 'content' field now automatically detects and parses markdown formatting - supports bold (**text**), italic (*text*), strikethrough (~~text~~), inline code (`code`), and links ([text](url)). Headers (# ## ###) are handled via block_property.","properties":{"block_property":{"default":"paragraph","description":"The block property of the block to be added. **Common text blocks:** `paragraph`, `heading_1`, `heading_2`, `heading_3`, `callout`, `to_do`, `toggle`, `quote`, `bulleted_list_item`, `numbered_list_item`. **Special blocks:** `divider` (creates a horizontal divider line, no content required). **Media/embed blocks:** `file`, `image`, `video` (requires `link` field with external URL - direct file uploads not supported). \n\n**NOTE:** Notion API only supports heading levels 1-3. heading_4, heading_5, etc. are automatically converted to heading_3.","enum":["paragraph","heading_1","heading_2","heading_3","callout","to_do","toggle","quote","bulleted_list_item","numbered_list_item","file","image","video","divider"],"examples":["paragraph","heading_1","heading_2","heading_3","bulleted_list_item","numbered_list_item","to_do","callout","toggle","quote","divider"],"title":"BlockProperty","type":"string"},"bold":{"default":false,"description":"Indicates if the text is bold.","examples":[true,false],"title":"Bold","type":"boolean"},"code":{"default":false,"description":"Indicates if the text is formatted as code.","examples":[true,false],"title":"Code","type":"boolean"},"color":{"default":"default","description":"The color of the text background or text itself.","examples":["blue_background","yellow_background","gray","purple"],"title":"Color","type":"string"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The textual content for TEXT blocks only. ENHANCED: Automatically parses markdown formatting including bold (**text**), italic (*text*), strikethrough (~~text~~), inline code (`code`), and links ([text](url)). Required for: paragraph, heading_1, heading_2, heading_3, callout, to_do, toggle, quote. NOT USED for media blocks (image, video, file) - use 'link' field instead.","examples":["Hello World","This is **bold** and *italic* text","Visit [our site](https://example.com)","Use `code` snippets","~~Strikethrough~~ text"],"title":"Content"},"italic":{"default":false,"description":"Indicates if the text is italic.","examples":[true,false],"title":"Italic","type":"boolean"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL for hyperlinks or media blocks. For TEXT blocks: optional URL to make text clickable. For MEDIA blocks (image, video, file): REQUIRED - must be a valid external URL (http/https). Do not pass placeholder text in 'content' for media blocks.","examples":["https://www.google.com","https://example.com/image.png"],"title":"Link"},"strikethrough":{"default":false,"description":"Indicates if the text has strikethrough.","examples":[true,false],"title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Indicates if the text is underlined.","examples":[true,false],"title":"Underline","type":"boolean"}},"title":"NotionRichText","type":"object"},{"additionalProperties":true,"description":"Full Notion block format for input. Use this when you need precise control\nover block structure. For simpler cases, use the NotionRichText format.","properties":{"audio":{"anyOf":[{"description":"Media block content (image/video/audio/file/pdf) for input","properties":{"caption":{"anyOf":[{"items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Caption for the media","title":"Caption"},"external":{"description":"External file reference with URL","properties":{"url":{"description":"URL of the external file","title":"Url","type":"string"}},"required":["url"],"title":"InputExternalFile","type":"object"},"type":{"const":"external","default":"external","description":"Source type (external for URL-based)","title":"Type","type":"string"}},"required":["external"],"title":"InputMediaContent","type":"object"},{"type":"null"}],"default":null,"description":"Audio content (when type is 'audio')"},"bookmark":{"anyOf":[{"description":"Bookmark block content for input","properties":{"caption":{"anyOf":[{"items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Caption for the bookmark","title":"Caption"},"url":{"description":"URL of the bookmarked page","title":"Url","type":"string"}},"required":["url"],"title":"InputBookmarkContent","type":"object"},{"type":"null"}],"default":null,"description":"Bookmark content (when type is 'bookmark')"},"bulleted_list_item":{"anyOf":[{"additionalProperties":true,"description":"List item block content for input","properties":{"color":{"default":"default","description":"Block color","title":"Color","type":"string"},"rich_text":{"description":"Array of rich text objects","items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"InputListItemContent","type":"object"},{"type":"null"}],"default":null,"description":"Bulleted list item content (when type is 'bulleted_list_item')"},"callout":{"anyOf":[{"additionalProperties":true,"description":"Callout block content for input","properties":{"color":{"default":"default","description":"Block color","title":"Color","type":"string"},"icon":{"anyOf":[{"description":"Icon for a callout block input","properties":{"emoji":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Emoji character (when type is 'emoji')","title":"Emoji"},"external":{"anyOf":[{"description":"External file reference for input","properties":{"url":{"description":"URL of the external file","title":"Url","type":"string"}},"required":["url"],"title":"InputExternalFile","type":"object"},{"type":"null"}],"default":null,"description":"External file URL (when type is 'external')"},"type":{"description":"Type of icon: 'emoji' or 'external'","enum":["emoji","external"],"title":"Type","type":"string"}},"required":["type"],"title":"InputCalloutIcon","type":"object"},{"type":"null"}],"default":null,"description":"Icon for the callout"},"rich_text":{"description":"Array of rich text objects","items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"InputCalloutContent","type":"object"},{"type":"null"}],"default":null,"description":"Callout content (when type is 'callout')"},"code":{"anyOf":[{"description":"Code block content for input","properties":{"caption":{"anyOf":[{"items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Caption for the code block","title":"Caption"},"language":{"default":"plain text","description":"Programming language for syntax highlighting","title":"Language","type":"string"},"rich_text":{"description":"Array of rich text objects containing code","items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"InputCodeContent","type":"object"},{"type":"null"}],"default":null,"description":"Code content (when type is 'code')"},"divider":{"anyOf":[{"additionalProperties":true,"description":"Divider block content (empty object)","properties":{},"title":"InputDividerContent","type":"object"},{"type":"null"}],"default":null,"description":"Divider content (when type is 'divider')"},"embed":{"anyOf":[{"description":"Embed block content for input","properties":{"url":{"description":"URL of the embedded content","title":"Url","type":"string"}},"required":["url"],"title":"InputEmbedContent","type":"object"},{"type":"null"}],"default":null,"description":"Embed content (when type is 'embed')"},"equation":{"anyOf":[{"description":"Equation block content for input","properties":{"expression":{"description":"LaTeX format equation expression","title":"Expression","type":"string"}},"required":["expression"],"title":"InputEquationContent","type":"object"},{"type":"null"}],"default":null,"description":"Equation content (when type is 'equation')"},"file":{"anyOf":[{"description":"Media block content (image/video/audio/file/pdf) for input","properties":{"caption":{"anyOf":[{"items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Caption for the media","title":"Caption"},"external":{"description":"External file reference with URL","properties":{"url":{"description":"URL of the external file","title":"Url","type":"string"}},"required":["url"],"title":"InputExternalFile","type":"object"},"type":{"const":"external","default":"external","description":"Source type (external for URL-based)","title":"Type","type":"string"}},"required":["external"],"title":"InputMediaContent","type":"object"},{"type":"null"}],"default":null,"description":"File content (when type is 'file')"},"heading_1":{"anyOf":[{"description":"Heading block content for input","properties":{"color":{"default":"default","description":"Block color","title":"Color","type":"string"},"is_toggleable":{"default":false,"description":"Whether heading is toggleable","title":"Is Toggleable","type":"boolean"},"rich_text":{"description":"Array of rich text objects","items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"InputHeadingContent","type":"object"},{"type":"null"}],"default":null,"description":"Heading 1 content (when type is 'heading_1')"},"heading_2":{"anyOf":[{"description":"Heading block content for input","properties":{"color":{"default":"default","description":"Block color","title":"Color","type":"string"},"is_toggleable":{"default":false,"description":"Whether heading is toggleable","title":"Is Toggleable","type":"boolean"},"rich_text":{"description":"Array of rich text objects","items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"InputHeadingContent","type":"object"},{"type":"null"}],"default":null,"description":"Heading 2 content (when type is 'heading_2')"},"heading_3":{"anyOf":[{"description":"Heading block content for input","properties":{"color":{"default":"default","description":"Block color","title":"Color","type":"string"},"is_toggleable":{"default":false,"description":"Whether heading is toggleable","title":"Is Toggleable","type":"boolean"},"rich_text":{"description":"Array of rich text objects","items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"InputHeadingContent","type":"object"},{"type":"null"}],"default":null,"description":"Heading 3 content (when type is 'heading_3')"},"image":{"anyOf":[{"description":"Media block content (image/video/audio/file/pdf) for input","properties":{"caption":{"anyOf":[{"items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Caption for the media","title":"Caption"},"external":{"description":"External file reference with URL","properties":{"url":{"description":"URL of the external file","title":"Url","type":"string"}},"required":["url"],"title":"InputExternalFile","type":"object"},"type":{"const":"external","default":"external","description":"Source type (external for URL-based)","title":"Type","type":"string"}},"required":["external"],"title":"InputMediaContent","type":"object"},{"type":"null"}],"default":null,"description":"Image content (when type is 'image')"},"numbered_list_item":{"anyOf":[{"additionalProperties":true,"description":"List item block content for input","properties":{"color":{"default":"default","description":"Block color","title":"Color","type":"string"},"rich_text":{"description":"Array of rich text objects","items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"InputListItemContent","type":"object"},{"type":"null"}],"default":null,"description":"Numbered list item content (when type is 'numbered_list_item')"},"object":{"const":"block","default":"block","description":"Always 'block' for block objects","title":"Object","type":"string"},"paragraph":{"anyOf":[{"additionalProperties":true,"description":"Paragraph block content for input","properties":{"color":{"default":"default","description":"Block color","title":"Color","type":"string"},"rich_text":{"description":"Array of rich text objects","items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"InputParagraphContent","type":"object"},{"type":"null"}],"default":null,"description":"Paragraph content (when type is 'paragraph')"},"pdf":{"anyOf":[{"description":"Media block content (image/video/audio/file/pdf) for input","properties":{"caption":{"anyOf":[{"items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Caption for the media","title":"Caption"},"external":{"description":"External file reference with URL","properties":{"url":{"description":"URL of the external file","title":"Url","type":"string"}},"required":["url"],"title":"InputExternalFile","type":"object"},"type":{"const":"external","default":"external","description":"Source type (external for URL-based)","title":"Type","type":"string"}},"required":["external"],"title":"InputMediaContent","type":"object"},{"type":"null"}],"default":null,"description":"PDF content (when type is 'pdf')"},"quote":{"anyOf":[{"additionalProperties":true,"description":"Quote block content for input","properties":{"color":{"default":"default","description":"Block color","title":"Color","type":"string"},"rich_text":{"description":"Array of rich text objects","items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"InputQuoteContent","type":"object"},{"type":"null"}],"default":null,"description":"Quote content (when type is 'quote')"},"table_of_contents":{"anyOf":[{"description":"Table of contents block content for input","properties":{"color":{"default":"default","description":"Block color","title":"Color","type":"string"}},"title":"InputTableOfContentsContent","type":"object"},{"type":"null"}],"default":null,"description":"Table of contents content (when type is 'table_of_contents')"},"to_do":{"anyOf":[{"additionalProperties":true,"description":"To-do block content for input","properties":{"checked":{"default":false,"description":"Whether the to-do is checked","title":"Checked","type":"boolean"},"color":{"default":"default","description":"Block color","title":"Color","type":"string"},"rich_text":{"description":"Array of rich text objects","items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"InputToDoContent","type":"object"},{"type":"null"}],"default":null,"description":"To-do content (when type is 'to_do')"},"toggle":{"anyOf":[{"additionalProperties":true,"description":"Toggle block content for input","properties":{"color":{"default":"default","description":"Block color","title":"Color","type":"string"},"rich_text":{"description":"Array of rich text objects","items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"InputToggleContent","type":"object"},{"type":"null"}],"default":null,"description":"Toggle content (when type is 'toggle')"},"type":{"description":"Block type: 'paragraph', 'heading_1', 'heading_2', 'heading_3', 'bulleted_list_item', 'numbered_list_item', 'to_do', 'toggle', 'code', 'quote', 'callout', 'divider', 'table_of_contents', 'image', 'video', 'audio', 'file', 'pdf', 'bookmark', 'embed', 'equation'","title":"Type","type":"string"},"video":{"anyOf":[{"description":"Media block content (image/video/audio/file/pdf) for input","properties":{"caption":{"anyOf":[{"items":{"additionalProperties":true,"description":"Rich text object for block input","properties":{"annotations":{"anyOf":[{"description":"Styling annotations for rich text input","properties":{"bold":{"default":false,"description":"Whether the text is bold","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is code-formatted","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color: 'default', 'blue', 'blue_background', 'brown', 'brown_background', 'gray', 'gray_background', 'green', 'green_background', 'orange', 'orange_background', 'pink', 'pink_background', 'purple', 'purple_background', 'red', 'red_background', 'yellow', 'yellow_background'","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined","title":"Underline","type":"boolean"}},"title":"InputRichTextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Styling annotations"},"text":{"anyOf":[{"description":"Text content for rich text input","properties":{"content":{"description":"The actual text content (max 2000 chars)","title":"Content","type":"string"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if this text should be a hyperlink","title":"Link"}},"required":["content"],"title":"InputTextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content (when type is 'text')"},"type":{"default":"text","description":"Type of rich text","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"InputRichTextObject","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Caption for the media","title":"Caption"},"external":{"description":"External file reference with URL","properties":{"url":{"description":"URL of the external file","title":"Url","type":"string"}},"required":["url"],"title":"InputExternalFile","type":"object"},"type":{"const":"external","default":"external","description":"Source type (external for URL-based)","title":"Type","type":"string"}},"required":["external"],"title":"InputMediaContent","type":"object"},{"type":"null"}],"default":null,"description":"Video content (when type is 'video')"}},"required":["type"],"title":"FullNotionBlockInput","type":"object"}],"description":"⚠️ CRITICAL: Notion API enforces a HARD LIMIT of 2000 characters per text.content field in rich_text arrays. Content exceeding 2000 chars will be AUTOMATICALLY split into multiple blocks.\n\nSHORTCUT: You can pass a plain 'content' string at the top level (alongside page_id) and it will be auto-wrapped as a paragraph block.\n\nOPTION 1 - Simplified format: Provide {'content': 'text', 'block_property': 'type'}. The 'content' field is MANDATORY for: paragraph, heading_1, heading_2, heading_3, callout, to_do, toggle, quote, bulleted_list_item, numbered_list_item. Maximum 2000 chars per content field.\n\nOPTION 2 - Full Notion block format: Provide complete block structure with 'type' and properties. Must include 'object': 'block' and proper rich_text arrays.\n\nFor file/image/video blocks: use 'link' instead of 'content'. Common errors: Missing 'content' for text blocks, exceeding 2000 chars, invalid block structure.","examples":[{"block_property":"paragraph","content":"This is a paragraph added via API (max 2000 chars)."},{"block_property":"heading_1","content":"Section Title"},{"block_property":"image","link":"https://example.com/image.jpg"},{"paragraph":{"rich_text":[{"text":{"content":"Full block schema example."},"type":"text"}]},"type":"paragraph"}],"title":"Content Block"},"parent_block_id":{"description":"Identifier of the parent page or block to which the new content block will be added. Parent must be one of: Page, Toggle, To-do, Bulleted/Numbered List Item, Callout, or Quote. Ensure your integration has access to this block. Use other Notion actions to obtain valid IDs. Alternative field names 'page_id' or 'block_id' are also accepted and will be normalized. Must not be empty.","examples":["4b5f6e87-123a-456b-789c-9de8f7a9e4c1"],"minLength":1,"title":"Parent Block Id","type":"string"}},"required":["parent_block_id","content_block"],"title":"AddPageContentRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use NOTION_APPEND_TEXT_BLOCKS, NOTION_APPEND_TASK_BLOCKS, NOTION_APPEND_CODE_BLOCKS, NOTION_APPEND_MEDIA_BLOCKS, NOTION_APPEND_LAYOUT_BLOCKS, or NOTION_APPEND_TABLE_BLOCKS instead. Appends raw Notion API blocks to parent. Text limited to 2000 chars per text.content field. Each block MUST have 'object':'block' and 'type'. Use rich_text arrays for text blocks.","name":"NOTION_APPEND_BLOCK_CHILDREN","parameters":{"description":"Request model for appending child blocks to an existing block.","properties":{"after":{"description":"Optional UUID of an existing child block. New blocks will be inserted after this block. Must be a valid child block ID of the parent block. If omitted, blocks are appended at the end. Do not use placeholder values like '' or invalid IDs.","examples":["9bc30ad4-9373-46a5-84ab-0a7845ee52e6",null],"title":"After","type":"string"},"block_id":{"description":"The unique identifier (UUID) of the parent block or page to append children to. Must be a valid Notion block/page ID in UUID format (with or without hyphens). Use NOTION_FETCH_DATA to find valid page IDs. Do not use placeholder values.","examples":["b55c9c91-384d-452b-81db-d1ef79372b75","b55c9c91384d452b81dbd1ef79372b75"],"title":"Block Id","type":"string"},"children":{"description":"⚠️ CRITICAL: Notion API enforces 2000 char limit per text.content field in rich_text arrays.\nArray of block objects following Notion's block schema. Each block MUST include:\n- 'object': 'block' (REQUIRED)\n- 'type': block type (REQUIRED)\n- Property matching type name with 'rich_text' array for text blocks\n\nPass an actual array of objects, NOT a JSON string. The parameter expects a list/array type, not a stringified JSON.\n\nText blocks (paragraph, heading_1-3, etc.) MUST use 'rich_text' array structure:\n{'rich_text': [{'type': 'text', 'text': {'content': 'your text here (max 2000 chars)'}}]}\n\n⚠️ TABLE BLOCKS: Table blocks support up to 2 levels of nesting. The 'table' property MUST contain:\n- 'table_width': number of columns (integer ≥ 1)\n- 'has_column_header': boolean\n- 'has_row_header': boolean\n- 'children': array with at least 1 table_row block\nEach table_row MUST have 'cells' array with length = table_width. Each cell is an array of rich_text.\nExample: {'type': 'table', 'object': 'block', 'table': {'table_width': 2, 'has_column_header': false, 'has_row_header': false, 'children': [{'type': 'table_row', 'object': 'block', 'table_row': {'cells': [[{'type': 'text', 'text': {'content': 'Cell 1'}}], [{'type': 'text', 'text': {'content': 'Cell 2'}}]]}}]}}\n\nCommon errors:\n- Passing a JSON string instead of an array (WRONG: '\"[{...}]\"' | CORRECT: [{...}])\n- Using 'text' instead of 'rich_text' (WRONG: heading_2: {'text': ...})\n- Missing 'object': 'block' field\n- Text content exceeding 2000 characters\n- Malformed rich_text array structure\n- Table without 'children' array or with empty 'children'\n- Table_row cells array length ≠ table_width\n- Nesting block objects directly in table cells (cells contain rich_text arrays, not blocks)\n\nMax 100 blocks per request.","examples":[[{"heading_2":{"rich_text":[{"text":{"content":"Section Title"},"type":"text"}]},"object":"block","type":"heading_2"}],[{"object":"block","paragraph":{"rich_text":[{"text":{"content":"This is a paragraph."},"type":"text"}]},"type":"paragraph"}],[{"code":{"language":"python","rich_text":[{"text":{"content":"print('Hello')"},"type":"text"}]},"object":"block","type":"code"}],[{"object":"block","table":{"children":[{"object":"block","table_row":{"cells":[[{"text":{"content":"Header 1"},"type":"text"}],[{"text":{"content":"Header 2"},"type":"text"}]]},"type":"table_row"},{"object":"block","table_row":{"cells":[[{"text":{"content":"Row 1 Col 1"},"type":"text"}],[{"text":{"content":"Row 1 Col 2"},"type":"text"}]]},"type":"table_row"}],"has_column_header":true,"has_row_header":false,"table_width":2},"type":"table"}]],"items":{"additionalProperties":false,"properties":{},"type":"object"},"title":"Children","type":"array"}},"required":["block_id","children"],"title":"AppendBlockChildrenRequest","type":"object"}},"type":"function"},{"function":{"description":"Append code and technical blocks (code, quote, equation) to a Notion page. Use for: - Code snippets and programming examples (code) - Citations and highlighted quotes (quote) - Mathematical formulas and equations (equation) Supported block types: - code: Code with syntax highlighting (70+ languages including Python, JavaScript, Go, Rust, etc.) - quote: Block quotes for citations - equation: LaTeX/KaTeX mathematical expressions ⚠️ Code content is limited to 2000 characters per text.content field. For longer code, split into multiple code blocks. For other block types, use specialized actions: - append_text_blocks: paragraphs, headings, lists - append_task_blocks: to-do, toggle, callout - append_media_blocks: image, video, audio, files - append_layout_blocks: divider, columns, TOC - append_table_blocks: tables","name":"NOTION_APPEND_CODE_BLOCKS","parameters":{"description":"Request model for appending code/technical blocks to a Notion page.","properties":{"after":{"description":"Optional UUID of an existing child block. New blocks will be inserted after this block.","title":"After","type":"string"},"block_id":{"description":"The UUID of the parent block or page to append children to.","examples":["b55c9c91-384d-452b-81db-d1ef79372b75"],"title":"Block Id","type":"string"},"children":{"description":"Array of code/technical block objects to append. Supported types:\n- code: Code snippet with syntax highlighting (supports 70+ languages)\n- quote: Block quote for citations or highlighted text\n- equation: Mathematical equation using LaTeX/KaTeX syntax\n\n⚠️ Code content limited to 2000 characters per rich_text text.content field.\nFor longer code, split into multiple code blocks.\nMax 100 blocks per request.","examples":[[{"code":{"language":"python","rich_text":[{"text":{"content":"print('Hello, World!')"},"type":"text"}]},"object":"block","type":"code"}],[{"equation":{"expression":"E = mc^2"},"object":"block","type":"equation"}]],"items":{"anyOf":[{"description":"A code block object with syntax highlighting.","properties":{"code":{"description":"Code content.","properties":{"caption":{"anyOf":[{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional caption for the code block.","title":"Caption"},"language":{"default":"plain text","description":"Programming language for syntax highlighting.","enum":["abap","arduino","bash","basic","c","clojure","coffeescript","c++","c#","css","dart","diff","docker","elixir","elm","erlang","flow","fortran","f#","gherkin","glsl","go","graphql","groovy","haskell","html","java","javascript","json","julia","kotlin","latex","less","lisp","livescript","lua","makefile","markdown","markup","matlab","mermaid","nix","objective-c","ocaml","pascal","perl","php","plain text","powershell","prolog","protobuf","python","r","reason","ruby","rust","sass","scala","scheme","scss","shell","sql","swift","typescript","vb.net","verilog","vhdl","visual basic","webassembly","xml","yaml","java/c/c++/c#"],"title":"CodeLanguage","type":"string"},"rich_text":{"description":"Array of rich text objects containing the code. Each text.content is limited to 2000 chars.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"CodeInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"code","default":"code","description":"Block type.","title":"Type","type":"string"}},"required":["code"],"title":"CodeBlockInput","type":"object"},{"description":"A quote block object.","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"quote":{"description":"Quote content.","properties":{"color":{"default":"default","description":"Color of the quote.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"rich_text":{"description":"Array of rich text objects for the quote text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"QuoteInput","type":"object"},"type":{"const":"quote","default":"quote","description":"Block type.","title":"Type","type":"string"}},"required":["quote"],"title":"QuoteBlockInput","type":"object"},{"description":"An equation block object (LaTeX/KaTeX).","properties":{"equation":{"description":"Equation content.","properties":{"expression":{"description":"LaTeX/KaTeX expression for the equation.","examples":["E = mc^2","\\frac{-b \\pm \\sqrt{b^2-4ac}}{2a}"],"title":"Expression","type":"string"}},"required":["expression"],"title":"EquationInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"equation","default":"equation","description":"Block type.","title":"Type","type":"string"}},"required":["equation"],"title":"EquationBlockInput","type":"object"}]},"maxItems":100,"title":"Children","type":"array"}},"required":["block_id","children"],"title":"AppendCodeBlocksRequest","type":"object"}},"type":"function"},{"function":{"description":"Append layout blocks (divider, TOC, breadcrumb, columns) to a Notion page. Supported types: - divider: Horizontal line separator - table_of_contents: Auto-generated from headings - breadcrumb: Page hierarchy navigation - column_list: Multi-column layout (requires 2+ columns, each with 1+ child block) For multi-column layouts, create column_list with column children in one request. Each column must contain at least 1 child block. For other blocks, use: append_text_blocks, append_task_blocks, append_code_blocks, append_media_blocks, or append_table_blocks.","name":"NOTION_APPEND_LAYOUT_BLOCKS","parameters":{"description":"Request model for appending layout blocks to a Notion page.","properties":{"after":{"description":"Optional UUID of an existing child block. New blocks will be inserted after this block.","title":"After","type":"string"},"block_id":{"description":"The UUID of the parent block or page to append children to.","examples":["b55c9c91-384d-452b-81db-d1ef79372b75"],"title":"Block Id","type":"string"},"children":{"description":"Array of layout/structural block objects to append. Supported types:\n- divider: Horizontal line separator\n- table_of_contents: Auto-generated TOC from headings\n- breadcrumb: Navigation breadcrumb (auto-generated)\n- column_list: Container with at least 2 columns, each column must have at least 1 child block\n- column: Individual column (must be child of column_list)\n\nNote: column_list blocks must include their column children in the same request. Each column must contain at least one child block.\nMax 100 blocks per request.","examples":[[{"divider":{},"object":"block","type":"divider"}],[{"object":"block","table_of_contents":{"color":"default"},"type":"table_of_contents"}]],"items":{"anyOf":[{"description":"A divider block object (horizontal line).","properties":{"divider":{"additionalProperties":false,"description":"Divider content (empty object).","properties":{},"title":"DividerInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"divider","default":"divider","description":"Block type.","title":"Type","type":"string"}},"title":"DividerBlockInput","type":"object"},{"description":"A table of contents block object.","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"table_of_contents":{"description":"Table of contents content.","properties":{"color":{"default":"default","description":"Color of the table of contents.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"}},"title":"TableOfContentsInput","type":"object"},"type":{"const":"table_of_contents","default":"table_of_contents","description":"Block type.","title":"Type","type":"string"}},"title":"TableOfContentsBlockInput","type":"object"},{"description":"A breadcrumb block object.","properties":{"breadcrumb":{"additionalProperties":false,"description":"Breadcrumb content (empty object - auto-generated).","properties":{},"title":"BreadcrumbInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"breadcrumb","default":"breadcrumb","description":"Block type.","title":"Type","type":"string"}},"title":"BreadcrumbBlockInput","type":"object"},{"description":"A column list block object. Children must be column blocks.","properties":{"column_list":{"description":"Column list content with at least 2 column children.","properties":{"children":{"description":"Array of column block objects. A column_list must contain at least 2 columns.","items":{"description":"A column block object. Must be a child of column_list.","properties":{"column":{"description":"Column content with nested child blocks. Each column must have at least one child block.","properties":{"children":{"description":"Array of block objects to nest inside the column. Each column must contain at least one child block. Can contain any block type except other column blocks.","items":{"additionalProperties":true,"type":"object"},"minItems":1,"title":"Children","type":"array"}},"required":["children"],"title":"ColumnInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"column","default":"column","description":"Block type.","title":"Type","type":"string"}},"required":["column"],"title":"ColumnBlockInput","type":"object"},"minItems":2,"title":"Children","type":"array"}},"required":["children"],"title":"ColumnListInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"column_list","default":"column_list","description":"Block type.","title":"Type","type":"string"}},"required":["column_list"],"title":"ColumnListBlockInput","type":"object"},{"description":"A column block object. Must be a child of column_list.","properties":{"column":{"description":"Column content with nested child blocks. Each column must have at least one child block.","properties":{"children":{"description":"Array of block objects to nest inside the column. Each column must contain at least one child block. Can contain any block type except other column blocks.","items":{"additionalProperties":true,"type":"object"},"minItems":1,"title":"Children","type":"array"}},"required":["children"],"title":"ColumnInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"column","default":"column","description":"Block type.","title":"Type","type":"string"}},"required":["column"],"title":"ColumnBlockInput","type":"object"}]},"maxItems":100,"title":"Children","type":"array"}},"required":["block_id","children"],"title":"AppendLayoutBlocksRequest","type":"object"}},"type":"function"},{"function":{"description":"Append media blocks (image, video, audio, file, pdf, embed, bookmark) to a Notion page. Use for: - Images and screenshots (image) - YouTube/Vimeo videos or direct video URLs (video) - Audio files and podcasts (audio) - File downloads (file) - PDF documents (pdf) - Embedded content from Twitter, Figma, CodePen, etc. (embed) - Link previews with metadata (bookmark) All media blocks require external URLs. For other block types, use specialized actions: - append_text_blocks: paragraphs, headings, lists - append_task_blocks: to-do, toggle, callout - append_code_blocks: code, quote, equation - append_layout_blocks: divider, columns, TOC - append_table_blocks: tables","name":"NOTION_APPEND_MEDIA_BLOCKS","parameters":{"description":"Request model for appending media blocks to a Notion page.","properties":{"after":{"description":"Optional UUID of an existing child block. New blocks will be inserted after this block.","title":"After","type":"string"},"block_id":{"description":"The UUID of the parent block or page to append children to.","examples":["b55c9c91-384d-452b-81db-d1ef79372b75"],"title":"Block Id","type":"string"},"children":{"description":"Array of media block objects to append. Supported types:\n- image: Image from external URL\n- video: Video from YouTube, Vimeo, or direct URL\n- audio: Audio file from external URL\n- file: Generic file download link\n- pdf: PDF document (rendered inline)\n- embed: Embed from supported services (Twitter, Figma, CodePen, etc.)\n- bookmark: Link preview with title and description\n\nAll media types require an external URL.\nMax 100 blocks per request.","examples":[[{"image":{"external":{"url":"https://example.com/image.png"},"type":"external"},"object":"block","type":"image"}],[{"bookmark":{"url":"https://github.com"},"object":"block","type":"bookmark"}]],"items":{"anyOf":[{"description":"An image block object.","properties":{"image":{"description":"Image content.","properties":{"caption":{"anyOf":[{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional caption for the image.","title":"Caption"},"external":{"description":"External image URL.","properties":{"url":{"description":"URL of the external file, image, or video.","examples":["https://example.com/image.png","https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"title":"Url","type":"string"}},"required":["url"],"title":"ExternalFileInput","type":"object"},"type":{"const":"external","default":"external","description":"Image source type. Use 'external' for URLs.","title":"Type","type":"string"}},"required":["external"],"title":"ImageInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"image","default":"image","description":"Block type.","title":"Type","type":"string"}},"required":["image"],"title":"ImageBlockInput","type":"object"},{"description":"A video block object.","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"video","default":"video","description":"Block type.","title":"Type","type":"string"},"video":{"description":"Video content.","properties":{"caption":{"anyOf":[{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional caption for the video.","title":"Caption"},"external":{"description":"External video URL. Supports YouTube, Vimeo, and direct video file URLs.","properties":{"url":{"description":"URL of the external file, image, or video.","examples":["https://example.com/image.png","https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"title":"Url","type":"string"}},"required":["url"],"title":"ExternalFileInput","type":"object"},"type":{"const":"external","default":"external","description":"Video source type. Use 'external' for URLs.","title":"Type","type":"string"}},"required":["external"],"title":"VideoInput","type":"object"}},"required":["video"],"title":"VideoBlockInput","type":"object"},{"description":"An audio block object.","properties":{"audio":{"description":"Audio content.","properties":{"caption":{"anyOf":[{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional caption for the audio.","title":"Caption"},"external":{"description":"External audio URL.","properties":{"url":{"description":"URL of the external file, image, or video.","examples":["https://example.com/image.png","https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"title":"Url","type":"string"}},"required":["url"],"title":"ExternalFileInput","type":"object"},"type":{"const":"external","default":"external","description":"Audio source type. Use 'external' for URLs.","title":"Type","type":"string"}},"required":["external"],"title":"AudioInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"audio","default":"audio","description":"Block type.","title":"Type","type":"string"}},"required":["audio"],"title":"AudioBlockInput","type":"object"},{"description":"A file block object.","properties":{"file":{"description":"File content.","properties":{"caption":{"anyOf":[{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional caption for the file.","title":"Caption"},"external":{"description":"External file URL.","properties":{"url":{"description":"URL of the external file, image, or video.","examples":["https://example.com/image.png","https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"title":"Url","type":"string"}},"required":["url"],"title":"ExternalFileInput","type":"object"},"type":{"const":"external","default":"external","description":"File source type. Use 'external' for URLs.","title":"Type","type":"string"}},"required":["external"],"title":"FileBlockInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"file","default":"file","description":"Block type.","title":"Type","type":"string"}},"required":["file"],"title":"FileBlockInputObj","type":"object"},{"description":"A PDF block object.","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"pdf":{"description":"PDF content.","properties":{"caption":{"anyOf":[{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional caption for the PDF.","title":"Caption"},"external":{"description":"External PDF URL.","properties":{"url":{"description":"URL of the external file, image, or video.","examples":["https://example.com/image.png","https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"title":"Url","type":"string"}},"required":["url"],"title":"ExternalFileInput","type":"object"},"type":{"const":"external","default":"external","description":"PDF source type. Use 'external' for URLs.","title":"Type","type":"string"}},"required":["external"],"title":"PdfInput","type":"object"},"type":{"const":"pdf","default":"pdf","description":"Block type.","title":"Type","type":"string"}},"required":["pdf"],"title":"PdfBlockInput","type":"object"},{"description":"An embed block object (iframe for supported services).","properties":{"embed":{"description":"Embed content.","properties":{"url":{"description":"URL to embed. Supports Twitter, Google Maps, Figma, CodePen, and more.","examples":["https://twitter.com/NotionHQ/status/1234567890","https://www.figma.com/file/xxxxx"],"title":"Url","type":"string"}},"required":["url"],"title":"EmbedInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"embed","default":"embed","description":"Block type.","title":"Type","type":"string"}},"required":["embed"],"title":"EmbedBlockInput","type":"object"},{"description":"A bookmark block object (link preview).","properties":{"bookmark":{"description":"Bookmark content.","properties":{"caption":{"anyOf":[{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional caption for the bookmark.","title":"Caption"},"url":{"description":"URL of the webpage to bookmark.","examples":["https://www.notion.so","https://github.com"],"title":"Url","type":"string"}},"required":["url"],"title":"BookmarkInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"bookmark","default":"bookmark","description":"Block type.","title":"Type","type":"string"}},"required":["bookmark"],"title":"BookmarkBlockInput","type":"object"}]},"maxItems":100,"title":"Children","type":"array"}},"required":["block_id","children"],"title":"AppendMediaBlocksRequest","type":"object"}},"type":"function"},{"function":{"description":"Append table blocks to a Notion page. Use for structured tabular data like spreadsheets, comparison charts, and status trackers. Example: { \"table_width\": 3, \"has_column_header\": true, \"rows\": [ {\"cells\": [[{\"type\": \"text\", \"text\": {\"content\": \"Col1\"}}], [...], [...]]} ] } ⚠️ Cell content limited to 2000 chars per text.content field.","name":"NOTION_APPEND_TABLE_BLOCKS","parameters":{"description":"Request model for appending table blocks to a Notion page.","properties":{"after":{"description":"Optional UUID of an existing child block. New blocks will be inserted after this block.","title":"After","type":"string"},"block_id":{"description":"The UUID of the parent block or page to append children to.","examples":["b55c9c91-384d-452b-81db-d1ef79372b75"],"title":"Block Id","type":"string"},"tables":{"description":"Array of tables to append. Each table includes:\n- table_width: Number of columns (1-100)\n- has_column_header: Style first row as header (optional, default false)\n- has_row_header: Style first column as header (optional, default false)\n- rows: Array of row objects (at least one required)\n\nEach row contains a 'cells' array where each cell is an array of rich text objects.\nThe number of cells in each row MUST match table_width.\n\n⚠️ Cell content limited to 2000 characters per rich_text text.content field.\nMax 100 tables per request.","examples":[[{"has_column_header":true,"rows":[{"cells":[[{"text":{"content":"Name"},"type":"text"}],[{"text":{"content":"Role"},"type":"text"}],[{"text":{"content":"Status"},"type":"text"}]]},{"cells":[[{"text":{"content":"Alice"},"type":"text"}],[{"text":{"content":"Engineer"},"type":"text"}],[{"text":{"content":"Active"},"type":"text"}]]}],"table_width":3}]],"items":{"description":"A table block with its rows.","properties":{"has_column_header":{"default":false,"description":"Whether the first row is styled as a header.","title":"Has Column Header","type":"boolean"},"has_row_header":{"default":false,"description":"Whether the first column is styled as a header.","title":"Has Row Header","type":"boolean"},"rows":{"description":"Array of table rows. At least one row is required. Each row's cells array must have exactly table_width elements.","items":{"description":"A single table row with cell data.","properties":{"cells":{"description":"Array of cells, where each cell is an array of rich text objects. Number of cells must match table_width.","items":{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},"title":"Cells","type":"array"}},"required":["cells"],"title":"TableRowInput","type":"object"},"minItems":1,"title":"Rows","type":"array"},"table_width":{"description":"Number of columns in the table. Cannot be changed after creation.","examples":[3,4,5],"maximum":100,"minimum":1,"title":"Table Width","type":"integer"}},"required":["table_width","rows"],"title":"TableBlockInput","type":"object"},"maxItems":100,"title":"Tables","type":"array"}},"required":["block_id","tables"],"title":"AppendTableBlocksRequest","type":"object"}},"type":"function"},{"function":{"description":"Append task blocks (to-do, toggle, callout) to a Notion page or block. Supported block types: - to_do: Checkbox items (checkable/uncheckable) - toggle: Collapsible sections - callout: Highlighted boxes with emoji icons All three types support nested children (up to 2 levels of nesting). block_id must be a page or block that supports children (e.g., page, toggle, paragraph, list items, quote, callout, to_do). Blocks like divider, breadcrumb, equation do NOT support children. Limits: 2000 chars per text.content, max 100 blocks per request. For other blocks: append_text_blocks, append_code_blocks, append_media_blocks, append_layout_blocks, append_table_blocks.","name":"NOTION_APPEND_TASK_BLOCKS","parameters":{"description":"Request model for appending task blocks to a Notion page.","properties":{"after":{"description":"Optional UUID of an existing child block. New blocks will be inserted after this block.","title":"After","type":"string"},"block_id":{"description":"The UUID of the parent page or block to append children to. Must be a page_id or a block type that supports children (e.g., toggle, paragraph, bulleted_list_item, numbered_list_item, quote, callout, to_do). Some block types like divider, breadcrumb, equation do NOT support children.","examples":["b55c9c91-384d-452b-81db-d1ef79372b75"],"title":"Block Id","type":"string"},"children":{"description":"Array of task/interactive block objects to append. Supported types:\n- to_do: Checkbox task item (can be checked/unchecked)\n- toggle: Collapsible section (click to expand/collapse)\n- callout: Highlighted box with emoji icon (for important notes)\n\n⚠️ Text content limited to 2000 characters per rich_text text.content field.\nMax 100 blocks per request. Max 2 levels of nesting allowed.","examples":[[{"object":"block","to_do":{"checked":false,"rich_text":[{"text":{"content":"Complete documentation"},"type":"text"}]},"type":"to_do"}],[{"callout":{"color":"yellow_background","icon":{"emoji":"💡","type":"emoji"},"rich_text":[{"text":{"content":"Important note!"},"type":"text"}]},"object":"block","type":"callout"}]],"items":{"anyOf":[{"description":"A to-do/checkbox block object.","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"to_do":{"description":"To-do content.","properties":{"checked":{"default":false,"description":"Whether the to-do item is checked/completed.","title":"Checked","type":"boolean"},"color":{"default":"default","description":"Color of the to-do item.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"rich_text":{"description":"Array of rich text objects for the to-do text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"ToDoInput","type":"object"},"type":{"const":"to_do","default":"to_do","description":"Block type.","title":"Type","type":"string"}},"required":["to_do"],"title":"ToDoBlockInput","type":"object"},{"description":"A toggle block object (collapsible content).","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"toggle":{"description":"Toggle content.","properties":{"color":{"default":"default","description":"Color of the toggle.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"rich_text":{"description":"Array of rich text objects for the toggle header text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"ToggleInput","type":"object"},"type":{"const":"toggle","default":"toggle","description":"Block type.","title":"Type","type":"string"}},"required":["toggle"],"title":"ToggleBlockInput","type":"object"},{"description":"A callout block object (highlighted content with icon).","properties":{"callout":{"description":"Callout content.","properties":{"color":{"default":"default","description":"Background color of the callout.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"icon":{"anyOf":[{"description":"Emoji icon for callout blocks.","properties":{"emoji":{"description":"Emoji character for the icon.","examples":["💡","⚠️","📝","🎉","✅"],"title":"Emoji","type":"string"},"type":{"const":"emoji","default":"emoji","description":"Icon type.","title":"Type","type":"string"}},"required":["emoji"],"title":"IconEmoji","type":"object"},{"type":"null"}],"default":null,"description":"Emoji icon for the callout. Defaults to 💡 if not provided."},"rich_text":{"description":"Array of rich text objects for the callout text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"CalloutInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"callout","default":"callout","description":"Block type.","title":"Type","type":"string"}},"required":["callout"],"title":"CalloutBlockInput","type":"object"}]},"maxItems":100,"title":"Children","type":"array"}},"required":["block_id","children"],"title":"AppendTaskBlocksRequest","type":"object"}},"type":"function"},{"function":{"description":"Append text blocks (paragraphs, headings, lists) to a Notion page. This is the most commonly used action for adding content to Notion. Use for: documentation, notes, articles, outlines, lists. Supported block types: - paragraph: Regular text - heading_1, heading_2, heading_3: Section headers - bulleted_list_item: Bullet points - numbered_list_item: Numbered lists ⚠️ Text content is limited to 2000 characters per text.content field. For other block types, use specialized actions: - append_task_blocks: to-do, toggle, callout - append_code_blocks: code, quote, equation - append_media_blocks: image, video, audio, files - append_layout_blocks: divider, columns, TOC - append_table_blocks: tables","name":"NOTION_APPEND_TEXT_BLOCKS","parameters":{"description":"Request model for appending text blocks to a Notion page.","properties":{"after":{"description":"Optional UUID of an existing child block. New blocks will be inserted after this block.","examples":["9bc30ad4-9373-46a5-84ab-0a7845ee52e6"],"title":"After","type":"string"},"block_id":{"description":"The UUID of the parent block or page to append children to.","examples":["b55c9c91-384d-452b-81db-d1ef79372b75","b55c9c91384d452b81dbd1ef79372b75"],"title":"Block Id","type":"string"},"children":{"description":"Array of text block objects to append (also accepts 'blocks' as parameter name). Supported types:\n- paragraph: Regular text paragraph\n- heading_1, heading_2, heading_3: Section headings\n- bulleted_list_item: Bullet point\n- numbered_list_item: Numbered list item\n\n⚠️ Text content limited to 2000 characters per rich_text text.content field.\nMax 100 blocks per request.","examples":[[{"heading_2":{"rich_text":[{"text":{"content":"Section Title"},"type":"text"}]},"object":"block","type":"heading_2"}],[{"object":"block","paragraph":{"rich_text":[{"text":{"content":"This is a paragraph."},"type":"text"}]},"type":"paragraph"}]],"items":{"oneOf":[{"description":"A paragraph block object.","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"paragraph":{"description":"Paragraph content.","properties":{"color":{"default":"default","description":"Color of the paragraph text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"rich_text":{"description":"Array of rich text objects. Each text.content is limited to 2000 chars.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"ParagraphInput","type":"object"},"type":{"const":"paragraph","default":"paragraph","description":"Block type.","title":"Type","type":"string"}},"required":["paragraph"],"title":"ParagraphBlockInput","type":"object"},{"description":"A heading 1 block object (largest heading).","properties":{"heading_1":{"description":"Heading 1 content.","properties":{"color":{"default":"default","description":"Color of the heading.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"is_toggleable":{"default":false,"description":"Whether the heading can be toggled to show/hide content.","title":"Is Toggleable","type":"boolean"},"rich_text":{"description":"Array of rich text objects for the heading text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"HeadingInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"heading_1","default":"heading_1","description":"Block type.","title":"Type","type":"string"}},"required":["heading_1"],"title":"Heading1BlockInput","type":"object"},{"description":"A heading 2 block object (medium heading).","properties":{"heading_2":{"description":"Heading 2 content.","properties":{"color":{"default":"default","description":"Color of the heading.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"is_toggleable":{"default":false,"description":"Whether the heading can be toggled to show/hide content.","title":"Is Toggleable","type":"boolean"},"rich_text":{"description":"Array of rich text objects for the heading text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"HeadingInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"heading_2","default":"heading_2","description":"Block type.","title":"Type","type":"string"}},"required":["heading_2"],"title":"Heading2BlockInput","type":"object"},{"description":"A heading 3 block object (smallest heading).","properties":{"heading_3":{"description":"Heading 3 content.","properties":{"color":{"default":"default","description":"Color of the heading.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"is_toggleable":{"default":false,"description":"Whether the heading can be toggled to show/hide content.","title":"Is Toggleable","type":"boolean"},"rich_text":{"description":"Array of rich text objects for the heading text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"HeadingInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"heading_3","default":"heading_3","description":"Block type.","title":"Type","type":"string"}},"required":["heading_3"],"title":"Heading3BlockInput","type":"object"},{"description":"A bulleted list item block object.","properties":{"bulleted_list_item":{"description":"Bulleted list item content.","properties":{"color":{"default":"default","description":"Color of the list item.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"rich_text":{"description":"Array of rich text objects for the list item text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"ListItemInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"bulleted_list_item","default":"bulleted_list_item","description":"Block type.","title":"Type","type":"string"}},"required":["bulleted_list_item"],"title":"BulletedListItemBlockInput","type":"object"},{"description":"A numbered list item block object.","properties":{"numbered_list_item":{"description":"Numbered list item content.","properties":{"color":{"default":"default","description":"Color of the list item.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"rich_text":{"description":"Array of rich text objects for the list item text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"ListItemInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"numbered_list_item","default":"numbered_list_item","description":"Block type.","title":"Type","type":"string"}},"required":["numbered_list_item"],"title":"NumberedListItemBlockInput","type":"object"}]},"maxItems":100,"title":"Children","type":"array"}},"required":["block_id","children"],"title":"AppendTextBlocksRequest","type":"object"}},"type":"function"},{"function":{"description":"Archives (moves to trash) or unarchives (restores from trash) a specified Notion page. Limitation: Workspace-level pages (top-level pages with no parent page or database) cannot be archived via the API and must be archived manually in the Notion UI.","name":"NOTION_ARCHIVE_NOTION_PAGE","parameters":{"properties":{"archive":{"default":true,"description":"Set to `true` to move the page to trash (archive), or `false` to restore it from trash (unarchive). Defaults to `true`.","title":"Archive","type":"boolean"},"page_id":{"description":"The unique identifier (UUID) of the Notion page to be archived or unarchived. Must be a page ID, not a database ID. Note: Workspace-level pages (pages that sit at the root of your workspace with no parent page or database) cannot be archived via the API - only pages nested under other pages or databases can be archived programmatically. Page IDs can be obtained using NOTION_SEARCH_NOTION_PAGE with filter_value='page' or from the 'id' field of page objects returned by other Notion actions.","examples":["a1b2c3d4-e5f6-7890-1234-567890abcdef"],"title":"Page Id","type":"string"}},"required":["page_id"],"title":"ArchiveNotionPageRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a comment to a Notion page (via `parent_page_id`) OR to an existing discussion thread (via `discussion_id`); cannot create new discussion threads on specific blocks (inline comments).","name":"NOTION_CREATE_COMMENT","parameters":{"properties":{"comment":{"additionalProperties":false,"description":"Content of the comment as a NotionRichText object or a JSON string. Simplest form: {'content': 'Looks good!'} or {'text': 'Looks good!'} (both 'content' and 'text' are accepted as the field name). Can also be passed as a JSON string: '{\"content\": \"Looks good!\"}'. Optional styling fields: bold, italic, etc. The 'link' field is for external URLs only (e.g., 'https://example.com'), NOT for page IDs. Do NOT wrap this in a list or use Notion API block JSON.","examples":[{"content":"Looks good to me!"},{"text":"Great work!"},{"bold":true,"content":"Fix typo"}],"properties":{"block_property":{"default":"paragraph","description":"The block property of the block to be added. **Common text blocks:** `paragraph`, `heading_1`, `heading_2`, `heading_3`, `callout`, `to_do`, `toggle`, `quote`, `bulleted_list_item`, `numbered_list_item`. **Special blocks:** `divider` (creates a horizontal divider line, no content required). **Media/embed blocks:** `file`, `image`, `video` (requires `link` field with external URL - direct file uploads not supported). \n\n**NOTE:** Notion API only supports heading levels 1-3. heading_4, heading_5, etc. are automatically converted to heading_3.","enum":["paragraph","heading_1","heading_2","heading_3","callout","to_do","toggle","quote","bulleted_list_item","numbered_list_item","file","image","video","divider"],"examples":["paragraph","heading_1","heading_2","heading_3","bulleted_list_item","numbered_list_item","to_do","callout","toggle","quote","divider"],"title":"Block Property","type":"string"},"bold":{"default":false,"description":"Indicates if the text is bold.","examples":[true,false],"title":"Bold","type":"boolean"},"code":{"default":false,"description":"Indicates if the text is formatted as code.","examples":[true,false],"title":"Code","type":"boolean"},"color":{"default":"default","description":"The color of the text background or text itself.","examples":["blue_background","yellow_background","gray","purple"],"title":"Color","type":"string"},"content":{"description":"The textual content for TEXT blocks only. ENHANCED: Automatically parses markdown formatting including bold (**text**), italic (*text*), strikethrough (~~text~~), inline code (`code`), and links ([text](url)). Required for: paragraph, heading_1, heading_2, heading_3, callout, to_do, toggle, quote. NOT USED for media blocks (image, video, file) - use 'link' field instead.","examples":["Hello World","This is **bold** and *italic* text","Visit [our site](https://example.com)","Use `code` snippets","~~Strikethrough~~ text"],"title":"Content","type":"string"},"italic":{"default":false,"description":"Indicates if the text is italic.","examples":[true,false],"title":"Italic","type":"boolean"},"link":{"description":"URL for hyperlinks or media blocks. For TEXT blocks: optional URL to make text clickable. For MEDIA blocks (image, video, file): REQUIRED - must be a valid external URL (http/https). Do not pass placeholder text in 'content' for media blocks.","examples":["https://www.google.com","https://example.com/image.png"],"title":"Link","type":"string"},"strikethrough":{"default":false,"description":"Indicates if the text has strikethrough.","examples":[true,false],"title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Indicates if the text is underlined.","examples":[true,false],"title":"Underline","type":"boolean"}},"title":"Comment","type":"object"},"discussion_id":{"description":"The ID of an existing discussion thread to which the comment will be added. This is required if `parent_page_id` is not provided. Must be a valid UUID (32 hex characters with or without hyphens).","examples":["yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"],"title":"Discussion Id","type":"string"},"parent_page_id":{"description":"The ID of the Notion page where the comment will be added. This is required if `discussion_id` is not provided. Must be a valid UUID (32 hex characters with or without hyphens). Page IDs can be obtained using other Notion actions that fetch page details or list pages.","examples":["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],"title":"Parent Page Id","type":"string"}},"required":["comment"],"title":"CreateCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new Notion database as a subpage under a specified parent page with a defined properties schema. IMPORTANT NOTES: - The parent page MUST be shared with your integration, otherwise you'll get a 404 error - If you encounter conflict errors (409), retry the request as Notion may experience temporary save conflicts - For relation properties, you MUST provide the database_id of the related database - Parent ID must be a valid UUID format (with or without hyphens), not a template variable Use this action exclusively for creating new databases.","name":"NOTION_CREATE_DATABASE","parameters":{"properties":{"parent_id":{"description":"**CRITICAL: MUST BE A PAGE ID, NOT A DATABASE ID.** Databases can only be created as children of pages, not as children of other databases. Using a database ID will result in an API error: 'Can't create databases parented by a database.' HOW TO IDENTIFY PAGE vs DATABASE: Use NOTION_SEARCH_NOTION_PAGE with filter_value='page' to find pages (object='page') - only these IDs can be used here. Database IDs (object='database') are NOT valid as parent_id for this action. FORMAT: Valid 32-character UUID with hyphens (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) or without hyphens (32 alphanumeric characters). Additional text after the UUID (e.g., 'uuid: Page Title') is automatically cleaned. The page must be shared with your integration, otherwise you'll receive a 404 error.","examples":["a1b2c3d4-e5f6-7890-1234-567890abcdef","278f3c83adc5819bbd39e2fae4411d97","a1b2c3d4-e5f6-7890-1234-567890abcdef: My Page Title"],"title":"Parent Id","type":"string"},"properties":{"description":"Optional list defining the schema (columns) for the new database. Each item is an object with 'name' and 'type'. If not provided, Notion creates a default database with a single 'Name' column of type 'title'. When provided, the list must include at least one property of type 'title'. Common supported property types include: 'title', 'rich_text', 'number', 'select', 'multi_select', 'status', 'date', 'people', 'files', 'checkbox', 'url', 'email', 'phone_number'. Other types like 'formula', 'relation', 'rollup', 'created_time', 'created_by', 'last_edited_time', 'last_edited_by' might also be supported. IMPORTANT: For 'relation' type properties, you MUST also provide the 'database_id' field with the UUID of the related database. The related database must be shared with your integration.","examples":["[{\"name\": \"Task Name\", \"type\": \"title\"}, {\"name\": \"Due Date\", \"type\": \"date\"}]","[{\"name\": \"Feature\", \"type\": \"title\"}, {\"name\": \"Status\", \"type\": \"select\"}, {\"name\": \"Assignee\", \"type\": \"people\"}, {\"name\": \"Details\", \"type\": \"rich_text\"}]"],"items":{"properties":{"database_id":{"description":"UUID of the database to relate to. Required when type is 'relation'. Must be a valid UUID format (32 hex characters, with or without hyphens). Placeholder values like 'PLACEHOLDER_PROJECT' are not allowed.","title":"Database Id","type":"string"},"name":{"description":"Name of the property","title":"Name","type":"string"},"relation_type":{"default":"single_property","description":"Relationship type, either 'single_property' or 'dual_property'.","title":"Relation Type","type":"string"},"type":{"description":"The type of the property, which determines the kind of data it will store. Valid types are defined by the PropertyType enum.","enum":["title","rich_text","number","select","multi_select","date","people","files","checkbox","url","email","phone_number","formula","relation","rollup","status","created_time","created_by","last_edited_time","last_edited_by","place","unique_id"],"title":"Type","type":"string"}},"required":["name","type"],"title":"PropertySchema","type":"object"},"title":"Properties","type":"array"},"title":{"description":"The desired title for the new database. This text will be automatically converted into Notion's rich text format when the database is created.","examples":["Project Roadmap","Q3 Content Calendar"],"title":"Title","type":"string"}},"required":["parent_id","title"],"title":"CreateDatabaseRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create a Notion FileUpload object and retrieve an upload URL. Use when you need to automate attaching local or external files directly into Notion without external hosting.","name":"NOTION_CREATE_FILE_UPLOAD","parameters":{"properties":{"content_type":{"description":"MIME type of the file. Required in multi_part if filename lacks extension; optional for single-part.","examples":["image/png"],"title":"Content Type","type":"string"},"external_url":{"description":"Public HTTPS URL to import. Required when mode='external_url'. Must expose Content-Type and Content-Length.","examples":["https://example.com/image.jpg"],"pattern":"^https?://","title":"External Url","type":"string"},"filename":{"description":"Human-readable file name with extension. Required for external_url; for multi_part, supply to infer extension or pair with content_type; optional for single-part. Supported extensions: Audio (.aac, .adts, .mid, .midi, .mp3, .mpga, .m4a, .m4b, .mp4, .oga, .ogg, .wav, .wma); Document (.pdf, .txt, .json, .doc, .dot, .docx, .dotx, .xls, .xlt, .xla, .xlsx, .xltx, .ppt, .pot, .pps, .ppa, .pptx, .potx); Image (.gif, .heic, .jpeg, .jpg, .png, .svg, .tif, .tiff, .webp, .ico); Video (.amv, .asf, .wmv, .avi, .f4v, .flv, .gifv, .m4v, .mp4, .mkv, .webm, .mov, .qt, .mpeg).","examples":["image.png","document.pdf","audio.mp3"],"maxLength":900,"title":"Filename","type":"string"},"mode":{"description":"Upload mode: 'single_part' for direct upload (default, up to 20 MB), 'multi_part' for chunked uploads (requires paid Notion workspace), or 'external_url' to import from a public URL. Note: Free workspaces are limited to 5 MB files and cannot use multi_part mode.","enum":["single_part","multi_part","external_url"],"examples":["single_part","multi_part","external_url"],"title":"Mode","type":"string"},"number_of_parts":{"description":"Total parts for a multi-part upload; required when mode='multi_part'.","examples":[3],"minimum":1,"title":"Number Of Parts","type":"integer"}},"title":"CreateFileUploadRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new page in a Notion workspace under a specified parent page or database. Supports creating pages with markdown content using the native markdown parameter, or as an empty page that can be populated later. PREREQUISITES: - Parent page/database must exist and be accessible in your Notion workspace - Use search_pages or list_databases first to obtain valid parent IDs LIMITATIONS: - Cannot create root-level pages (must have a parent) - May encounter conflicts if creating pages too quickly - Title-based parent search is less reliable than using UUIDs - The markdown parameter is mutually exclusive with children/content parameters","name":"NOTION_CREATE_NOTION_PAGE","parameters":{"properties":{"cover":{"description":"The URL of an image to be used as the cover for the new page. The URL must be publicly accessible.","examples":["https://www.example.com/images/cover.png"],"pattern":"^https?://.+","title":"Cover","type":"string"},"icon":{"description":"An emoji to be used as the icon for the new page. Must be a single emoji character. If the title starts with this emoji, it will be stripped from the title text to prevent duplication.","examples":["😻","🤔","📄"],"title":"Icon","type":"string"},"markdown":{"description":"Page content as Notion-flavored Markdown. When provided, the page will be created from this markdown string. If properties.title is omitted, the first # h1 heading will be extracted as the page title. This parameter is mutually exclusive with children and content parameters.","examples":["# Meeting Notes\n\nDiscussed roadmap for Q1"],"title":"Markdown","type":"string"},"parent_id":{"description":"CRITICAL: Must be either: 1) A valid Notion UUID in dashed format (8-4-4-4-12 hex characters like '59833787-2cf9-4fdf-8782-e53db20768a5') or dashless format (32 hex characters like '598337872cf94fdf8782e53db20768a5') of an existing Notion page or database. 2) The exact title of an existing page/database (less reliable - UUID strongly preferred). IMPORTANT: Always use search_pages or list_databases actions FIRST to obtain valid parent IDs. Common errors: Using malformed UUIDs, non-existent IDs, or IDs from different workspaces. Note: Root-level pages cannot be created - you must specify a parent. Also accepts 'parent_page_id' as an alias.","examples":["59833787-2cf9-4fdf-8782-e53db20768a5","598337872cf94fdf8782e53db20768a5","My Project Database"],"title":"Parent Id","type":"string"},"title":{"description":"The title of the new page to be created. If an icon emoji is provided and the title starts with the same emoji, it will be automatically removed from the title to avoid duplication.","examples":["My new report","Project Plan Q3"],"title":"Title","type":"string"}},"required":["parent_id","title"],"title":"CreateNotionPageRequest","type":"object"}},"type":"function"},{"function":{"description":"Archives a Notion block, page, or database using its ID, which sets its 'archived' property to true (like moving to \"Trash\" in the UI) and allows it to be restored later. Note: This operation will fail if the block has an archived parent or ancestor in the hierarchy. You must unarchive the ancestor before archiving/deleting its descendants. IMPORTANT LIMITATION: Workspace-level pages (top-level pages that are direct children of the workspace, not contained within other pages or databases) cannot be archived via the Notion API. This is a documented Notion API restriction. Only pages that are children of other pages or databases can be deleted through this action.","name":"NOTION_DELETE_BLOCK","parameters":{"description":"Request model for deleting (archiving) a Notion block.","properties":{"block_id":{"description":"Identifier of the block, page, or database to be deleted (archived). Must be a valid Notion block/page/database ID in UUID format (with or without hyphens). IMPORTANT: Workspace-level pages (top-level pages not contained within other pages or databases) cannot be archived via the API - only pages that are children of other pages or databases can be deleted. To find page IDs and their titles, consider using an action like `NOTION_FETCH_DATA`.","examples":["59833787-2cf9-4fdf-8782-e53db20768a5"],"title":"Block Id","type":"string"}},"required":["block_id"],"title":"DeleteBlockRequest","type":"object"}},"type":"function"},{"function":{"description":"Duplicates a Notion page, including all its content, properties, and nested blocks, under a specified parent page or workspace.","name":"NOTION_DUPLICATE_PAGE","parameters":{"description":"Defines the parameters for duplicating a Notion page.","properties":{"page_id":{"description":"The unique identifier (UUID v4) of the Notion page to be duplicated. Ensure this page exists and is accessible.","examples":["2e22de6b-770e-4166-be30-1490f6ffd7c1"],"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","title":"Page Id","type":"string"},"parent_id":{"description":"The unique identifier (UUID v4) of the Notion page or database that will serve as the parent for the duplicated page. If a database ID is provided, the new page is created as a row in that database with properties preserved. If a page ID is provided, the new page is created as a child page with only the title. This ID cannot be the same as `page_id`.","examples":["7e22de6b-770e-4166-be30-1490f6ffd7c1"],"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","title":"Parent Id","type":"string"},"title":{"description":"An optional new title for the duplicated page. If not provided, the title of the original page will be used, prefixed with 'Copy of'.","examples":["My Duplicated Page","Project Plan - Q3 Copy"],"title":"Title","type":"string"}},"required":["page_id","parent_id"],"title":"DuplicatePageRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to fetch all child blocks for a given Notion block. Use when you need a complete listing of a block's children beyond a single page; supports optional recursive expansion of nested blocks.","name":"NOTION_FETCH_ALL_BLOCK_CONTENTS","parameters":{"description":"Request parameters for fetching all block children with optional recursion.","properties":{"block_id":{"description":"Identifier (UUID) of the parent Notion block or page whose children to list. Pages are blocks in Notion. Accepts UUIDs with or without hyphens (e.g., 'c02fc1d3-db8b-45c5-a222-27595b15aea7' or 'c02fc1d3db8b45c5a22227595b15aea7'). Either block_id or page_url must be provided. The block must be shared with your integration.","examples":["c02fc1d3-db8b-45c5-a222-27595b15aea7","c02fc1d3db8b45c5a22227595b15aea7"],"title":"Block Id","type":"string"},"max_blocks":{"default":5000,"description":"Maximum total blocks to return when recursive=true. Prevents runaway fetches on extremely large block trees. Defaults to 5000. When limit is reached, blocks fetched so far are returned with a warning in the response.","examples":[1000,5000,10000],"maximum":10000,"minimum":1,"title":"Max Blocks","type":"integer"},"max_depth":{"default":10,"description":"Maximum recursion depth when recursive=true. Prevents excessive nesting traversal. Defaults to 10. Set higher for deeply nested structures, lower for faster results.","examples":[5,10,20],"maximum":50,"minimum":1,"title":"Max Depth","type":"integer"},"page_size":{"default":100,"description":"Maximum number of child blocks to return per request. Defaults to 100, with a maximum of 100 as per Notion API limits.","examples":[25,50,100],"maximum":100,"minimum":1,"title":"Page Size","type":"integer"},"page_url":{"description":"Notion page URL from which to extract the page/block ID. Either block_id or page_url must be provided. NOTE: Database view URLs (those containing '?v=' parameter) are NOT supported. Database views are filtered views of a database and do not have block children. To access database content, use the NOTION_QUERY_DATABASE action instead.","examples":["https://www.notion.so/My-Page-c02fc1d3db8b45c5a22227595b15aea7","https://workspace.notion.site/Page-Title-c02fc1d3db8b45c5a22227595b15aea7"],"title":"Page Url","type":"string"},"recursive":{"default":false,"description":"If true, fetches nested children for blocks with 'has_children' set to true, appending all descendants to the output list. Subject to max_depth and max_blocks limits.","title":"Recursive","type":"boolean"}},"title":"FetchAllBlockContentsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a paginated list of direct, first-level child block objects along with contents for a given parent Notion block or page ID; use block IDs from the response for subsequent calls to access deeply nested content.","name":"NOTION_FETCH_BLOCK_CONTENTS","parameters":{"properties":{"block_id":{"description":"UUID of the parent Notion block or page whose children are to be fetched. Accepts both hyphenated (e.g., 'c02fc1d3-db8b-45c5-a222-27595b15aea7') and non-hyphenated (e.g., 'c02fc1d3db8b45c5a22227595b15aea7') UUID formats. Notion's API does not support special identifiers like 'root' or 'top-level' - you must always provide an actual page or block UUID. To discover valid page/block IDs, first use 'NOTION_SEARCH_NOTION_PAGE' to find pages or 'NOTION_QUERY_DATABASE' to query databases.","examples":["c02fc1d3-db8b-45c5-a222-27595b15aea7"],"title":"Block Id","type":"string"},"page_size":{"description":"The maximum number of child blocks to return in a single response. The actual number of results may be lower if there are fewer child blocks available or if the end of the list is reached. Maximum allowed value is 100. If unspecified, Notion's default page size will be used.","examples":["25","50","100"],"title":"Page Size","type":"integer"},"start_cursor":{"description":"Pagination cursor from next_cursor in a previous API response. When paginating through results, pass the next_cursor value from the previous response here to fetch the next page. Must be a valid UUID format or cursor string returned by Notion's API. If omitted, returns the first page of results.","examples":["a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6"],"title":"Start Cursor","type":"string"}},"required":["block_id"],"title":"FetchBlockContentsRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches metadata for a Notion block (including pages, which are special blocks) using its UUID. Returns block type, properties, and basic info but not child content. Prerequisites: 1) Block/page must be shared with your integration, 2) Use valid block_id from API responses (not URLs). For child blocks, use fetch_block_contents instead. Common 404 errors mean the block isn't accessible to your integration.","name":"NOTION_FETCH_BLOCK_METADATA","parameters":{"properties":{"block_id":{"description":"The unique UUID identifier for the Notion block to be retrieved. Must be a valid 32-character UUID (with or without hyphens). Pages in Notion are also blocks, so page IDs work here too. Important: The block/page must be shared with your integration. To find valid block IDs, use actions like search_pages, list_databases, or fetch_block_contents. Common error: Ensure you're using the actual block_id from API responses, not URLs or other identifiers.","examples":["c02fc1d3-db8b-45c5-a222-27595b15aea7"],"format":"uuid","title":"Block Id","type":"string"}},"required":["block_id"],"title":"FetchBlockMetadataRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches unresolved comments for a specified Notion block or page ID. The block/page must be shared with your Notion integration and the integration must have 'Read comments' capability enabled, otherwise a 404 error will be returned.","name":"NOTION_FETCH_COMMENTS","parameters":{"properties":{"block_id":{"description":"Identifier for a Notion block from which to fetch comments. In Notion, pages are technically blocks, so you can pass a page ID here as well. Provide either block_id or page_id, but not both. IMPORTANT: The block/page must be shared with your Notion integration - if not shared, you will receive a 404 error. To find IDs, use the `NOTION_FETCH_DATA` action.","examples":["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],"title":"Block Id","type":"string"},"page_id":{"description":"Identifier for a Notion page from which to fetch comments. This is an alias for block_id since pages are blocks in Notion. Provide either page_id or block_id, but not both. IMPORTANT: The page must be shared with your Notion integration - if not shared, you will receive a 404 error. To find IDs, use the `NOTION_SEARCH_NOTION_PAGE` action.","examples":["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],"title":"Page Id","type":"string"},"page_size":{"default":100,"description":"The number of comments to return in a single response page. Must be between 1 and 100, inclusive. Default is 100.","maximum":100,"minimum":1,"title":"Page Size","type":"integer"},"start_cursor":{"description":"A pagination cursor. If provided, the response will contain the page of results starting after this cursor. If omitted, the first page of results is returned.","title":"Start Cursor","type":"string"}},"title":"FetchCommentsRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches Notion items (pages and/or databases) from the Notion workspace, use this to get minimal data about the items in the workspace with a query or list all items in the workspace with minimal data","name":"NOTION_FETCH_DATA","parameters":{"description":"Defines the parameters for fetching data (pages and/or databases) from Notion.\nUse the `fetch_type` parameter to specify what type of data to retrieve.","properties":{"fetch_type":{"description":"Specifies what type of Notion data to fetch. Use 'pages' to fetch only pages, 'databases' to fetch only databases, or 'all' to fetch both pages and databases.","enum":["pages","databases","all"],"title":"Fetch Type","type":"string"},"original_page_size":{"description":"The original page size value before it was capped.","title":"Original Page Size","type":"integer"},"page_size":{"default":100,"description":"The maximum number of items per page (1-100). IMPORTANT: Notion API enforces a hard maximum of 100 items per request - values above 100 will be automatically capped to 100. To retrieve more than 100 items, use pagination by passing the returned 'next_cursor' value in subsequent requests. Defaults to 100.","minimum":1,"title":"Page Size","type":"integer"},"page_size_was_capped":{"default":false,"description":"Indicates whether the page size was capped to the maximum allowed value.","title":"Page Size Was Capped","type":"boolean"},"query":{"description":"An optional search query to filter pages and/or databases by their title or content. If not provided (None or empty string), all accessible items matching the selected type (pages, databases, or both) are returned.","examples":["Quarterly Report","User Research Notes"],"title":"Query","type":"string"},"start_cursor":{"description":"Pagination cursor to fetch the next page of results. Pass the 'next_cursor' value from a previous response to retrieve the next page. When null or not provided, the first page is returned.","title":"Start Cursor","type":"string"}},"required":["fetch_type"],"title":"FetchDataRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches a Notion database's structural metadata (properties, title, etc.) via its `database_id`, not the data entries; `database_id` must reference an existing database.","name":"NOTION_FETCH_DATABASE","parameters":{"properties":{"database_id":{"description":"Required. The unique identifier of the Notion database in UUID format (e.g., '2ec43c10-7ecd-8159-a8f4-ff16630df66c') or unhyphenated 32-char hex (e.g., '2ec43c107ecd8159a8f4ff16630df66c'). Must be a DATABASE ID, not a page ID. Linked databases are NOT supported - use the original source database ID. To find database IDs: use NOTION_SEARCH_NOTION_PAGE with filter_value='database', or extract from database URLs (notion.so/{database_id}).","examples":["2ec43c10-7ecd-8159-a8f4-ff16630df66c"],"minLength":1,"title":"Database Id","type":"string"}},"required":["database_id"],"title":"FetchDatabaseRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a Notion database row's properties and metadata; use fetch_block_contents for page content blocks.","name":"NOTION_FETCH_ROW","parameters":{"properties":{"page_id":{"description":"The UUID of the Notion page (which represents a row in a database) to retrieve. Must be a page ID, not a database ID. Each row in a Notion database is a page. Use actions like NOTION_FETCH_DATA or NOTION_QUERY_DATABASE to get page IDs from databases.","examples":["6c6a9b6c-12a4-4c3e-98e2-3c7a1e4f2d2a"],"title":"Page Id","type":"string"}},"required":["page_id"],"title":"FetchRowRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use GetAboutUser instead. Retrieves the User object for the bot associated with the current Notion integration token, typically to obtain the bot's user ID for other API operations.","name":"NOTION_GET_ABOUT_ME","parameters":{"properties":{},"title":"GetAboutMeRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information about a specific Notion user, such as their name, avatar, and email, based on their unique user ID.","name":"NOTION_GET_ABOUT_USER","parameters":{"properties":{"user_id":{"description":"The unique identifier of the Notion user whose details are to be retrieved. This ID is used to fetch specific user information.","examples":["d40e73cb-a769-4109-b8ad-14f9f4db1219"],"title":"User Id","type":"string"}},"required":["user_id"],"title":"GetAboutUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieve a Notion page's full content rendered as Notion-flavored Markdown in a single API call. Use when you need the readable content of a page without recursive block-children fetching.","name":"NOTION_GET_PAGE_MARKDOWN","parameters":{"properties":{"include_transcript":{"description":"Set to true to include meeting note transcripts in the markdown response. Defaults to false if not specified.","title":"Include Transcript","type":"boolean"},"page_id":{"description":"The UUID of the Notion page to retrieve as markdown. Accepts both hyphenated (8-4-4-4-12) and unhyphenated (32 characters) UUID formats. This endpoint retrieves the full page content rendered as Notion-flavored Markdown in a single API call, avoiding the need for recursive block-children fetching.","examples":["6c6a9b6c-12a4-4c3e-98e2-3c7a1e4f2d2a","6c6a9b6c12a44c3e98e23c7a1e4f2d2a"],"title":"Page Id","type":"string"}},"required":["page_id"],"title":"GetPageMarkdownRequest","type":"object"}},"type":"function"},{"function":{"description":"Call this to get a specific property from a Notion page when you have a valid `page_id` and `property_id`; handles pagination for properties returning multiple items.","name":"NOTION_GET_PAGE_PROPERTY_ACTION","parameters":{"description":"Request model for retrieving a specific property from a Notion page.","properties":{"page_id":{"description":"Identifier of the Notion page (e.g., '067dd719-a912-471e-a9a3-ac10710e78b4') from which to retrieve the property. Use the 'NOTION_FETCH_DATA' action or similar to discover available page IDs and their titles.","examples":["067dd719-a912-471e-a9a3-ac10710e78b4","c4f15f71-7a21-4c8e-87e5-93b9e3c7e247"],"pattern":"^[a-zA-Z0-9-]+$","title":"Page Id","type":"string"},"page_size":{"description":"For paginated property types (e.g., 'relation', 'rollup', 'rich_text' if content is extensive), this specifies the number of items to return per request. If omitted, Notion's default page size for the property is used.","maximum":100,"minimum":1,"title":"Page Size","type":"integer"},"property_id":{"description":"Identifier or name of the property to retrieve. For 'title' properties, the ID is always 'title'. For other properties, this can be the property's name as displayed in Notion (e.g., 'Status', 'Assignee') or its unique programmatic ID (e.g., 'N%3A%5B%7C', 'prop_id_example'). Property IDs/names can be found by inspecting the page object or database schema.","examples":["title","Status","Due Date","assignee_prop_id","N%3A%5B%7C"],"title":"Property Id","type":"string"},"start_cursor":{"description":"For paginated properties, if a previous request's response indicated `has_more: true`, provide the `next_cursor` value here to fetch the subsequent set of items. Omit if fetching the first page.","title":"Start Cursor","type":"string"}},"required":["page_id","property_id"],"title":"GetPagePropertyRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new page (row) in a specified Notion database. Prerequisites: - Database must be shared with your integration - Property names AND types must match schema exactly (case-sensitive) - Use NOTION_FETCH_DATA with fetch_type='databases' first to get exact property names and types - Each database has ONE 'title' property; other text fields are 'rich_text' - Database must NOT have multiple data sources (synced databases are not supported) Common Errors: - 404: Database not shared with integration - 400 \"not a property\": Wrong property name - 400 \"expected to be X\": Wrong property type - 400 \"multiple_data_sources\": Database uses multiple data sources (not supported) Note: Rich text content in child_blocks is automatically truncated to 2000 characters per Notion API limits.","name":"NOTION_INSERT_ROW_DATABASE","parameters":{"additionalProperties":false,"properties":{"child_blocks":{"default":[],"description":"A list of `NotionRichText` objects defining content blocks (e.g., paragraphs, headings, media) to append to the new page's body. Accepts either a list of objects OR a JSON-encoded string representing a list. If omitted, the page body will be empty. \n\n**Supported block types:** paragraph, heading_1, heading_2, heading_3, callout, to_do, toggle, quote, bulleted_list_item, numbered_list_item, divider, image, video, file. \n\n**Media blocks (image, video, file):** Require the `link` field with an external URL. The Notion API does not support uploading files directly - you must provide publicly accessible URLs.\n\n**Note:** Notion API limits children to 100 blocks per request. If more than 100 blocks are provided, the action will automatically create the page with the first 100 blocks and then append remaining blocks in subsequent API calls.","items":{"description":"Include these fields in the json: {'content': 'Some words', 'link': 'https://random-link.com'. For content styling, refer to https://developers.notion.com/reference/rich-text.\n\nENHANCED: The 'content' field now automatically detects and parses markdown formatting - supports bold (**text**), italic (*text*), strikethrough (~~text~~), inline code (`code`), and links ([text](url)). Headers (# ## ###) are handled via block_property.","properties":{"block_property":{"default":"paragraph","description":"The block property of the block to be added. **Common text blocks:** `paragraph`, `heading_1`, `heading_2`, `heading_3`, `callout`, `to_do`, `toggle`, `quote`, `bulleted_list_item`, `numbered_list_item`. **Special blocks:** `divider` (creates a horizontal divider line, no content required). **Media/embed blocks:** `file`, `image`, `video` (requires `link` field with external URL - direct file uploads not supported). \n\n**NOTE:** Notion API only supports heading levels 1-3. heading_4, heading_5, etc. are automatically converted to heading_3.","enum":["paragraph","heading_1","heading_2","heading_3","callout","to_do","toggle","quote","bulleted_list_item","numbered_list_item","file","image","video","divider"],"examples":["paragraph","heading_1","heading_2","heading_3","bulleted_list_item","numbered_list_item","to_do","callout","toggle","quote","divider"],"title":"Block Property","type":"string"},"bold":{"default":false,"description":"Indicates if the text is bold.","examples":[true,false],"title":"Bold","type":"boolean"},"code":{"default":false,"description":"Indicates if the text is formatted as code.","examples":[true,false],"title":"Code","type":"boolean"},"color":{"default":"default","description":"The color of the text background or text itself.","examples":["blue_background","yellow_background","gray","purple"],"title":"Color","type":"string"},"content":{"description":"The textual content for TEXT blocks only. ENHANCED: Automatically parses markdown formatting including bold (**text**), italic (*text*), strikethrough (~~text~~), inline code (`code`), and links ([text](url)). Required for: paragraph, heading_1, heading_2, heading_3, callout, to_do, toggle, quote. NOT USED for media blocks (image, video, file) - use 'link' field instead.","examples":["Hello World","This is **bold** and *italic* text","Visit [our site](https://example.com)","Use `code` snippets","~~Strikethrough~~ text"],"title":"Content","type":"string"},"italic":{"default":false,"description":"Indicates if the text is italic.","examples":[true,false],"title":"Italic","type":"boolean"},"link":{"description":"URL for hyperlinks or media blocks. For TEXT blocks: optional URL to make text clickable. For MEDIA blocks (image, video, file): REQUIRED - must be a valid external URL (http/https). Do not pass placeholder text in 'content' for media blocks.","examples":["https://www.google.com","https://example.com/image.png"],"title":"Link","type":"string"},"strikethrough":{"default":false,"description":"Indicates if the text has strikethrough.","examples":[true,false],"title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Indicates if the text is underlined.","examples":[true,false],"title":"Underline","type":"boolean"}},"title":"NotionRichText","type":"object"},"title":"Child Blocks","type":"array"},"cover":{"description":"URL of an external image to set as the page cover. The URL must point to a publicly accessible image.","examples":["https://google.com/image.png"],"title":"Cover","type":"string"},"database_id":{"description":"Identifier (UUID) of the Notion database where the new page (row) will be inserted. Can be provided with or without hyphens (e.g., '59833787-2cf9-4fdf-8782-e53db20768a5' or '598337872cf94fdf8782e53db20768a5'). This ID must correspond to an existing database that has been explicitly shared with your integration. IMPORTANT: The database must be shared with your integration in Notion settings, otherwise you will get a 404 error. NOTE: Databases with multiple data sources (synced databases or combined views) are not supported by this integration. Use the `NOTION_FETCH_DATA` action to find available database IDs that are already shared with your integration.","examples":["59833787-2cf9-4fdf-8782-e53db20768a5"],"title":"Database Id","type":"string"},"icon":{"description":"Emoji to be used as the page icon. Must be a single emoji character.","examples":["😻","🤔"],"title":"Icon","type":"string"},"properties":{"default":[],"description":"Property values for the new page. ⚠️ CRITICAL: This field accepts either a LIST of objects OR a JSON-encoded string representing a list. Each object in the list defines a property and must include: `name` (the EXACT property name as it appears in your Notion database), `type` (the property's data type), and `value` (the property's value, formatted as a string according to its type).\n\n🔴 CRITICAL - PROPERTY NAMES AND TYPES MUST MATCH YOUR DATABASE EXACTLY:\nBoth property names AND types are CASE-SENSITIVE and must match EXACTLY as they appear in your Notion database schema.\n- If your database has a title property called 'Document Title', you MUST use 'Document Title' (not 'Name', not 'Title')\n- If your database has a property called 'Status Select', you MUST use 'Status Select' (not 'Status')\n- Each database has exactly ONE 'title' type property. All other text properties use 'rich_text' type.\n- Common error: Using generic names like 'Name' or 'Title' when your database uses different property names\n- Common error: Using 'title' type for text properties that are actually 'rich_text' type\n- To find property names AND types: Use NOTION_FETCH_DATA action with fetch_type='databases' to list databases and see their exact property names and types in the 'properties' field of each database\n\nCORRECT FORMAT EXAMPLE (a list of property objects):\n[\n {\"name\": \"Task Name\", \"type\": \"title\", \"value\": \"Finalize Q3 report\"},\n {\"name\": \"Priority\", \"type\": \"select\", \"value\": \"High\"},\n {\"name\": \"Tags\", \"type\": \"multi_select\", \"value\": \"Work,Personal\"},\n {\"name\": \"Due Date\", \"type\": \"date\", \"value\": \"2024-06-01T12:00:00.000-04:00\"},\n {\"name\": \"Completed\", \"type\": \"checkbox\", \"value\": \"False\"}\n]\n⚠️ NOTE: Property names in the example above ('Task Name', 'Priority', etc.) are placeholders. Replace them with the ACTUAL property names from YOUR specific database.\n\nINCORRECT FORMAT (dictionary format - will cause validation error):\n{\n \"Task Name\": \"Finalize Q3 report\",\n \"Priority\": \"High\"\n}\n\n🚨 CRITICAL - 'status' vs 'select' TYPE CONFUSION (MOST COMMON ERROR):\n- If your property is a DROPDOWN list, use type='select' - even if the property is NAMED 'Status'!\n- The 'status' type is a SPECIAL Notion property with 'To-do', 'In progress', 'Complete' workflow groups.\n- MOST databases do NOT have this special 'status' type. When in doubt, use 'select'.\n- Use NOTION_FETCH_DATA with fetch_type='databases' to verify the ACTUAL type in your database schema.\n\n⚠️ OTHER PROPERTY TYPE NOTES:\n- Common error: If you see 'X is not a property that exists' error, FIRST check your database schema with NOTION_FETCH_DATA to verify the property name exists and you're using the correct type. This error usually means the property name doesn't exist (most common) or the property exists but you used the wrong type.\n- Common error: If you see 'X is expected to be Y' error, it means you specified the wrong type - use the type shown in the error.\n\nValue formatting rules by property type:\n- `title` or `rich_text`: Plain text string (maximum 2000 characters).\n- `number`: String representation of a number (e.g., \"23.4\").\n- `select`: A SINGLE option name for the select property (e.g., \"High\"). \n NOTE: Commas are NOT allowed - select is for single-choice only. Use 'multi_select' for multiple values.\n The option must already exist in the database schema.\n- `multi_select`: Comma-separated string of existing option names (e.g., \"Work,Personal\").\n NOTE: All options must already exist in the database schema.\n- `date`: ISO 8601 formatted date string. For single date: \"2024-06-01T12:00:00.000-04:00\". For date range: \"2024-06-01T12:00:00.000-04:00/2024-06-05T17:00:00.000-04:00\" (start/end separated by \"/\").\n- `people`: Comma-separated string of Notion user IDs.\n- `relation`: Comma-separated string of Notion page UUIDs (NOT text values or page titles). Use NOTION_QUERY_DATABASE or NOTION_FETCH_DATA to get valid page IDs from the related database.\n- `checkbox`: String \"True\" or \"False\".\n- `url`: A valid URL string.\n- `files`: Comma-separated string of URLs.\n- `email`: A valid email string.\n- `phone_number`: A phone number string. IMPORTANT: Only use if database property type is 'Phone', not for regular text fields.\n\nProperties defined in the database schema but omitted from this list will be initialized with default or empty values. Ensure that property names and types correctly match the target database schema.","examples":["[{\"name\": \"Task Name\", \"type\": \"title\", \"value\": \"Finalize Q3 report\"}, {\"name\": \"Priority\", \"type\": \"select\", \"value\": \"High\"}]"],"items":{"properties":{"name":{"description":"Name of the property","title":"Name","type":"string"},"type":{"description":"Type of the property. Common types: title (ONE per database), rich_text, number, select (for dropdowns), multi_select, date, people, files, checkbox, url, email, phone_number, relation. ⚠️ IMPORTANT: Use 'select' for dropdown properties - NOT 'status'. The 'status' type is a SPECIAL Notion property type (with 'To-do', 'In progress', 'Complete' groups) that most databases do NOT have. If your property shows a simple dropdown list, use 'select' even if the property is NAMED 'Status'. Read-only/unsupported types (auto-skipped): created_time, created_by, last_edited_time, last_edited_by, formula, rollup, unique_id, place.","enum":["title","rich_text","number","select","multi_select","date","people","files","checkbox","url","email","phone_number","formula","relation","rollup","status","created_time","created_by","last_edited_time","last_edited_by","place","unique_id"],"title":"Type","type":"string"},"value":{"description":"Value of the property, it will be dependent on the type of the property\nFor types --> value should be\n- title, rich_text - text ex. \"Hello World\" (IMPORTANT: max 2000 characters, longer text will be truncated)\n- number - number ex. 23.4\n- select - A SINGLE option name (NO COMMAS allowed). Ex: \"India\". For multiple values, use multi_select instead.\n- multi_select - comma separated values ex. \"India,USA\" (for multiple choices)\n- date - ISO 8601 format. Single date: \"2021-05-11\" or \"2021-05-11T11:00:00.000-04:00\". Date range: \"2021-05-11/2021-05-15\" or \"2021-05-11T11:00:00.000-04:00/2021-05-15T17:00:00.000-04:00\" (start/end separated by forward slash).\n- people - comma separated Notion USER UUIDs (NOT names). Format: \"12345678-1234-1234-1234-123456789abc\" or \"12345678-1234-1234-1234-123456789abc,87654321-4321-4321-4321-cba987654321\" for multiple users. Use the NOTION_LIST_USERS action to find valid user UUIDs.\n- relation - comma separated Notion PAGE UUIDs (NOT titles). Format: \"12345678-1234-1234-1234-123456789abc\" or \"12345678-1234-1234-1234-123456789abc,87654321-4321-4321-4321-cba987654321\" for multiple relations. Use NOTION_QUERY_DATABASE to find valid page UUIDs.\n- url - a url.\n- files - comma separated HTTPS URLs only. Local file paths (file://), HTTP URLs, and other protocols are NOT supported. Files must be hosted on a public web server or cloud storage with SSL (e.g., AWS S3, Google Cloud Storage, Dropbox). Example: \"https://example.com/file.pdf\" or \"https://s3.amazonaws.com/bucket/doc.pdf,https://example.com/image.png\"\n- checkbox - \"True\" or \"False\"\n","title":"Value","type":"string"}},"required":["name","type","value"],"title":"PropertyValues","type":"object"},"title":"Properties","type":"array"}},"required":["database_id"],"title":"InsertRowDatabaseRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new row (page) in a Notion database from a natural language description. Fetches the database schema at runtime, uses an LLM to generate the correctly-formatted property payload, and creates the page.","name":"NOTION_INSERT_ROW_FROM_NL","parameters":{"properties":{"cover":{"description":"Optional cover image URL for the page.","title":"Cover","type":"string"},"database_id":{"description":"Notion database UUID where the new row will be inserted. Can be provided with or without hyphens.","examples":["59833787-2cf9-4fdf-8782-e53db20768a5"],"title":"Database Id","type":"string"},"icon":{"description":"Optional emoji icon for the page.","examples":["📝","🔥"],"title":"Icon","type":"string"},"nl_query":{"description":"Natural language description of the row to create. Example: 'Add task: Review PR #14143, priority High, status In Progress, due tomorrow'.","title":"Nl Query","type":"string"}},"required":["database_id","nl_query"],"title":"InsertRowFromNlRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list all templates for a Notion data source. Use when needing to discover template IDs/names for bulk page creation. Use after confirming the data_source_id.","name":"NOTION_LIST_DATA_SOURCE_TEMPLATES","parameters":{"description":"Request parameters for listing templates in a Notion data source.","properties":{"data_source_id":{"description":"Data source ID (UUIDv4). Path parameter identifying the data source to list templates from.","examples":["b724c3f2-8a7a-4d5a-9e12-d4f3e1a7b890"],"title":"Data Source Id","type":"string"},"page_size":{"description":"Number of templates to return per page (1–100). Defaults to 100 if omitted.","examples":[50],"maximum":100,"minimum":1,"title":"Page Size","type":"integer"},"start_cursor":{"description":"Cursor for pagination. Use the `next_cursor` value from a previous response to retrieve the next page.","examples":["d88b2f0c-efb1-4a6f-9d3b-1a2c3e4f5b67"],"title":"Start Cursor","type":"string"}},"required":["data_source_id"],"title":"ListDataSourceTemplatesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve file uploads for the current bot integration, sorted by most recent first. Use when you need to list all file uploads or paginate through file upload history.","name":"NOTION_LIST_FILE_UPLOADS","parameters":{"properties":{"page_size":{"description":"Controls how many items the response includes from the complete list. Maximum 100, default 100. The actual response may contain fewer results than requested.","examples":[100,50],"maximum":100,"minimum":1,"title":"Page Size","type":"integer"},"start_cursor":{"description":"Accepts a next_cursor value from a previous response. Treat as an opaque value to retrieve subsequent result pages. If omitted, begins from the list's start.","examples":["2ca8d5ed-53a6-81f7-b5a0-00b20e08ccf3"],"title":"Start Cursor","type":"string"}},"title":"ListFileUploadsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a paginated list of users (excluding guests) from the Notion workspace; the number of users returned per page may be less than the requested `page_size`.","name":"NOTION_LIST_USERS","parameters":{"properties":{"page_size":{"default":30,"description":"The desired number of users to retrieve per page. The maximum value is 100.","title":"Page Size","type":"integer"},"start_cursor":{"description":"If omitted, retrieves the first page of users. Use the 'next_cursor' value from a previous response to get the next page.","title":"Start Cursor","type":"string"}},"title":"ListUsersRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to move a Notion page to a new parent (page or database). Use when you need to reorganize page hierarchy. Important: To move to a database, use data_source_id (NOT database_id). Get the data source ID from the database object using NOTION_FETCH_DATABASE.","name":"NOTION_MOVE_PAGE","parameters":{"properties":{"page_id":{"description":"The ID of the page to move. UUID format with or without dashes is supported.","examples":["59833787-2cf9-4fdf-8782-e53db20768a5"],"title":"Page Id","type":"string"},"parent":{"anyOf":[{"description":"Parent destination as a page.","properties":{"page_id":{"description":"UUID of the parent page (with or without dashes). Must reference an actual page, not a database. If moving to a database, use type='data_source_id' instead.","examples":["f336d0bc-b841-465b-8045-024475c079dd"],"title":"Page Id","type":"string"},"type":{"const":"page_id","description":"The constant string 'page_id'.","title":"Type","type":"string"}},"required":["type","page_id"],"title":"PageParentDestination","type":"object"},{"description":"Parent destination as a data source (database).","properties":{"data_source_id":{"description":"UUID of the database's data source (NOT database_id). Retrieve using the database endpoint.","examples":["1c7b35e6-e67f-8096-bf3f-000ba938459e"],"title":"Data Source Id","type":"string"},"type":{"const":"data_source_id","description":"The constant string 'data_source_id'.","title":"Type","type":"string"}},"required":["type","data_source_id"],"title":"DataSourceParentDestination","type":"object"}],"description":"Parent destination for the page. Use type='page_id' with page_id to move under another page (the page_id must reference a page, not a database). Use type='data_source_id' with data_source_id to move into a database. Common mistake: Using type='page_id' with a database ID will fail - databases require type='data_source_id'.","examples":[{"page_id":"f336d0bc-b841-465b-8045-024475c079dd","type":"page_id"},{"data_source_id":"1c7b35e6-e67f-8096-bf3f-000ba938459e","type":"data_source_id"}],"title":"Parent"}},"required":["page_id","parent"],"title":"MovePageRequest","type":"object"}},"type":"function"},{"function":{"description":"Queries a Notion database to retrieve pages (rows). In Notion, databases are collections where each row is a page and columns are properties. Returns paginated results with metadata. Important requirements: - The database must be shared with your integration - Property names in sorts must match existing database properties exactly (case-sensitive) - For timestamp sorting, use 'created_time' or 'last_edited_time' (case-insensitive) - The start_cursor must be a valid UUID from a previous response's next_cursor field - Database IDs must be valid 32-character UUIDs (with or without hyphens) Use this action to: - Retrieve all or filtered database entries - Sort results by database properties or page timestamps - Paginate through large result sets - Get database content for processing or display","name":"NOTION_QUERY_DATABASE","parameters":{"properties":{"database_id":{"description":"The UUID of the Notion DATABASE to query (32-character hex string, optionally with hyphens). Query parameters (e.g., ?v=viewid) from Notion URLs are automatically stripped. IMPORTANT: This must be a DATABASE ID, not a page ID. Pages and databases are different object types in Notion. A database is a collection/table that contains pages as rows. If you have a page ID, you cannot use it here. How to obtain a database ID: Use NOTION_SEARCH_NOTION_PAGE with filter_value='database' to list accessible databases, or find it in the Notion URL of a database view (the 32-char ID after the workspace name). Common error: If you receive 'validation_error' with message 'Provided ID is a page, not a database', you have passed a page ID instead of a database ID. Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx or xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","examples":["260beeb0-57b4-80df-acc9-c3620f730dee","1bc5287fa43f80d1bfc8f0b428eedb89"],"minLength":32,"title":"Database Id","type":"string"},"page_size":{"default":100,"description":"Number of items (database rows/pages) to return per request. Valid range: 1-100. Default is 100. The API may return fewer items than requested if that's all that's available.","examples":[10,25,50,100],"maximum":100,"minimum":1,"title":"Page Size","type":"integer"},"sorts":{"description":"List of sort rules to order the database query results. Each sort rule must specify: 'property_name' (name of database property or timestamp field) and 'ascending' (True/False). For database properties: names must match exactly (case-sensitive). For timestamps: use 'created_time' or 'last_edited_time' (case-insensitive). Multiple sorts are applied in the order specified.","examples":[[{"ascending":false,"property_name":"created_time"}],[{"ascending":false,"property_name":"last_edited_time"}],[{"ascending":true,"property_name":"Priority"},{"ascending":true,"property_name":"Due Date"}]],"items":{"properties":{"ascending":{"description":"Sort direction: True for ascending (A→Z, oldest→newest), False for descending (Z→A, newest→oldest).","examples":[true,false],"title":"Ascending","type":"boolean"},"property_name":{"description":"The name of a database property/column to sort by, or a timestamp field. For database properties: Must match an EXISTING property name in the database EXACTLY (case-sensitive). For page timestamps: Use 'created_time' or 'last_edited_time' to sort by page creation/modification times. Common timestamp aliases are auto-detected (e.g., 'created time', 'creation time', '创建时间', 'last edited', etc.). IMPORTANT: If sorting by a database property (not a timestamp), the property name must exist in that specific database.","examples":["Name","Title","Due Date","Priority","created_time","last_edited_time"],"title":"Property Name","type":"string"}},"required":["property_name","ascending"],"title":"Sort","type":"object"},"title":"Sorts","type":"array"},"start_cursor":{"description":"A pagination cursor for fetching the next page of results. Must be a valid UUID string (format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) obtained from the 'next_cursor' field of a previous query response. Do not use placeholder values. If omitted, returns the first page.","examples":["67890abc-def0-1234-5678-9abcdef01234","a1b2c3d4-e5f6-7890-abcd-ef1234567890"],"title":"Start Cursor","type":"string"}},"required":["database_id"],"title":"QueryDatabaseRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to query a Notion database with server-side filtering, sorting, and pagination. Use when you need to retrieve a subset of rows by property, date, status, or other conditions.","name":"NOTION_QUERY_DATABASE_WITH_FILTER","parameters":{"properties":{"composio_execution_message":{"description":"Internal message about any automatic conversions made during execution.","title":"Composio Execution Message","type":"string"},"database_id":{"description":"The UUID of the Notion database to query (32 character hex string, with hyphens or without). IMPORTANT: This must be a DATABASE ID, not a page ID. Page IDs and database IDs are different things. If you have a page URL/ID, that is NOT the same as the database ID - inline databases within pages have their own separate database IDs distinct from the parent page ID. Use NOTION_SEARCH_NOTION_PAGE or NOTION_FETCH_DATABASE to discover the correct database ID. The database must be shared with your integration.","examples":["260beeb0-57b4-80df-acc9-c3620f730dee","1bc5287fa43f80d1bfc8f0b428eedb89"],"title":"Database Id","type":"string"},"filter":{"additionalProperties":true,"description":"Filter object to limit returned entries. ⚠️ CRITICAL - EXACTLY ONE FILTER TYPE KEY PER FILTER: Each filter object MUST contain exactly ONE filter type key (e.g., 'select', 'rich_text', 'number', etc.). You CANNOT combine multiple filter type keys in a single filter object. For example, {\"property\": \"Name\", \"title\": {...}, \"rich_text\": {...}} is INVALID because it has two filter type keys. If you need to filter by multiple conditions or properties, use compound filters with 'and' or 'or': {\"and\": [{\"property\": \"Name\", \"title\": {...}}, {\"property\": \"Description\", \"rich_text\": {...}}]}. ⚠️ CRITICAL - 'title' IS A RESERVED PROPERTY NAME: If you're filtering a property named 'title', you MUST understand that 'title' ALWAYS refers to the database's built-in primary title column, which has property type 'title' (NOT 'select', 'rich_text', or any other type). Common mistake: trying to filter title with wrong type like {\"property\":\"title\",\"select\":{\"equals\":\"value\"}} - this FAILS because title properties require {\"property\":\"title\",\"title\":{\"contains\":\"value\"}}. If your database has a custom property that you named 'title', Notion still treats the filter as the built-in title column. ALWAYS check the actual property schema via NOTION_FETCH_DATABASE before filtering - the schema will show you the property's real type, not just its name. CRITICAL - FILTER TYPE MUST MATCH SCHEMA TYPE: The filter type key MUST match the property's ACTUAL TYPE in the database schema. Property names are NOT reliable indicators of type. You MUST use NOTION_FETCH_DATABASE to retrieve the database schema and check each property's actual type field - never assume the type based on the property name. For example, a property named 'Status' could be type 'select' in one database but type 'status' in another. The 'select' filter type is for dropdown properties. The 'status' filter type is ONLY for Notion's built-in Status property type (which has groups like 'To-do', 'In progress', 'Complete'). CRITICAL - SELECT/STATUS OPTION NAMES MUST MATCH EXACTLY: When filtering select or status properties, the option name MUST match EXACTLY as it appears in the database schema, including any emoji prefixes, special characters, or spacing. For example, if an option is named '✅ Done' in the schema, you MUST use '✅ Done' in your filter - using just 'Done' will cause a validation error. Always call NOTION_FETCH_DATABASE first to see the exact option names before filtering. Common patterns include emoji prefixes (✅, 🚧, 📝, etc.) and special formatting that must be preserved exactly. Valid filter type keys: title, rich_text, number, checkbox, select, multi_select, status, date, people, files, url, email, phone_number, relation, created_by, created_time, last_edited_by, last_edited_time, formula, unique_id, rollup, verification, timestamp. FORMULA FILTERS (CRITICAL): Formula property filters have unique requirements and limitations. Formula filters MUST specify the result type (string/number/date/checkbox) that matches the formula's output type. The filter structure is: {'property': '', 'formula': {: {: }}}. Result types: 'string' (uses rich_text conditions), 'number' (numeric conditions), 'date' (date conditions), 'checkbox' (boolean conditions). IMPORTANT LIMITATIONS: (1) The result type MUST match the formula's actual output type - if a formula returns a number, you must use 'formula': {'number': {...}}, not 'string' or 'checkbox'. (2) Some formula expressions cannot be filtered by the Notion API and will return validation errors like 'Unable to filter based on a formula of unknown type'. This typically occurs with complex formulas or formulas that Notion cannot statically determine the type for. (3) To detect the formula result type: use NOTION_FETCH_DATABASE to get the database schema (shows formula expression but not always the type), or better yet, query a sample row with NOTION_QUERY_DATABASE_WITH_FILTER (no filter) and inspect properties[].formula.type which will show 'number', 'string', 'date', or 'boolean' (IMPORTANT: if the type shows 'boolean', you must use 'checkbox' in your filter - the Notion API uses 'boolean' in property values but 'checkbox' in filters for the same formula result type). (4) If a formula is unfilterable (API returns validation error), you must use client-side filtering: query all rows without a formula filter, then filter results in your code. Examples: For boolean formula: {'property': 'Is Complete', 'formula': {'checkbox': {'equals': true}}}; For number formula: {'property': 'Calculated Price', 'formula': {'number': {'greater_than': 100}}}; For string formula: {'property': 'Full Name', 'formula': {'string': {'contains': 'Smith'}}}; For date formula: {'property': 'Deadline', 'formula': {'date': {'on_or_after': '2024-01-01'}}}. NOTE: 'text' is NOT valid - use 'rich_text' for text properties or 'title' for title properties. SYSTEM TIMESTAMP FILTERS: To filter by system timestamps (created_time, last_edited_time), you can use the simplified format: {\"created_time\": {\"on_or_after\": \"2024-01-01\"}}, which will be automatically transformed to the correct API format: {\"timestamp\": \"created_time\", \"created_time\": {\"on_or_after\": \"2024-01-01\"}}. This applies to both created_time and last_edited_time system fields. Do NOT use a 'property' key with system timestamp filters. Filter structure for database properties: {\"property\": \"\", \"\": {\"\": \"\"}}. Common conditions by type: title/rich_text: equals, contains, starts_with, ends_with, is_empty, is_not_empty; select/status: equals, does_not_equal, is_empty, is_not_empty; number: equals, does_not_equal, greater_than, less_than, greater_than_or_equal_to, less_than_or_equal_to, is_empty, is_not_empty; checkbox: equals (true/false); date: equals, before, after, on_or_before, on_or_after, is_empty, is_not_empty, past_week, past_month, past_year, next_week, next_month, next_year; relation: contains, does_not_contain (both require a valid page UUID), is_empty, is_not_empty. ROLLUP FILTERS (CRITICAL): Rollup properties require a nested aggregation type wrapper. Do NOT use flat filters like {\"rollup\": {\"contains\": \"value\"}}. Instead use one of: (1) {\"rollup\": {\"any\": {}}} - matches if ANY related item satisfies condition; (2) {\"rollup\": {\"every\": {}}} - matches if ALL related items satisfy condition; (3) {\"rollup\": {\"none\": {}}} - matches if NO related items satisfy condition; (4) {\"rollup\": {\"number\": {}}} - for number rollup aggregations (count, sum, avg, etc.); (5) {\"rollup\": {\"date\": {}}} - for date rollup aggregations (earliest, latest). Inside rollup.any/every/none, use the filter type that matches the underlying property type of the relation being rolled up. Common types include rich_text, number, checkbox, select, multi_select, date, people, files, status. Example for text rollup: {\"property\": \"Related Names\", \"rollup\": {\"any\": {\"rich_text\": {\"contains\": \"example\"}}}}. Example for number aggregation: {\"property\": \"Total\", \"rollup\": {\"number\": {\"greater_than\": 100}}}. Compound filters use 'and' or 'or' arrays: {\"and\": [, ]} or {\"or\": [, ]}.","examples":[{"property":"Status","select":{"equals":"To Do"}},{"property":"Status","select":{"equals":"✅ Done"}},{"property":"Task Status","status":{"equals":"In Progress"}},{"property":"Name","title":{"contains":"Project"}},{"property":"Description","rich_text":{"is_not_empty":true}},{"property":"Priority","select":{"equals":"High"}},{"number":{"greater_than":10},"property":"Count"},{"checkbox":{"equals":true},"property":"Active"},{"date":{"on_or_before":"2024-12-31"},"property":"Due Date"},{"created_time":{"on_or_after":"2024-01-01"}},{"last_edited_time":{"past_week":{}}},{"property":"Related Names","rollup":{"any":{"rich_text":{"contains":"example"}}}},{"property":"Task Count","rollup":{"number":{"greater_than":5}}},{"property":"Related Items","relation":{"contains":"260beeb0-57b4-80df-acc9-c3620f730dee"}},{"property":"Related Items","relation":{"is_empty":true}},{"and":[{"property":"Status","select":{"equals":"Done"}},{"property":"Priority","select":{"equals":"High"}}]}],"title":"Filter","type":"object"},"page_size":{"description":"Maximum number of items to return (1–100). Defaults to 100 if omitted.","examples":[10,25,50,100],"maximum":100,"minimum":1,"title":"Page Size","type":"integer"},"sorts":{"description":"List of sort criteria in order of precedence. Use PropertySort for database properties (with property field) and TimestampSort for system timestamps (with timestamp='created_time' or 'last_edited_time'). IMPORTANT: To sort by page creation or last edited time, you MUST use the TimestampSort format with timestamp='created_time' or timestamp='last_edited_time', NOT property names like 'Created' or 'Last Edited'. Common timestamp field name variations (Created, creation time, Last Edited, etc.) will be automatically converted to the correct format.","examples":[{"direction":"descending","property":"Priority"},{"direction":"ascending","timestamp":"last_edited_time"},{"direction":"descending","timestamp":"created_time"}],"items":{"anyOf":[{"description":"Sort by a database property name or ID (NOT for system timestamps).","properties":{"direction":{"description":"Sort direction: ascending or descending","enum":["ascending","descending"],"title":"Direction","type":"string"},"property":{"description":"Name or ID of the database property to sort by. Do NOT use for system timestamps (created_time, last_edited_time) - use TimestampSort instead.","title":"Property","type":"string"}},"required":["property","direction"],"title":"PropertySort","type":"object"},{"description":"Sort by a system timestamp field (created or last edited time).","properties":{"direction":{"description":"Sort direction: ascending or descending","enum":["ascending","descending"],"title":"Direction","type":"string"},"timestamp":{"description":"System timestamp field to sort by. Use 'created_time' for page creation time or 'last_edited_time' for last modification time.","enum":["created_time","last_edited_time"],"title":"Timestamp","type":"string"}},"required":["timestamp","direction"],"title":"TimestampSort","type":"object"}]},"title":"Sorts","type":"array"},"start_cursor":{"description":"Cursor from a prior response's `next_cursor` for fetching the next page.","examples":["67890abc-def0-1234-5678-9abcdef01234"],"title":"Start Cursor","type":"string"}},"required":["database_id"],"title":"QueryDatabaseWithFilterRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to query a Notion data source. Use when you need to retrieve pages or child data sources with filters, sorts, and pagination. Make paginated requests using cursors and optional property filters for efficient data retrieval.","name":"NOTION_QUERY_DATA_SOURCE","parameters":{"description":"Request model for querying a Notion data source.","properties":{"data_source_id":{"description":"UUID of the Notion data source to query (with or without hyphens). URI prefixes like 'collection://' are automatically stripped.","examples":["f47ac10b-58cc-4372-a567-0e02b2c3d479"],"title":"Data Source Id","type":"string"},"filter":{"additionalProperties":true,"description":"Filter object to limit returned entries. Supports single-property filters or compound filters using 'and'/'or'.","examples":[{"property":"Status","status":{"equals":"In Progress"}}],"title":"Filter","type":"object"},"filter_properties":{"description":"List of property IDs to include in each returned item; maps to the `filter_properties[]` query parameter.","examples":[["title","status"]],"items":{"type":"string"},"title":"Filter Properties","type":"array"},"page_size":{"description":"Maximum number of items to return (1-100). Defaults to 100 if omitted.","examples":[10,50,100],"maximum":100,"minimum":1,"title":"Page Size","type":"integer"},"sorts":{"description":"List of sort criteria in order of precedence. Use PropertySort for property fields or TimestampSort for creation/edit times.","examples":[{"direction":"descending","property":"Priority"},{"direction":"ascending","timestamp":"last_edited_time"}],"items":{"anyOf":[{"description":"Sort by a data source property.","properties":{"direction":{"description":"Sort direction: ascending or descending","enum":["ascending","descending"],"title":"Direction","type":"string"},"property":{"description":"ID of the data source property to sort by","title":"Property","type":"string"}},"required":["property","direction"],"title":"PropertySort","type":"object"},{"description":"Sort by entry timestamp.","properties":{"direction":{"description":"Sort direction: ascending or descending","enum":["ascending","descending"],"title":"Direction","type":"string"},"timestamp":{"description":"Timestamp field to sort by: 'created_time' or 'last_edited_time'","enum":["created_time","last_edited_time"],"title":"Timestamp","type":"string"}},"required":["timestamp","direction"],"title":"TimestampSort","type":"object"}]},"title":"Sorts","type":"array"},"start_cursor":{"description":"Cursor from a prior response's `next_cursor` for fetching the next page.","examples":["67890abc-def0-1234-5678-9abcdef01234"],"title":"Start Cursor","type":"string"}},"required":["data_source_id"],"title":"QueryDataSourceRequest","type":"object"}},"type":"function"},{"function":{"description":"Safely replaces a page's child blocks by optionally backing up current content, deleting existing children, then appending new children in batches. Use when you need to rebuild a page without leaving partial states. Notion does not provide atomic transactions; this tool orchestrates a multi-step workflow with optional backup to reduce risk.","name":"NOTION_REPLACE_PAGE_CONTENT","parameters":{"description":"Request model for replacing a page's child blocks.","properties":{"archive_existing_children":{"default":true,"description":"Whether to delete (archive) existing child blocks before appending new content. Set to False to keep existing content and only append new blocks.","title":"Archive Existing Children","type":"boolean"},"backup_parent":{"additionalProperties":false,"description":"Parent specification for backup page creation.","properties":{"data_source_id":{"description":"UUID of the parent data source (database) for the backup. Takes precedence over page_id if both are provided.","title":"Data Source Id","type":"string"},"page_id":{"description":"UUID of the parent page for the backup. If both page_id and data_source_id are None, the original page's parent will be used.","title":"Page Id","type":"string"}},"title":"BackupParent","type":"object"},"backup_title_suffix":{"default":" (backup)","description":"Suffix to append to the original page title when creating a backup page.","title":"Backup Title Suffix","type":"string"},"create_backup":{"default":false,"description":"Whether to create a backup page with the current content before replacing it. Strongly recommended when replacing important content.","title":"Create Backup","type":"boolean"},"dry_run":{"default":false,"description":"If True, returns what would be deleted and appended without making any changes. Use to preview the operation.","title":"Dry Run","type":"boolean"},"new_children":{"description":"Array of block objects to append to the page after clearing existing content. Supported types: paragraph, heading_1/2/3, bulleted_list_item, numbered_list_item, to_do, toggle, callout, code, quote, equation, image, video, audio, file, pdf, embed, bookmark, divider, table_of_contents, breadcrumb, column_list, column, table, table_row. Each block MUST include 'type' field and type-specific content. Text blocks must use 'rich_text' array structure with max 2000 chars per text.content. Will be appended in batches of up to 100 blocks to respect Notion API limits.","examples":[[{"object":"block","paragraph":{"rich_text":[{"text":{"content":"New content"},"type":"text"}]},"type":"paragraph"}]],"items":{"oneOf":[{"description":"A paragraph block object.","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"paragraph":{"description":"Paragraph content.","properties":{"color":{"default":"default","description":"Color of the paragraph text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"rich_text":{"description":"Array of rich text objects. Each text.content is limited to 2000 chars.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"ParagraphContentInput","type":"object"},"type":{"const":"paragraph","default":"paragraph","description":"Block type.","title":"Type","type":"string"}},"required":["paragraph"],"title":"ParagraphBlockInput","type":"object"},{"description":"A heading 1 block object (largest heading).","properties":{"heading_1":{"description":"Heading 1 content.","properties":{"color":{"default":"default","description":"Color of the heading.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"is_toggleable":{"default":false,"description":"Whether the heading can be toggled to show/hide content.","title":"Is Toggleable","type":"boolean"},"rich_text":{"description":"Array of rich text objects for the heading text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"HeadingContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"heading_1","default":"heading_1","description":"Block type.","title":"Type","type":"string"}},"required":["heading_1"],"title":"Heading1BlockInput","type":"object"},{"description":"A heading 2 block object (medium heading).","properties":{"heading_2":{"description":"Heading 2 content.","properties":{"color":{"default":"default","description":"Color of the heading.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"is_toggleable":{"default":false,"description":"Whether the heading can be toggled to show/hide content.","title":"Is Toggleable","type":"boolean"},"rich_text":{"description":"Array of rich text objects for the heading text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"HeadingContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"heading_2","default":"heading_2","description":"Block type.","title":"Type","type":"string"}},"required":["heading_2"],"title":"Heading2BlockInput","type":"object"},{"description":"A heading 3 block object (smallest heading).","properties":{"heading_3":{"description":"Heading 3 content.","properties":{"color":{"default":"default","description":"Color of the heading.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"is_toggleable":{"default":false,"description":"Whether the heading can be toggled to show/hide content.","title":"Is Toggleable","type":"boolean"},"rich_text":{"description":"Array of rich text objects for the heading text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"HeadingContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"heading_3","default":"heading_3","description":"Block type.","title":"Type","type":"string"}},"required":["heading_3"],"title":"Heading3BlockInput","type":"object"},{"description":"A bulleted list item block object.","properties":{"bulleted_list_item":{"description":"Bulleted list item content.","properties":{"color":{"default":"default","description":"Color of the list item.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"rich_text":{"description":"Array of rich text objects for the list item text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"ListItemContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"bulleted_list_item","default":"bulleted_list_item","description":"Block type.","title":"Type","type":"string"}},"required":["bulleted_list_item"],"title":"BulletedListItemBlockInput","type":"object"},{"description":"A numbered list item block object.","properties":{"numbered_list_item":{"description":"Numbered list item content.","properties":{"color":{"default":"default","description":"Color of the list item.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"rich_text":{"description":"Array of rich text objects for the list item text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"ListItemContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"numbered_list_item","default":"numbered_list_item","description":"Block type.","title":"Type","type":"string"}},"required":["numbered_list_item"],"title":"NumberedListItemBlockInput","type":"object"},{"description":"A to-do/checkbox block object.","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"to_do":{"description":"To-do content.","properties":{"checked":{"default":false,"description":"Whether the to-do item is checked/completed.","title":"Checked","type":"boolean"},"color":{"default":"default","description":"Color of the to-do item.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"rich_text":{"description":"Array of rich text objects for the to-do text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"ToDoContentInput","type":"object"},"type":{"const":"to_do","default":"to_do","description":"Block type.","title":"Type","type":"string"}},"required":["to_do"],"title":"ToDoBlockInput","type":"object"},{"description":"A toggle block object (collapsible content).","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"toggle":{"description":"Toggle content.","properties":{"color":{"default":"default","description":"Color of the toggle.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"rich_text":{"description":"Array of rich text objects for the toggle header text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"ToggleContentInput","type":"object"},"type":{"const":"toggle","default":"toggle","description":"Block type.","title":"Type","type":"string"}},"required":["toggle"],"title":"ToggleBlockInput","type":"object"},{"description":"A callout block object (highlighted content with icon).","properties":{"callout":{"description":"Callout content.","properties":{"color":{"default":"default","description":"Background color of the callout.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"icon":{"anyOf":[{"description":"Emoji icon for callout blocks.","properties":{"emoji":{"description":"Emoji character for the icon.","examples":["💡","⚠️","📝","🎉","✅"],"title":"Emoji","type":"string"},"type":{"const":"emoji","default":"emoji","description":"Icon type.","title":"Type","type":"string"}},"required":["emoji"],"title":"IconEmoji","type":"object"},{"type":"null"}],"default":null,"description":"Emoji icon for the callout. Defaults to 💡 if not provided."},"rich_text":{"description":"Array of rich text objects for the callout text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"CalloutContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"callout","default":"callout","description":"Block type.","title":"Type","type":"string"}},"required":["callout"],"title":"CalloutBlockInput","type":"object"},{"description":"A code block object with syntax highlighting.","properties":{"code":{"description":"Code content.","properties":{"caption":{"anyOf":[{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional caption for the code block.","title":"Caption"},"language":{"default":"plain text","description":"Programming language for syntax highlighting.","enum":["abap","arduino","bash","basic","c","clojure","coffeescript","c++","c#","css","dart","diff","docker","elixir","elm","erlang","flow","fortran","f#","gherkin","glsl","go","graphql","groovy","haskell","html","java","javascript","json","julia","kotlin","latex","less","lisp","livescript","lua","makefile","markdown","markup","matlab","mermaid","nix","objective-c","ocaml","pascal","perl","php","plain text","powershell","prolog","protobuf","python","r","reason","ruby","rust","sass","scala","scheme","scss","shell","sql","swift","typescript","vb.net","verilog","vhdl","visual basic","webassembly","xml","yaml","java/c/c++/c#"],"title":"CodeLanguage","type":"string"},"rich_text":{"description":"Array of rich text objects containing the code. Each text.content is limited to 2000 chars.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"CodeContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"code","default":"code","description":"Block type.","title":"Type","type":"string"}},"required":["code"],"title":"CodeBlockInput","type":"object"},{"description":"A quote block object.","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"quote":{"description":"Quote content.","properties":{"color":{"default":"default","description":"Color of the quote.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"rich_text":{"description":"Array of rich text objects for the quote text.","items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"minItems":1,"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"QuoteContentInput","type":"object"},"type":{"const":"quote","default":"quote","description":"Block type.","title":"Type","type":"string"}},"required":["quote"],"title":"QuoteBlockInput","type":"object"},{"description":"An equation block object (LaTeX/KaTeX).","properties":{"equation":{"description":"Equation content.","properties":{"expression":{"description":"LaTeX/KaTeX expression for the equation.","examples":["E = mc^2","\\frac{-b \\pm \\sqrt{b^2-4ac}}{2a}"],"title":"Expression","type":"string"}},"required":["expression"],"title":"EquationContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"equation","default":"equation","description":"Block type.","title":"Type","type":"string"}},"required":["equation"],"title":"EquationBlockInput","type":"object"},{"description":"An image block object.","properties":{"image":{"description":"Image content.","properties":{"caption":{"anyOf":[{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional caption for the image.","title":"Caption"},"external":{"description":"External image URL.","properties":{"url":{"description":"URL of the external file, image, or video.","examples":["https://example.com/image.png","https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"title":"Url","type":"string"}},"required":["url"],"title":"ExternalFileInput","type":"object"},"type":{"const":"external","default":"external","description":"Image source type. Use 'external' for URLs.","title":"Type","type":"string"}},"required":["external"],"title":"ImageContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"image","default":"image","description":"Block type.","title":"Type","type":"string"}},"required":["image"],"title":"ImageBlockInput","type":"object"},{"description":"A video block object.","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"video","default":"video","description":"Block type.","title":"Type","type":"string"},"video":{"description":"Video content.","properties":{"caption":{"anyOf":[{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional caption for the video.","title":"Caption"},"external":{"description":"External video URL. Supports YouTube, Vimeo, and direct video file URLs.","properties":{"url":{"description":"URL of the external file, image, or video.","examples":["https://example.com/image.png","https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"title":"Url","type":"string"}},"required":["url"],"title":"ExternalFileInput","type":"object"},"type":{"const":"external","default":"external","description":"Video source type. Use 'external' for URLs.","title":"Type","type":"string"}},"required":["external"],"title":"VideoContentInput","type":"object"}},"required":["video"],"title":"VideoBlockInput","type":"object"},{"description":"An audio block object.","properties":{"audio":{"description":"Audio content.","properties":{"caption":{"anyOf":[{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional caption for the audio.","title":"Caption"},"external":{"description":"External audio URL.","properties":{"url":{"description":"URL of the external file, image, or video.","examples":["https://example.com/image.png","https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"title":"Url","type":"string"}},"required":["url"],"title":"ExternalFileInput","type":"object"},"type":{"const":"external","default":"external","description":"Audio source type. Use 'external' for URLs.","title":"Type","type":"string"}},"required":["external"],"title":"AudioContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"audio","default":"audio","description":"Block type.","title":"Type","type":"string"}},"required":["audio"],"title":"AudioBlockInput","type":"object"},{"description":"A file block object.","properties":{"file":{"description":"File content.","properties":{"caption":{"anyOf":[{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional caption for the file.","title":"Caption"},"external":{"description":"External file URL.","properties":{"url":{"description":"URL of the external file, image, or video.","examples":["https://example.com/image.png","https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"title":"Url","type":"string"}},"required":["url"],"title":"ExternalFileInput","type":"object"},"type":{"const":"external","default":"external","description":"File source type. Use 'external' for URLs.","title":"Type","type":"string"}},"required":["external"],"title":"FileContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"file","default":"file","description":"Block type.","title":"Type","type":"string"}},"required":["file"],"title":"FileBlockInputObj","type":"object"},{"description":"A PDF block object.","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"pdf":{"description":"PDF content.","properties":{"caption":{"anyOf":[{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional caption for the PDF.","title":"Caption"},"external":{"description":"External PDF URL.","properties":{"url":{"description":"URL of the external file, image, or video.","examples":["https://example.com/image.png","https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"title":"Url","type":"string"}},"required":["url"],"title":"ExternalFileInput","type":"object"},"type":{"const":"external","default":"external","description":"PDF source type. Use 'external' for URLs.","title":"Type","type":"string"}},"required":["external"],"title":"PdfContentInput","type":"object"},"type":{"const":"pdf","default":"pdf","description":"Block type.","title":"Type","type":"string"}},"required":["pdf"],"title":"PdfBlockInput","type":"object"},{"description":"An embed block object (iframe for supported services).","properties":{"embed":{"description":"Embed content.","properties":{"url":{"description":"URL to embed. Supports Twitter, Google Maps, Figma, CodePen, and more.","examples":["https://twitter.com/NotionHQ/status/1234567890","https://www.figma.com/file/xxxxx"],"title":"Url","type":"string"}},"required":["url"],"title":"EmbedContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"embed","default":"embed","description":"Block type.","title":"Type","type":"string"}},"required":["embed"],"title":"EmbedBlockInput","type":"object"},{"description":"A bookmark block object (link preview).","properties":{"bookmark":{"description":"Bookmark content.","properties":{"caption":{"anyOf":[{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional caption for the bookmark.","title":"Caption"},"url":{"description":"URL of the webpage to bookmark.","examples":["https://www.notion.so","https://github.com"],"title":"Url","type":"string"}},"required":["url"],"title":"BookmarkContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"bookmark","default":"bookmark","description":"Block type.","title":"Type","type":"string"}},"required":["bookmark"],"title":"BookmarkBlockInput","type":"object"},{"description":"A divider block object (horizontal line).","properties":{"divider":{"additionalProperties":false,"description":"Divider content (empty object).","properties":{},"title":"DividerContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"divider","default":"divider","description":"Block type.","title":"Type","type":"string"}},"title":"DividerBlockInput","type":"object"},{"description":"A table of contents block object.","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"table_of_contents":{"description":"Table of contents content.","properties":{"color":{"default":"default","description":"Color of the table of contents.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"}},"title":"TableOfContentsContentInput","type":"object"},"type":{"const":"table_of_contents","default":"table_of_contents","description":"Block type.","title":"Type","type":"string"}},"title":"TableOfContentsBlockInput","type":"object"},{"description":"A breadcrumb block object.","properties":{"breadcrumb":{"additionalProperties":false,"description":"Breadcrumb content (empty object - auto-generated).","properties":{},"title":"BreadcrumbContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"breadcrumb","default":"breadcrumb","description":"Block type.","title":"Type","type":"string"}},"title":"BreadcrumbBlockInput","type":"object"},{"description":"A column list block object. Children must be column blocks.","properties":{"column_list":{"additionalProperties":false,"description":"Column list content.","properties":{"children":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"maxItems":100,"minItems":2,"type":"array"},{"type":"null"}],"default":null,"description":"Array of column block objects. Required when creating a column_list - must have at least 2 columns.","title":"Children"}},"title":"ColumnListContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"column_list","default":"column_list","description":"Block type.","title":"Type","type":"string"}},"title":"ColumnListBlockInput","type":"object"},{"description":"A column block object. Must be a child of column_list.","properties":{"column":{"additionalProperties":false,"description":"Column content.","properties":{"children":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"maxItems":100,"minItems":1,"type":"array"},{"type":"null"}],"default":null,"description":"Array of child block objects inside the column. Required when creating a column - must have at least 1 block.","title":"Children"}},"title":"ColumnContentInput","type":"object"},"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"type":{"const":"column","default":"column","description":"Block type.","title":"Type","type":"string"}},"title":"ColumnBlockInput","type":"object"},{"description":"A table block object.","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"table":{"description":"Table content.","properties":{"children":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"maxItems":100,"minItems":1,"type":"array"},{"type":"null"}],"default":null,"description":"Array of table_row block objects. Required when creating a table - must have at least one row with cells matching table_width.","title":"Children"},"has_column_header":{"default":false,"description":"Whether the first row is styled as a header.","title":"Has Column Header","type":"boolean"},"has_row_header":{"default":false,"description":"Whether the first column is styled as a header.","title":"Has Row Header","type":"boolean"},"table_width":{"description":"Number of columns in the table. Cannot be changed after creation.","maximum":100,"minimum":1,"title":"Table Width","type":"integer"}},"required":["table_width"],"title":"TableContentInput","type":"object"},"type":{"const":"table","default":"table","description":"Block type.","title":"Type","type":"string"}},"required":["table"],"title":"TableBlockInput","type":"object"},{"description":"A table_row block object. Must be a child of table.","properties":{"object":{"const":"block","default":"block","description":"Always 'block'.","title":"Object","type":"string"},"table_row":{"description":"Table row content.","properties":{"cells":{"description":"Array of cells, where each cell is an array of rich text objects. Number of cells must match table_width.","items":{"items":{"description":"Rich text object for creating text content in blocks.","properties":{"annotations":{"anyOf":[{"description":"Text styling annotations for rich text.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as inline code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of the text or background.","enum":["default","gray","brown","orange","yellow","green","blue","purple","pink","red","gray_background","brown_background","orange_background","yellow_background","green_background","blue_background","purple_background","pink_background","red_background"],"title":"BlockColor","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"TextAnnotations","type":"object"},{"type":"null"}],"default":null,"description":"Optional text styling annotations (bold, italic, etc.)."},"text":{"description":"The text content object.","properties":{"content":{"description":"The actual text content. CRITICAL: Maximum 2000 characters per text object.","examples":["Hello, World!","This is a paragraph of text."],"maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"description":"Link object for hyperlinked text.","properties":{"url":{"description":"The URL the text links to.","examples":["https://www.notion.so","https://example.com"],"title":"Url","type":"string"}},"required":["url"],"title":"TextLink","type":"object"},{"type":"null"}],"default":null,"description":"Optional link for the text."}},"required":["content"],"title":"TextContent","type":"object"},"type":{"const":"text","default":"text","description":"Type of rich text. Currently only 'text' is supported for input.","title":"Type","type":"string"}},"required":["text"],"title":"RichTextInput","type":"object"},"type":"array"},"title":"Cells","type":"array"}},"required":["cells"],"title":"TableRowContentInput","type":"object"},"type":{"const":"table_row","default":"table_row","description":"Block type.","title":"Type","type":"string"}},"required":["table_row"],"title":"TableRowBlockInput","type":"object"}]},"title":"New Children","type":"array"},"page_id":{"description":"The unique identifier (UUID) of the page whose content will be replaced. Must be a valid Notion page ID in UUID format (with or without hyphens).","examples":["b55c9c91-384d-452b-81db-d1ef79372b75","b55c9c91384d452b81dbd1ef79372b75"],"title":"Page Id","type":"string"}},"required":["page_id","new_children"],"title":"ReplacePageContentRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve a specific comment by its ID. Use when you have a comment ID and need to fetch its details.","name":"NOTION_RETRIEVE_COMMENT","parameters":{"properties":{"comment_id":{"description":"Identifier for the comment to retrieve.","examples":["123e4567-e89b-12d3-a456-426614174000"],"title":"Comment Id","type":"string"}},"required":["comment_id"],"title":"RetrieveCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve a specific property object of a Notion database. Use when you need to get details about a single database column/property.","name":"NOTION_RETRIEVE_DATABASE_PROPERTY","parameters":{"properties":{"database_id":{"description":"Identifier for the database.","examples":["a1b2c3d4-e5f6-7890-1234-abcdef123456"],"title":"Database Id","type":"string"},"property_id":{"description":"Identifier for the property. This can be the property ID (e.g., 'GZtn') or the property name (e.g., 'Status'). Supports URL-encoded values (e.g., 'kD%5ER' decodes to 'kD^R'). Property name matching is case-sensitive but supports Unicode normalization for characters that can be represented in multiple ways.","examples":["title","Status","Due Date","GTD 狀態","kD^R","kD%5ER"],"title":"Property Id","type":"string"}},"required":["database_id","property_id"],"title":"RetrieveDatabasePropertyRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve details of a Notion File Upload object by its identifier. Use when you need to check the status or details of an existing file upload.","name":"NOTION_RETRIEVE_FILE_UPLOAD","parameters":{"properties":{"file_upload_id":{"description":"The unique identifier (UUID) of the file upload to retrieve.","examples":["2ca8d5ed-53a6-81f7-b5a0-00b20e08ccf3"],"title":"File Upload Id","type":"string"}},"required":["file_upload_id"],"title":"RetrieveFileUploadRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieve a Notion page's properties/metadata (not block content) by page_id. Use when you have a page URL/ID and need to access its properties; for page content use block-children tools.","name":"NOTION_RETRIEVE_PAGE","parameters":{"properties":{"page_id":{"description":"The UUID of the Notion page to retrieve. Accepts both hyphenated (8-4-4-4-12) and unhyphenated (32 characters) UUID formats. IMPORTANT: Must be a PAGE ID, not a database ID. If you have a database ID, use NOTION_FETCH_DATABASE instead. This endpoint returns page properties and metadata, not page content (use block-children tools for content). For pages with properties containing more than 25 references, use NOTION_GET_PAGE_PROPERTY_ACTION to retrieve complete property values.","examples":["6c6a9b6c-12a4-4c3e-98e2-3c7a1e4f2d2a","6c6a9b6c12a44c3e98e23c7a1e4f2d2a"],"title":"Page Id","type":"string"}},"required":["page_id"],"title":"RetrievePageRequest","type":"object"}},"type":"function"},{"function":{"description":"Searches Notion pages and databases by title. Use specific search terms to find items by title (primary approach). KNOWN LIMITATIONS: (1) Search indexing is not immediate - recently shared items may not appear. (2) Search is not exhaustive - results may be incomplete. (3) Database pages return all custom properties with full nested structures, which can create large responses for databases with many properties - use filter_properties to reduce response size. FALLBACK STRATEGY: If a specific title search returns empty results despite knowing items exist, try an empty query to list all accessible items and filter client-side.","name":"NOTION_SEARCH_NOTION_PAGE","parameters":{"properties":{"direction":{"description":"Specifies the sort direction for the results. Required if `timestamp` is provided. Valid values are `ascending` or `descending`.","examples":["ascending","descending"],"title":"Direction","type":"string"},"filter_properties":{"description":"List of property names to include in the response for page results. When specified, only these properties will be returned in each page's 'properties' object, reducing response size. Useful for database pages with many custom properties. If not specified, all properties are returned. Note: This filter is applied client-side after receiving the API response.","items":{"type":"string"},"title":"Filter Properties","type":"array"},"filter_property":{"default":"object","description":"The property to filter the search results by. Currently, the only supported value is `object`, which filters by the type specified in `filter_value`. Defaults to `object`.","examples":["object"],"title":"Filter Property","type":"string"},"filter_value":{"default":"page","description":"Filters results by object type: 'page' or 'database'. Note: When searching databases, Notion's search may not find recently shared or newly created databases due to indexing delays. If specific database searches return empty results, try an empty query with filter_value='database' as a fallback to list all accessible databases.","enum":["page","database"],"examples":["page","database"],"title":"Filter Value","type":"string"},"page_size":{"default":25,"description":"The number of items to include in the response. Must be an integer between 1 and 100, inclusive. Defaults to 25.","maximum":100,"minimum":1,"title":"Page Size","type":"integer"},"query":{"default":"","description":"Text to search for in page and database titles. Use specific search terms to find items by title (primary approach). Note: Notion's search has known limitations - indexing is not immediate and recently shared items may not appear. If a specific query returns empty results, try an empty query as a fallback to list all accessible items and filter client-side.","title":"Query","type":"string"},"start_cursor":{"description":"An opaque cursor value from a previous response's `next_cursor` field. Must be exactly as returned by the API - do not pass page IDs, database IDs, or any other identifiers. If `None`, empty, or invalid, results start from the beginning.","title":"Start Cursor","type":"string"},"timestamp":{"description":"The timestamp field to sort the results by. Currently, the only supported value is `last_edited_time`. If provided, `direction` must also be specified.","title":"Timestamp","type":"string"}},"title":"SearchNotionPageRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to transmit file contents to Notion for a file upload object. Use after creating a file upload object to send the actual file data.","name":"NOTION_SEND_FILE_UPLOAD","parameters":{"properties":{"file":{"description":"File information including name and mimetype. FileInfo object where 'name' is the filename (e.g., 'document.pdf', 'test.txt').","file_uploadable":true,"format":"path","title":"FileInfo","type":"string"},"file_content_base64":{"description":"Optional base64-encoded file content. If provided, this will be used instead of downloading from S3 or reading from file_path. Useful for direct file content submission.","title":"File Content Base64","type":"string"},"file_path":{"description":"Optional local file path to read the file content from. If provided, this will be used instead of the file reference. Useful for testing or when the file is available locally.","title":"File Path","type":"string"},"file_upload_id":{"description":"Identifier of the file upload object to send data for. This ID is obtained from the Create File Upload action.","examples":["2ca8d5ed-53a6-81b9-812e-00b2d59c16b4"],"title":"File Upload Id","type":"string"},"part_number":{"description":"Required when the file upload mode is 'multi_part'. Indicates which part is being sent (parts are numbered starting from 1). For single-part uploads, omit this parameter.","examples":[1,2,3],"minimum":1,"title":"Part Number","type":"integer"}},"required":["file_upload_id","file"],"title":"SendFileUploadRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates existing Notion block's text content. ⚠️ CRITICAL: Content limited to 2000 chars. Cannot change block type or archive blocks. Content exceeding 2000 chars will fail with validation error. For longer content, split across multiple blocks using add_multiple_page_content.","name":"NOTION_UPDATE_BLOCK","parameters":{"description":"Input parameters for updating a Notion block.","properties":{"additional_properties":{"additionalProperties":true,"description":"Optional dictionary of type-specific properties. Common examples: 'checked' (boolean) for to_do blocks to mark complete/incomplete, 'color' (string like 'blue_background', 'gray', 'red') for text styling, 'is_toggleable' (boolean) for heading blocks to make them collapsible, 'icon' (object with 'type' and 'emoji' fields) for callout blocks. NOTE: Cannot use 'archived' here - use NOTION_DELETE_BLOCK to remove blocks instead. NOTE: Null/None values are automatically filtered out (omitting a property preserves its existing value).","examples":[{"checked":true},{"color":"blue_background"},{"color":"gray","is_toggleable":true},{"checked":false,"color":"red"},{"icon":{"emoji":"💡","type":"emoji"}}],"title":"Additional Properties","type":"object"},"block_id":{"description":"Identifier of the Notion block to be updated. Must be a valid UUID (with or without dashes). To find a block's ID, other Notion actions that list or retrieve blocks can be used. For updating content within a page (which is also a block), its ID can be obtained using actions like `NOTION_FETCH_DATA` to get page IDs and titles.","examples":["a1b2c3d4-e5f6-7890-1234-567890abcdef"],"title":"Block Id","type":"string"},"block_type":{"description":"The type of the block being updated. If not provided, the action will automatically detect the block type by fetching the block first (adds 1 extra API call). If provided, it must match the EXISTING block's type - you cannot change a block's type. Supported types: 'paragraph', 'heading_1', 'heading_2', 'heading_3', 'bulleted_list_item', 'numbered_list_item', 'to_do', 'toggle', 'code', 'quote', 'callout'.","examples":["paragraph","to_do","heading_2","code"],"title":"Block Type","type":"string"},"content":{"description":"The new text content for the block. Replaces existing text content entirely. ⚠️ CRITICAL: Notion API enforces a HARD LIMIT of 2000 characters per text.content field. Content exceeding 2000 chars will cause a validation error. For longer content, split across multiple blocks using append_block_children or add_multiple_page_content.","examples":["This is the updated line of text.","New heading text","Updated task description"],"title":"Content","type":"string"},"language":{"description":"Programming language for code blocks. Required when block_type='code'. Supported values include: 'abap', 'arduino', 'bash', 'basic', 'c', 'clojure', 'coffeescript', 'c++', 'c#', 'css', 'dart', 'diff', 'docker', 'elixir', 'elm', 'erlang', 'flow', 'fortran', 'f#', 'gherkin', 'glsl', 'go', 'graphql', 'groovy', 'haskell', 'html', 'java', 'javascript', 'json', 'julia', 'kotlin', 'latex', 'less', 'lisp', 'livescript', 'lua', 'makefile', 'markdown', 'markup', 'matlab', 'mermaid', 'nix', 'objective-c', 'ocaml', 'pascal', 'perl', 'php', 'plain text', 'powershell', 'prolog', 'protobuf', 'python', 'r', 'reason', 'ruby', 'rust', 'sass', 'scala', 'scheme', 'scss', 'shell', 'sql', 'swift', 'typescript', 'vb.net', 'verilog', 'vhdl', 'visual basic', 'webassembly', 'xml', 'yaml', 'java/c/c++/c#'. If not provided for a code block, the existing language will be preserved.","examples":["python","javascript","mermaid","json"],"title":"Language","type":"string"}},"required":["block_id","content"],"title":"UpdateBlockRequest","type":"object"}},"type":"function"},{"function":{"description":"Update page properties, icon, cover, or archive status. IMPORTANT: Property names are workspace-specific and case-sensitive. Use NOTION_FETCH_ROW or NOTION_FETCH_DATABASE first to discover exact property names and valid select/status options. Common errors: - \"X is not a property that exists\": Discover properties with NOTION_FETCH_ROW - \"Invalid status option\": Check valid options with NOTION_FETCH_DATABASE - \"should be defined\": Wrap values: {'Field': {'type': value}} Property formats: title/rich_text use {'text': {'content': 'value'}}, select/status use {'name': 'option'}","name":"NOTION_UPDATE_PAGE","parameters":{"properties":{"archived":{"description":"Set to true to archive (trash) the page, false to restore. Note: Workspace-level pages (pages in the sidebar that are not inside a database or another page) may not be archivable via the API depending on workspace configuration. Setting archived=true on an already-archived page or a page with an archived ancestor will be handled gracefully (returns current state without error). At least one of properties, archived, icon, or cover is required.","title":"Archived","type":"boolean"},"cover":{"additionalProperties":true,"description":"Page cover (external file only). At least one of properties, archived, icon, or cover is required.","examples":[{"external":{"url":"https://example.com/cover.png"},"type":"external"}],"title":"Cover","type":"object"},"icon":{"additionalProperties":true,"description":"Page icon object. At least one of properties, archived, icon, or cover is required.","examples":[{"emoji":"🎉","type":"emoji"}],"title":"Icon","type":"object"},"page_id":{"description":"Identifier for the Notion page to be updated. Use 'page_id' as the parameter name (not 'id').","examples":["59833787-2cf9-4fdf-8782-e53db20768a5"],"title":"Page Id","type":"string"},"properties":{"additionalProperties":true,"description":"Dictionary mapping property names to property value objects. IMPORTANT: Property names are workspace-specific and case-sensitive. Before updating, use NOTION_FETCH_ROW (for database pages) or NOTION_FETCH_DATABASE to discover the exact property names available in your database. Common properties like 'Status', 'Name', or 'Tags' may have different names in your workspace (e.g., 'Task Name', 'Priority'). For status/select properties, valid option values also vary by workspace - check the database schema for available options. Values must be wrapped in property type objects - never send plain values. Example: {'Status': {'select': {'name': 'Done'}}} not {'Status': 'Done'}. For relation properties, IDs must be valid UUIDs (format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). Control characters (ASCII 0x00-0x1F except tab/newline) are automatically stripped from string values. Long text content (>2000 characters) in rich_text or title properties is automatically split into multiple blocks to comply with Notion's API limits. At least one of properties, archived, icon, or cover is required.","examples":[{"Name":{"title":[{"text":{"content":"New Title"}}]}},{"Status":{"select":{"name":"Done"}}},{"Status":{"status":{"name":"In Progress"}}},{"Tags":{"multi_select":[{"name":"Important"}]}},{"Price":{"number":25.5}},{"Due Date":{"date":{"start":"2024-01-15"}}},{"Link":{"url":"https://example.com"}},{"Description":{"rich_text":[{"text":{"content":"Text"}}]}},{"Done":{"checkbox":true}}],"title":"Properties","type":"object"}},"required":["page_id"],"title":"UpdatePageRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates a specific row/page within a Notion database by its page UUID (row_id). IMPORTANT CLARIFICATION: This action updates INDIVIDUAL ROWS (pages) in a database, NOT the database structure. - To update a ROW/PAGE: Use THIS action with `row_id` (the page UUID) - To update DATABASE SCHEMA (columns, properties, title): Use NOTION_UPDATE_SCHEMA_DATABASE with `database_id` REQUIRED: `row_id` is MANDATORY. This is the UUID of the specific page/row to update. Do NOT pass `database_id` to this action - that parameter does not exist here. Common issues: (1) Use UUID from page URL, not the full URL (2) Ensure page is shared with integration (3) Match property names exactly as in database (4) Use 'status' type for Status properties, not 'select' (5) Retry on 409 Conflict errors (concurrent updates) Supports updating properties, icon, cover, or archiving the row.","name":"NOTION_UPDATE_ROW_DATABASE","parameters":{"properties":{"cover":{"description":"URL of an external image to be used as the cover for the page (e.g., 'https://google.com/image.png').","examples":["https://google.com/image.png"],"title":"Cover","type":"string"},"delete_row":{"default":false,"description":"If true, the row (page) will be archived, effectively deleting it from the active view. If the page is already archived, the action will return success with the current page state. If false, the row will be updated with other provided data.","examples":[true,false],"title":"Delete Row","type":"boolean"},"icon":{"description":"The emoji to be used as the icon for the page. Must be a single emoji character (e.g., '😻', '🤔').","examples":["😻","🤔"],"title":"Icon","type":"string"},"properties":{"default":[],"description":"List of properties to update. Each property requires: (1) 'name' - exact property name as shown in Notion, (2) 'type' - the property type (title, rich_text, number, select, status, multi_select, date, people, relation, checkbox, url, email, phone_number, files), (3) 'value' - formatted according to type. IMPORTANT: Verify property names exist in the database and match the exact case. Use 'status' type for Status properties, NOT 'select'. Properties not listed will remain unchanged. Note: Read-only properties (created_time, created_by, last_edited_time, last_edited_by, formula, rollup, unique_id) will be automatically skipped if included. Concurrent updates may cause 409 Conflict errors - retry if this occurs.","items":{"properties":{"name":{"description":"Name of the property","title":"Name","type":"string"},"type":{"description":"Type of the property. Common types: title (ONE per database), rich_text, number, select (for dropdowns), multi_select, date, people, files, checkbox, url, email, phone_number, relation. ⚠️ IMPORTANT: Use 'select' for dropdown properties - NOT 'status'. The 'status' type is a SPECIAL Notion property type (with 'To-do', 'In progress', 'Complete' groups) that most databases do NOT have. If your property shows a simple dropdown list, use 'select' even if the property is NAMED 'Status'. Read-only/unsupported types (auto-skipped): created_time, created_by, last_edited_time, last_edited_by, formula, rollup, unique_id, place.","enum":["title","rich_text","number","select","multi_select","date","people","files","checkbox","url","email","phone_number","formula","relation","rollup","status","created_time","created_by","last_edited_time","last_edited_by","place","unique_id"],"title":"Type","type":"string"},"value":{"description":"Value of the property, it will be dependent on the type of the property\nFor types --> value should be\n- title, rich_text - text ex. \"Hello World\" (IMPORTANT: max 2000 characters, longer text will be truncated)\n- number - number ex. 23.4\n- select - A SINGLE option name (NO COMMAS allowed). Ex: \"India\". For multiple values, use multi_select instead.\n- multi_select - comma separated values ex. \"India,USA\" (for multiple choices)\n- date - ISO 8601 format. Single date: \"2021-05-11\" or \"2021-05-11T11:00:00.000-04:00\". Date range: \"2021-05-11/2021-05-15\" or \"2021-05-11T11:00:00.000-04:00/2021-05-15T17:00:00.000-04:00\" (start/end separated by forward slash).\n- people - comma separated Notion USER UUIDs (NOT names). Format: \"12345678-1234-1234-1234-123456789abc\" or \"12345678-1234-1234-1234-123456789abc,87654321-4321-4321-4321-cba987654321\" for multiple users. Use the NOTION_LIST_USERS action to find valid user UUIDs.\n- relation - comma separated Notion PAGE UUIDs (NOT titles). Format: \"12345678-1234-1234-1234-123456789abc\" or \"12345678-1234-1234-1234-123456789abc,87654321-4321-4321-4321-cba987654321\" for multiple relations. Use NOTION_QUERY_DATABASE to find valid page UUIDs.\n- url - a url.\n- files - comma separated HTTPS URLs only. Local file paths (file://), HTTP URLs, and other protocols are NOT supported. Files must be hosted on a public web server or cloud storage with SSL (e.g., AWS S3, Google Cloud Storage, Dropbox). Example: \"https://example.com/file.pdf\" or \"https://s3.amazonaws.com/bucket/doc.pdf,https://example.com/image.png\"\n- checkbox - \"True\" or \"False\"\n","title":"Value","type":"string"}},"required":["name","type","value"],"title":"PropertyValues","type":"object"},"title":"Properties","type":"array"},"row_id":{"description":"REQUIRED: The page UUID of the database row to update. This is a PAGE ID (not a database ID). A database row in Notion is actually a page - use the page's UUID here. Format: 32-character UUID with hyphens (e.g., '59833787-2cf9-4fdf-8782-e53db20768a5'). NOT a URL or page title. Find this ID in the page URL or via 'Copy link' in Notion. NOTE: To update DATABASE structure/schema, use NOTION_UPDATE_SCHEMA_DATABASE instead. This action only updates individual rows/pages within a database.","examples":["59833787-2cf9-4fdf-8782-e53db20768a5"],"title":"Row Id","type":"string"}},"required":["row_id"],"title":"UpdateRowDatabaseRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates an existing Notion database's schema including title, description, and/or properties (columns). IMPORTANT NOTES: - At least one update (title, description, or properties) must be provided - The database must be shared with your integration - Property names are case-sensitive and must match exactly - When changing a property to 'relation' type, you MUST provide the database_id of the target database - Removing properties will permanently delete that column and its data - Use NOTION_FETCH_DATA first to get the exact property names and database structure Common errors: - 'database_id' missing: Ensure you're passing the database_id parameter (not page_id) - 'data_source_id' undefined: When changing to relation type, database_id is required in PropertySchemaUpdate - Property name mismatch: Names must match exactly including case and special characters","name":"NOTION_UPDATE_SCHEMA_DATABASE","parameters":{"properties":{"database_id":{"description":"REQUIRED: The UUID identifier of the Notion database to update. IMPORTANT: This must be a DATABASE ID, not a page ID. Page IDs and database IDs are both UUIDs but they are NOT interchangeable - passing a page ID will result in an error. Use NOTION_FETCH_DATA with get_databases=true to get available database IDs. Format: UUID with or without hyphens (e.g., 'd9824bdc-8445-4327-be8b-554d41f30b60'). The database must be shared with your integration. NOTE: At least one of (title, description, or properties) must also be provided to perform an update.","examples":["d9824bdc-8445-4327-be8b-554d41f30b60","278fe2ab-ecaa-8192-ba74-e4dbcfe3901a"],"title":"Database Id","type":"string"},"description":{"description":"New description for the database. Leave as None or omit to keep the existing description unchanged. This updates the description text shown below the database title. At least one of (title, description, or properties) must be provided.","title":"Description","type":"string"},"properties":{"default":[],"description":"List of property (column) updates for the database schema. At least one of (title, description, or properties) must be provided. Each PropertySchemaUpdate must specify: \n1) 'name': The EXACT case-sensitive name of the existing property\n2) One of these actions:\n - 'rename': Change the property name\n - 'new_type': Change the property type (see PropertySchemaUpdate for valid types)\n - 'remove': Set to true to delete the property\nIMPORTANT: When changing a property to 'relation' type, you MUST also provide 'database_id' with the UUID of the target database to link to.\nExample: [{'name': 'Status', 'new_type': 'select'}, {'name': 'Tasks', 'new_type': 'relation', 'database_id': 'abc123...'}]","examples":[[{"name":"Status","new_type":"select"},{"name":"Priority","remove":true}],[{"database_id":"d9824bdc-8445-4327-be8b","name":"Related Tasks","new_type":"relation"}]],"items":{"properties":{"database_id":{"description":"ID of the database to relate to. REQUIRED when new_type is 'relation'. This is the UUID of the target database that this relation property will link to. The target database must be shared with your integration.","title":"Database Id","type":"string"},"name":{"description":"Name of the existing property to update. This must match the exact case-sensitive name of the property in the database.","title":"Name","type":"string"},"new_type":{"description":"New type for the property. If None (default), the type remains unchanged. IMPORTANT: When changing to 'relation' type, you MUST also provide 'database_id'. NOTE: Title properties CANNOT be changed to a different type - every Notion database must have exactly one title property. If you need to rename the title property, use 'rename' instead of 'new_type'.","enum":["title","rich_text","number","select","multi_select","date","people","files","checkbox","url","email","phone_number","formula","relation","rollup","status","created_time","created_by","last_edited_time","last_edited_by","place","unique_id"],"title":"PropertyType","type":"string"},"relation_type":{"default":"single_property","description":"Type of relation when new_type is 'relation'. Either 'single_property' or 'dual_property'. Defaults to 'single_property'.","title":"Relation Type","type":"string"},"remove":{"default":false,"description":"Set to true to remove this property from the database. Cannot be combined with other updates.","title":"Remove","type":"boolean"},"rename":{"description":"New name for the property. If None (default), the name remains unchanged.","title":"Rename","type":"string"}},"required":["name"],"title":"PropertySchemaUpdate","type":"object"},"title":"Properties","type":"array"},"title":{"description":"New title for the database. Leave as None or omit to keep the existing title unchanged. This updates the database name visible in Notion. At least one of (title, description, or properties) must be provided.","title":"Title","type":"string"}},"required":["database_id"],"title":"UpdateSchemaDatabaseRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to upsert rows in a Notion database by querying for existing rows and creating or updating them. Use when you need to sync data to Notion without creating duplicates. Each item is matched by a filter, then either created (if no match) or updated (if match found). Supports bulk operations with per-item error handling.","name":"NOTION_UPSERT_ROW_DATABASE","parameters":{"description":"Request model for upserting rows in a Notion database.","properties":{"data_source_id":{"description":"UUID of the Notion data source (preferred). Required if database_id is not provided.","examples":["f47ac10b-58cc-4372-a567-0e02b2c3d479"],"title":"Data Source Id","type":"string"},"database_id":{"description":"UUID of the Notion database (legacy). If provided without data_source_id, will attempt to resolve to data_source_id. Only safe for single-source databases.","examples":["a12b3c4d-5e6f-7890-abcd-ef1234567890"],"title":"Database Id","type":"string"},"items":{"description":"Array of items to upsert. Each item contains match criteria and create/update payloads.","items":{"description":"Single upsert item containing match criteria and create/update payloads.","properties":{"create":{"additionalProperties":false,"description":"Payload to use when creating a new page if no match is found.","properties":{"children":{"description":"Array of block objects to add as page content. Each block has 'type' and a corresponding content object. Supported types: paragraph, heading_1, heading_2, heading_3, bulleted_list_item, numbered_list_item, to_do, toggle, code, quote, callout, divider.","items":{"anyOf":[{"description":"Paragraph block type.","properties":{"object":{"const":"block","default":"block","description":"The object type identifier (always 'block').","title":"Object","type":"string"},"paragraph":{"additionalProperties":true,"description":"Paragraph content with rich_text array.","title":"Paragraph","type":"object"},"type":{"const":"paragraph","default":"paragraph","description":"The block type identifier.","title":"Type","type":"string"}},"required":["paragraph"],"title":"ParagraphBlock","type":"object"},{"description":"Heading 1 block type.","properties":{"heading_1":{"additionalProperties":true,"description":"Heading content with rich_text array.","title":"Heading 1","type":"object"},"object":{"const":"block","default":"block","description":"The object type identifier (always 'block').","title":"Object","type":"string"},"type":{"const":"heading_1","default":"heading_1","description":"The block type identifier.","title":"Type","type":"string"}},"required":["heading_1"],"title":"Heading1Block","type":"object"},{"description":"Heading 2 block type.","properties":{"heading_2":{"additionalProperties":true,"description":"Heading content with rich_text array.","title":"Heading 2","type":"object"},"object":{"const":"block","default":"block","description":"The object type identifier (always 'block').","title":"Object","type":"string"},"type":{"const":"heading_2","default":"heading_2","description":"The block type identifier.","title":"Type","type":"string"}},"required":["heading_2"],"title":"Heading2Block","type":"object"},{"description":"Heading 3 block type.","properties":{"heading_3":{"additionalProperties":true,"description":"Heading content with rich_text array.","title":"Heading 3","type":"object"},"object":{"const":"block","default":"block","description":"The object type identifier (always 'block').","title":"Object","type":"string"},"type":{"const":"heading_3","default":"heading_3","description":"The block type identifier.","title":"Type","type":"string"}},"required":["heading_3"],"title":"Heading3Block","type":"object"},{"description":"Bulleted list item block type.","properties":{"bulleted_list_item":{"additionalProperties":true,"description":"List item content with rich_text array.","title":"Bulleted List Item","type":"object"},"object":{"const":"block","default":"block","description":"The object type identifier (always 'block').","title":"Object","type":"string"},"type":{"const":"bulleted_list_item","default":"bulleted_list_item","description":"The block type identifier.","title":"Type","type":"string"}},"required":["bulleted_list_item"],"title":"BulletedListItemBlock","type":"object"},{"description":"Numbered list item block type.","properties":{"numbered_list_item":{"additionalProperties":true,"description":"List item content with rich_text array.","title":"Numbered List Item","type":"object"},"object":{"const":"block","default":"block","description":"The object type identifier (always 'block').","title":"Object","type":"string"},"type":{"const":"numbered_list_item","default":"numbered_list_item","description":"The block type identifier.","title":"Type","type":"string"}},"required":["numbered_list_item"],"title":"NumberedListItemBlock","type":"object"},{"description":"To-do block type.","properties":{"object":{"const":"block","default":"block","description":"The object type identifier (always 'block').","title":"Object","type":"string"},"to_do":{"additionalProperties":true,"description":"To-do content with rich_text array and checked boolean.","title":"To Do","type":"object"},"type":{"const":"to_do","default":"to_do","description":"The block type identifier.","title":"Type","type":"string"}},"required":["to_do"],"title":"ToDoBlock","type":"object"},{"description":"Toggle block type.","properties":{"object":{"const":"block","default":"block","description":"The object type identifier (always 'block').","title":"Object","type":"string"},"toggle":{"additionalProperties":true,"description":"Toggle content with rich_text array.","title":"Toggle","type":"object"},"type":{"const":"toggle","default":"toggle","description":"The block type identifier.","title":"Type","type":"string"}},"required":["toggle"],"title":"ToggleBlock","type":"object"},{"description":"Code block type.","properties":{"code":{"additionalProperties":true,"description":"Code content with rich_text array and language.","title":"Code","type":"object"},"object":{"const":"block","default":"block","description":"The object type identifier (always 'block').","title":"Object","type":"string"},"type":{"const":"code","default":"code","description":"The block type identifier.","title":"Type","type":"string"}},"required":["code"],"title":"CodeBlock","type":"object"},{"description":"Quote block type.","properties":{"object":{"const":"block","default":"block","description":"The object type identifier (always 'block').","title":"Object","type":"string"},"quote":{"additionalProperties":true,"description":"Quote content with rich_text array.","title":"Quote","type":"object"},"type":{"const":"quote","default":"quote","description":"The block type identifier.","title":"Type","type":"string"}},"required":["quote"],"title":"QuoteBlock","type":"object"},{"description":"Callout block type.","properties":{"callout":{"additionalProperties":true,"description":"Callout content with rich_text array and icon.","title":"Callout","type":"object"},"object":{"const":"block","default":"block","description":"The object type identifier (always 'block').","title":"Object","type":"string"},"type":{"const":"callout","default":"callout","description":"The block type identifier.","title":"Type","type":"string"}},"required":["callout"],"title":"CalloutBlock","type":"object"},{"description":"Divider block type.","properties":{"divider":{"additionalProperties":true,"description":"Empty object for divider.","title":"Divider","type":"object"},"object":{"const":"block","default":"block","description":"The object type identifier (always 'block').","title":"Object","type":"string"},"type":{"const":"divider","default":"divider","description":"The block type identifier.","title":"Type","type":"string"}},"title":"DividerBlock","type":"object"},{"additionalProperties":true,"type":"object"}]},"title":"Children","type":"array"},"cover":{"anyOf":[{"description":"External cover image.","properties":{"external":{"description":"External image URL.","properties":{"url":{"description":"URL of the external file.","title":"Url","type":"string"}},"required":["url"],"title":"ExternalFile","type":"object"},"type":{"const":"external","default":"external","description":"The cover image type (external URL).","title":"Type","type":"string"}},"required":["external"],"title":"ExternalCover","type":"object"},{"additionalProperties":true,"type":"object"}],"description":"Cover image for the page: {'type': 'external', 'external': {'url': 'https://...'}}","title":"Cover"},"icon":{"anyOf":[{"description":"Emoji icon.","properties":{"emoji":{"description":"Emoji character (e.g., '🎉').","title":"Emoji","type":"string"},"type":{"const":"emoji","default":"emoji","description":"The icon type (emoji).","title":"Type","type":"string"}},"required":["emoji"],"title":"EmojiIcon","type":"object"},{"description":"External file icon.","properties":{"external":{"description":"External file URL.","properties":{"url":{"description":"URL of the external file.","title":"Url","type":"string"}},"required":["url"],"title":"ExternalFile","type":"object"},"type":{"const":"external","default":"external","description":"The icon type (external URL).","title":"Type","type":"string"}},"required":["external"],"title":"ExternalIcon","type":"object"},{"additionalProperties":true,"type":"object"}],"description":"Icon for the page. Either emoji: {'type': 'emoji', 'emoji': '🎉'} or external image: {'type': 'external', 'external': {'url': 'https://...'}}","title":"Icon"},"properties":{"additionalProperties":{"anyOf":[{"description":"Title property value.","properties":{"title":{"description":"Array of rich text objects for the title.","items":{"description":"Rich text object for title and rich_text properties.","properties":{"annotations":{"anyOf":[{"description":"Text formatting annotations.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of text or background. Values: default, gray, brown, orange, yellow, green, blue, purple, pink, red, or with _background suffix.","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"Annotations","type":"object"},{"type":"null"}],"default":null,"description":"Text formatting annotations."},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if the text contains a link.","title":"Href"},"plain_text":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Plain text without formatting.","title":"Plain Text"},"text":{"anyOf":[{"description":"Text content with optional link.","properties":{"content":{"description":"The text content.","maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"description":"Optional link object with 'url' key.","title":"Link"}},"required":["content"],"title":"TextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content. Required when type is 'text'."},"type":{"default":"text","description":"Type of rich text object.","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"RichTextObject","type":"object"},"title":"Title","type":"array"}},"required":["title"],"title":"TitlePropertyValue","type":"object"},{"description":"Rich text property value.","properties":{"rich_text":{"description":"Array of rich text objects.","items":{"description":"Rich text object for title and rich_text properties.","properties":{"annotations":{"anyOf":[{"description":"Text formatting annotations.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of text or background. Values: default, gray, brown, orange, yellow, green, blue, purple, pink, red, or with _background suffix.","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"Annotations","type":"object"},{"type":"null"}],"default":null,"description":"Text formatting annotations."},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if the text contains a link.","title":"Href"},"plain_text":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Plain text without formatting.","title":"Plain Text"},"text":{"anyOf":[{"description":"Text content with optional link.","properties":{"content":{"description":"The text content.","maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"description":"Optional link object with 'url' key.","title":"Link"}},"required":["content"],"title":"TextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content. Required when type is 'text'."},"type":{"default":"text","description":"Type of rich text object.","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"RichTextObject","type":"object"},"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"RichTextPropertyValue","type":"object"},{"description":"Number property value.","properties":{"number":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Numeric value or null.","title":"Number"}},"title":"NumberPropertyValue","type":"object"},{"description":"Select property value.","properties":{"select":{"anyOf":[{"description":"Select option reference.","properties":{"color":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Color of the option.","title":"Color"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"ID of the select option.","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Name of the select option.","title":"Name"}},"title":"SelectOption","type":"object"},{"type":"null"}],"default":null,"description":"Selected option or null to clear."}},"title":"SelectPropertyValue","type":"object"},{"description":"Multi-select property value.","properties":{"multi_select":{"description":"Array of selected options.","items":{"description":"Select option reference.","properties":{"color":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Color of the option.","title":"Color"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"ID of the select option.","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Name of the select option.","title":"Name"}},"title":"SelectOption","type":"object"},"title":"Multi Select","type":"array"}},"title":"MultiSelectPropertyValue","type":"object"},{"description":"Status property value.","properties":{"status":{"anyOf":[{"description":"Select option reference.","properties":{"color":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Color of the option.","title":"Color"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"ID of the select option.","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Name of the select option.","title":"Name"}},"title":"SelectOption","type":"object"},{"type":"null"}],"default":null,"description":"Status option or null to clear."}},"title":"StatusPropertyValue","type":"object"},{"description":"Date property value.","properties":{"date":{"anyOf":[{"description":"Date value with start, optional end, and timezone.","properties":{"end":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"End date in ISO 8601 format for date ranges.","title":"End"},"start":{"description":"Start date in ISO 8601 format.","title":"Start","type":"string"},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"IANA timezone identifier.","title":"Time Zone"}},"required":["start"],"title":"DateValue","type":"object"},{"type":"null"}],"default":null,"description":"Date value or null to clear."}},"title":"DatePropertyValue","type":"object"},{"description":"People property value.","properties":{"people":{"description":"Array of user references.","items":{"description":"Reference to a Notion user.","properties":{"id":{"description":"UUID of the user.","title":"Id","type":"string"},"object":{"const":"user","default":"user","description":"Always 'user'.","title":"Object","type":"string"}},"required":["id"],"title":"UserReference","type":"object"},"title":"People","type":"array"}},"title":"PeoplePropertyValue","type":"object"},{"description":"Files property value.","properties":{"files":{"description":"Array of file objects.","items":{"description":"File object for files property.","properties":{"external":{"description":"External file reference.","properties":{"url":{"description":"URL of the external file.","title":"Url","type":"string"}},"required":["url"],"title":"ExternalFile","type":"object"},"name":{"description":"Name of the file.","title":"Name","type":"string"},"type":{"const":"external","default":"external","description":"Type of file. Only 'external' supported for creation.","title":"Type","type":"string"}},"required":["name","external"],"title":"FileObject","type":"object"},"title":"Files","type":"array"}},"title":"FilesPropertyValue","type":"object"},{"description":"Checkbox property value.","properties":{"checkbox":{"description":"Boolean checkbox value.","title":"Checkbox","type":"boolean"}},"required":["checkbox"],"title":"CheckboxPropertyValue","type":"object"},{"description":"URL property value.","properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL string or null to clear.","title":"Url"}},"title":"UrlPropertyValue","type":"object"},{"description":"Email property value.","properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Email address or null to clear.","title":"Email"}},"title":"EmailPropertyValue","type":"object"},{"description":"Phone number property value.","properties":{"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Phone number string or null to clear.","title":"Phone Number"}},"title":"PhoneNumberPropertyValue","type":"object"},{"description":"Relation property value.","properties":{"relation":{"description":"Array of page references.","items":{"description":"Reference to a related page.","properties":{"id":{"description":"UUID of the related page.","title":"Id","type":"string"}},"required":["id"],"title":"RelationReference","type":"object"},"title":"Relation","type":"array"}},"title":"RelationPropertyValue","type":"object"},{"additionalProperties":true,"type":"object"}]},"description":"Property values for the new page. Keys are property names, values are property value objects. Supported types: title, rich_text, number, select, multi_select, status, date, people, files, checkbox, url, email, phone_number, relation. Format: {'PropertyName': {'type_name': value}}. Example: {'Name': {'title': [{'text': {'content': 'Page Title'}}]}, 'Status': {'select': {'name': 'Done'}}, 'Count': {'number': 42}}","title":"Properties","type":"object"}},"required":["properties"],"title":"Create","type":"object"},"match":{"anyOf":[{"description":"Filter specification for matching existing rows.","properties":{"equals":{"description":"Value to match exactly.","examples":["john@example.com","Project Alpha"],"title":"Equals","type":"string"},"property":{"description":"Property name or ID to filter by.","examples":["Email","Name","ID"],"title":"Property","type":"string"}},"required":["property","equals"],"title":"MatchFilter","type":"object"},{"additionalProperties":true,"type":"object"}],"description":"Filter to find existing row. Can be simplified {'property': 'Email', 'equals': 'user@example.com'} or full Notion filter object.","title":"Match"},"update":{"additionalProperties":false,"description":"Payload to use when updating an existing page if a match is found.","properties":{"archived":{"description":"Set to true to archive the page, false to restore.","title":"Archived","type":"boolean"},"cover":{"anyOf":[{"description":"External cover image.","properties":{"external":{"description":"External image URL.","properties":{"url":{"description":"URL of the external file.","title":"Url","type":"string"}},"required":["url"],"title":"ExternalFile","type":"object"},"type":{"const":"external","default":"external","description":"The cover image type (external URL).","title":"Type","type":"string"}},"required":["external"],"title":"ExternalCover","type":"object"},{"additionalProperties":true,"type":"object"}],"description":"Cover image for the page: {'type': 'external', 'external': {'url': 'https://...'}}","title":"Cover"},"icon":{"anyOf":[{"description":"Emoji icon.","properties":{"emoji":{"description":"Emoji character (e.g., '🎉').","title":"Emoji","type":"string"},"type":{"const":"emoji","default":"emoji","description":"The icon type (emoji).","title":"Type","type":"string"}},"required":["emoji"],"title":"EmojiIcon","type":"object"},{"description":"External file icon.","properties":{"external":{"description":"External file URL.","properties":{"url":{"description":"URL of the external file.","title":"Url","type":"string"}},"required":["url"],"title":"ExternalFile","type":"object"},"type":{"const":"external","default":"external","description":"The icon type (external URL).","title":"Type","type":"string"}},"required":["external"],"title":"ExternalIcon","type":"object"},{"additionalProperties":true,"type":"object"}],"description":"Icon for the page. Either emoji: {'type': 'emoji', 'emoji': '🎉'} or external image: {'type': 'external', 'external': {'url': 'https://...'}}","title":"Icon"},"properties":{"additionalProperties":{"anyOf":[{"description":"Title property value.","properties":{"title":{"description":"Array of rich text objects for the title.","items":{"description":"Rich text object for title and rich_text properties.","properties":{"annotations":{"anyOf":[{"description":"Text formatting annotations.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of text or background. Values: default, gray, brown, orange, yellow, green, blue, purple, pink, red, or with _background suffix.","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"Annotations","type":"object"},{"type":"null"}],"default":null,"description":"Text formatting annotations."},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if the text contains a link.","title":"Href"},"plain_text":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Plain text without formatting.","title":"Plain Text"},"text":{"anyOf":[{"description":"Text content with optional link.","properties":{"content":{"description":"The text content.","maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"description":"Optional link object with 'url' key.","title":"Link"}},"required":["content"],"title":"TextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content. Required when type is 'text'."},"type":{"default":"text","description":"Type of rich text object.","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"RichTextObject","type":"object"},"title":"Title","type":"array"}},"required":["title"],"title":"TitlePropertyValue","type":"object"},{"description":"Rich text property value.","properties":{"rich_text":{"description":"Array of rich text objects.","items":{"description":"Rich text object for title and rich_text properties.","properties":{"annotations":{"anyOf":[{"description":"Text formatting annotations.","properties":{"bold":{"default":false,"description":"Whether the text is bold.","title":"Bold","type":"boolean"},"code":{"default":false,"description":"Whether the text is formatted as code.","title":"Code","type":"boolean"},"color":{"default":"default","description":"Color of text or background. Values: default, gray, brown, orange, yellow, green, blue, purple, pink, red, or with _background suffix.","title":"Color","type":"string"},"italic":{"default":false,"description":"Whether the text is italic.","title":"Italic","type":"boolean"},"strikethrough":{"default":false,"description":"Whether the text has strikethrough.","title":"Strikethrough","type":"boolean"},"underline":{"default":false,"description":"Whether the text is underlined.","title":"Underline","type":"boolean"}},"title":"Annotations","type":"object"},{"type":"null"}],"default":null,"description":"Text formatting annotations."},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL if the text contains a link.","title":"Href"},"plain_text":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Plain text without formatting.","title":"Plain Text"},"text":{"anyOf":[{"description":"Text content with optional link.","properties":{"content":{"description":"The text content.","maxLength":2000,"title":"Content","type":"string"},"link":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"description":"Optional link object with 'url' key.","title":"Link"}},"required":["content"],"title":"TextContent","type":"object"},{"type":"null"}],"default":null,"description":"Text content. Required when type is 'text'."},"type":{"default":"text","description":"Type of rich text object.","enum":["text","mention","equation"],"title":"Type","type":"string"}},"title":"RichTextObject","type":"object"},"title":"Rich Text","type":"array"}},"required":["rich_text"],"title":"RichTextPropertyValue","type":"object"},{"description":"Number property value.","properties":{"number":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Numeric value or null.","title":"Number"}},"title":"NumberPropertyValue","type":"object"},{"description":"Select property value.","properties":{"select":{"anyOf":[{"description":"Select option reference.","properties":{"color":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Color of the option.","title":"Color"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"ID of the select option.","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Name of the select option.","title":"Name"}},"title":"SelectOption","type":"object"},{"type":"null"}],"default":null,"description":"Selected option or null to clear."}},"title":"SelectPropertyValue","type":"object"},{"description":"Multi-select property value.","properties":{"multi_select":{"description":"Array of selected options.","items":{"description":"Select option reference.","properties":{"color":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Color of the option.","title":"Color"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"ID of the select option.","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Name of the select option.","title":"Name"}},"title":"SelectOption","type":"object"},"title":"Multi Select","type":"array"}},"title":"MultiSelectPropertyValue","type":"object"},{"description":"Status property value.","properties":{"status":{"anyOf":[{"description":"Select option reference.","properties":{"color":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Color of the option.","title":"Color"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"ID of the select option.","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Name of the select option.","title":"Name"}},"title":"SelectOption","type":"object"},{"type":"null"}],"default":null,"description":"Status option or null to clear."}},"title":"StatusPropertyValue","type":"object"},{"description":"Date property value.","properties":{"date":{"anyOf":[{"description":"Date value with start, optional end, and timezone.","properties":{"end":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"End date in ISO 8601 format for date ranges.","title":"End"},"start":{"description":"Start date in ISO 8601 format.","title":"Start","type":"string"},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"IANA timezone identifier.","title":"Time Zone"}},"required":["start"],"title":"DateValue","type":"object"},{"type":"null"}],"default":null,"description":"Date value or null to clear."}},"title":"DatePropertyValue","type":"object"},{"description":"People property value.","properties":{"people":{"description":"Array of user references.","items":{"description":"Reference to a Notion user.","properties":{"id":{"description":"UUID of the user.","title":"Id","type":"string"},"object":{"const":"user","default":"user","description":"Always 'user'.","title":"Object","type":"string"}},"required":["id"],"title":"UserReference","type":"object"},"title":"People","type":"array"}},"title":"PeoplePropertyValue","type":"object"},{"description":"Files property value.","properties":{"files":{"description":"Array of file objects.","items":{"description":"File object for files property.","properties":{"external":{"description":"External file reference.","properties":{"url":{"description":"URL of the external file.","title":"Url","type":"string"}},"required":["url"],"title":"ExternalFile","type":"object"},"name":{"description":"Name of the file.","title":"Name","type":"string"},"type":{"const":"external","default":"external","description":"Type of file. Only 'external' supported for creation.","title":"Type","type":"string"}},"required":["name","external"],"title":"FileObject","type":"object"},"title":"Files","type":"array"}},"title":"FilesPropertyValue","type":"object"},{"description":"Checkbox property value.","properties":{"checkbox":{"description":"Boolean checkbox value.","title":"Checkbox","type":"boolean"}},"required":["checkbox"],"title":"CheckboxPropertyValue","type":"object"},{"description":"URL property value.","properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL string or null to clear.","title":"Url"}},"title":"UrlPropertyValue","type":"object"},{"description":"Email property value.","properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Email address or null to clear.","title":"Email"}},"title":"EmailPropertyValue","type":"object"},{"description":"Phone number property value.","properties":{"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Phone number string or null to clear.","title":"Phone Number"}},"title":"PhoneNumberPropertyValue","type":"object"},{"description":"Relation property value.","properties":{"relation":{"description":"Array of page references.","items":{"description":"Reference to a related page.","properties":{"id":{"description":"UUID of the related page.","title":"Id","type":"string"}},"required":["id"],"title":"RelationReference","type":"object"},"title":"Relation","type":"array"}},"title":"RelationPropertyValue","type":"object"},{"additionalProperties":true,"type":"object"}]},"description":"Property values to update. Keys are property names, values are property value objects. Only properties specified will be updated; others remain unchanged. Format: {'PropertyName': {'type_name': value}}. Example: {'Status': {'select': {'name': 'Done'}}, 'Count': {'number': 42}}","title":"Properties","type":"object"}},"title":"Update","type":"object"}},"required":["match","create","update"],"title":"UpsertItem","type":"object"},"minItems":1,"title":"Items","type":"array"},"options":{"additionalProperties":false,"description":"Options controlling upsert behavior.","properties":{"continue_on_error":{"default":true,"description":"If true, continue processing remaining items after an error; if false, stop on first error.","title":"Continue On Error","type":"boolean"},"if_multiple_matches":{"default":"update_first","description":"Behavior when multiple matches are found: 'error' raises an error, 'update_first' updates the first result.","enum":["error","update_first"],"title":"If Multiple Matches","type":"string"}},"title":"UpsertOptions","type":"object"}},"required":["items"],"title":"UpsertRowDatabaseRequest","type":"object"}},"type":"function"}]}}} \ No newline at end of file diff --git a/tests/fixtures/composio_reddit.json b/tests/fixtures/composio_reddit.json new file mode 100644 index 000000000..6b14579c4 --- /dev/null +++ b/tests/fixtures/composio_reddit.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"logs":["composio: 23 tool(s) listed"],"result":{"tools":[{"function":{"description":"Creates a new text or link post on a specified, existing Reddit subreddit, optionally applying a flair. Immediately publishes publicly visible content — confirm subreddit, title, and body with the user before executing. Posts may be silently removed post-submission by automoderator or subreddit rules (errors: SUBMIT_VALIDATION_BODY_BLACKLISTED_STRING, POST_GUIDANCE_VALIDATION_FAILED); verify visibility via the returned permalink. Rapid consecutive calls trigger RATELIMIT errors with cooldown hints.","name":"REDDIT_CREATE_REDDIT_POST","parameters":{"properties":{"flair_id":{"description":"ID of the post flair template (UUID format). Must be a valid flair template ID that exists for this specific subreddit. To get valid flair IDs, first use LIST_SUBREDDIT_POST_FLAIRS action for the target subreddit. Do not pass generic strings like 'general' or 'news' - these are not universal flair IDs. Some subreddits enforce mandatory flair; omitting or providing an invalid ID returns SUBMIT_VALIDATION_FLAIR_REQUIRED.","examples":["a1b2c3d4-e5f6-7890-1234-567890abcdef"],"title":"Flair Id","type":"string"},"kind":{"description":"The type of the post. Use 'self' for a text-based post (when providing 'text') or 'link' for a post that links to an external URL (when providing 'url'). If omitted, it is automatically inferred: 'self' when 'text' is provided, 'link' when 'url' is provided.","enum":["link","self"],"examples":["self","link"],"title":"PostType","type":"string"},"subreddit":{"description":"The name of the subreddit (without the 'r/' prefix) where the post will be submitted.","examples":["learnpython","AskReddit"],"title":"Subreddit","type":"string"},"text":{"description":"The markdown-formatted text content for a 'self' post. Required if `kind` is 'self'. Body must not exceed ~40,000 characters.","examples":["This is the body of my text post. It can include **markdown** formatting."],"title":"Text","type":"string"},"title":{"description":"The title of the post. Must be 300 characters or less.","examples":["My New Project!","Interesting Article I Found"],"title":"Title","type":"string"},"url":{"description":"The URL for a 'link' post. Required if `kind` is 'link'.","examples":["https://www.example.com/news/article.html"],"title":"Url","type":"string"}},"required":["subreddit","title"],"title":"CreatePostRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a Reddit comment, identified by its fullname ID, if it was authored by the authenticated user. Deletion is permanent and irreversible.","name":"REDDIT_DELETE_REDDIT_COMMENT","parameters":{"properties":{"id":{"description":"The full 'thing ID' (fullname, e.g., 't1_c0s4w1c') of the comment to delete; typically starts with 't1_'.","examples":["t1_c0s4w1c"],"title":"Id","type":"string"}},"required":["id"],"title":"DeleteCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently and irreversibly deletes a Reddit post by its ID. Confirm with the user before calling. Only works on posts authored by the authenticated account; attempting to delete another user's post will fail.","name":"REDDIT_DELETE_REDDIT_POST","parameters":{"properties":{"id":{"description":"The full name (fullname) of the Reddit post to be deleted. This ID must start with 't3_' followed by the post's unique base36 identifier.","examples":["t3_1abcdef","t3_gfedcba"],"title":"Id","type":"string"}},"required":["id"],"title":"DeletePostRequest","type":"object"}},"type":"function"},{"function":{"description":"Edits the body text of the authenticated user's own existing comment or self-post on Reddit; cannot edit link posts or titles.","name":"REDDIT_EDIT_REDDIT_COMMENT_OR_POST","parameters":{"properties":{"text":{"description":"The new raw markdown text for the body of the comment or self-post.","examples":["This is the *updated* content with **markdown** formatting."],"title":"Text","type":"string"},"thing_id":{"description":"The full name (fullname) of the comment or self-post to edit. This is a combination of a prefix (e.g., 't1_' for comment, 't3_' for post) and the item's ID.","examples":["t1_c0c0c0c","t3_h0h0h0h"],"title":"Thing Id","type":"string"}},"required":["thing_id","text"],"title":"EditCommentOrPostRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve a listing of Reddit posts sorted by the specified criteria (hot, new, top, etc.). Use when you need to get posts from the Reddit front page or all of Reddit with a specific sort order. Supports pagination and time filtering for top/controversial sorts.","name":"REDDIT_GET","parameters":{"description":"Request model for getting a listing of Reddit posts sorted by a specific method.","properties":{"after":{"description":"Fullname of a thing for pagination (loads posts after this item).","title":"After","type":"string"},"before":{"description":"Fullname of a thing for pagination (loads posts before this item).","title":"Before","type":"string"},"count":{"description":"A positive integer representing the number of items already seen (default: 0).","title":"Count","type":"integer"},"limit":{"description":"The maximum number of items desired (default: 25, maximum: 100).","examples":[25,50,100],"title":"Limit","type":"integer"},"show":{"description":"The string 'all' to show all posts including filtered ones.","title":"Show","type":"string"},"sort":{"description":"The sorting method for results. Valid values: hot, new, top, rising, controversial, best. Note: 'random' is NOT supported here - use the GET_RANDOM action instead.","examples":["hot","new","top","rising","controversial","best"],"title":"Sort","type":"string"},"time_filter":{"description":"Time filter for 'top' and 'controversial' sorts. Valid values: hour, day, week, month, year, all.","examples":["hour","day","week","month","year","all"],"title":"Time Filter","type":"string"}},"required":["sort"],"title":"RedditGetRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve controversial posts from all subreddits with time filters. Use when you need to find the most controversial posts across Reddit from a specific time period (hour, day, week, month, year, or all-time). Returns a paginated listing of posts ranked by controversy within the specified time frame.","name":"REDDIT_GET_CONTROVERSIAL_POSTS","parameters":{"properties":{"after":{"description":"Fullname of a thing to use as anchor for pagination. Returns results that occur after this fullname in the listing.","examples":["t3_abc123"],"title":"After","type":"string"},"before":{"description":"Fullname of a thing to use as anchor for pagination. Returns results that occur before this fullname in the listing.","examples":["t3_xyz789"],"title":"Before","type":"string"},"limit":{"default":25,"description":"Maximum number of controversial posts to return. Default is 25, maximum is 100.","examples":[10,25,50,100],"maximum":100,"minimum":1,"title":"Limit","type":"integer"},"t":{"default":"all","description":"Time filter for ranking controversial posts. Specifies the time period: 'hour', 'day', 'week', 'month', 'year', or 'all' (default).","enum":["hour","day","week","month","year","all"],"examples":["day","week","month","all"],"title":"T","type":"string"}},"title":"GetControversialPostsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve preference settings of the logged in user. Use when you need to check user preferences or settings.","name":"REDDIT_GET_ME_PREFS","parameters":{"properties":{"fields":{"description":"A comma-separated list of preference fields to return. If not specified, all preference fields are returned. Supported fields include: threaded_messages, hide_downs, hide_ups, activity_relevant_ads, nightmode, compress, beta, media, media_preview, label_nsfw, over_18, search_include_over_18, hide_ads, email_messages, email_digests, monitor_mentions, hide_from_robots, profile_opt_out, public_votes, lang, theme_selector, min_comment_score, min_link_score, accept_pms, show_link_flair, show_trending, private_feeds, research, ignore_suggested_sort, domain_details, legacy_search, live_orangereds, highlight_controversial, no_profanity, email_unsubscribe_all, in_redesign_beta, allow_clicktracking, show_twitter, store_visits, threaded_modmail, enable_default_themes, geopopular, show_stylesheets, show_promote, organic, collapse_read_messages, show_flair, mark_messages_read, top_karma_subreddits, newwindow, video_autoplay, credit_autorenew, clickgadget, use_global_defaults, other_theme, num_comments, numsites, and g.","examples":["lang,theme_selector,nightmode","hide_ads,email_messages"],"title":"Fields","type":"string"}},"title":"GetMePrefsRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use RetrieveRedditPost instead. Tool to retrieve newest posts from a subreddit sorted by creation time. Use when you need to find the most recently submitted posts to discover fresh content. Returns a paginated listing of posts ranked by newest first.","name":"REDDIT_GET_NEW","parameters":{"properties":{"after":{"description":"Fullname of a thing to use as anchor for pagination. Returns results that occur after this fullname in the listing.","examples":["t3_abc123"],"title":"After","type":"string"},"before":{"description":"Fullname of a thing to use as anchor for pagination. Returns results that occur before this fullname in the listing.","examples":["t3_xyz789"],"title":"Before","type":"string"},"count":{"description":"Used by Reddit to number listings after the first page for pagination. Represents the number of items already seen.","examples":[0,25,50],"minimum":0,"title":"Count","type":"integer"},"limit":{"default":25,"description":"Maximum number of new posts to return. Default is 25, maximum is 100.","examples":[10,25,50,100],"maximum":100,"minimum":1,"title":"Limit","type":"integer"},"subreddit":{"description":"Subreddit name (without 'r/' prefix). Must contain only letters, numbers, and underscores. No spaces or special characters allowed. Case-insensitive.","examples":["python","technology","programming","news"],"maxLength":21,"minLength":1,"pattern":"^[a-zA-Z0-9_]+$","title":"Subreddit","type":"string"}},"required":["subreddit"],"title":"GetNewRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve a random public Reddit post from any subreddit. Use when you want to discover serendipitous content or need a random post for testing or entertainment purposes.","name":"REDDIT_GET_RANDOM","parameters":{"description":"Request model for getting a random Reddit post.","properties":{"subreddit":{"description":"Name of the subreddit to get a random post from. If not specified, returns a random post from all of Reddit. Do not include 'r/' prefix.","examples":["AskReddit","technology","programming"],"title":"Subreddit","type":"string"}},"title":"GetRandomRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves information about a specified Reddit user account, including karma scores and gold status. Use when you need to get profile information for any public Reddit user.","name":"REDDIT_GET_REDDIT_USER_ABOUT","parameters":{"properties":{"username":{"description":"The name of an existing Reddit user to retrieve information about. Do not include 'u/' prefix. Use 'me' to get information about the currently authenticated user.","examples":["spez","reddit","AutoModerator","me"],"title":"Username","type":"string"}},"required":["username"],"title":"GetUserAboutRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve top-rated posts from a subreddit with time filters. Use when you need to find the most popular posts from a specific time period (hour, day, week, month, year, or all-time). Returns a paginated listing of posts ranked by score within the specified time frame.","name":"REDDIT_GET_R_TOP","parameters":{"properties":{"after":{"description":"Fullname of a thing to use as anchor for pagination. Returns results that occur after this fullname in the listing.","examples":["t3_abc123"],"title":"After","type":"string"},"before":{"description":"Fullname of a thing to use as anchor for pagination. Returns results that occur before this fullname in the listing.","examples":["t3_xyz789"],"title":"Before","type":"string"},"count":{"description":"Used by Reddit to number listings after the first page for pagination. Represents the number of items already seen.","examples":[0,25,50],"minimum":0,"title":"Count","type":"integer"},"limit":{"default":25,"description":"Maximum number of top posts to return. Default is 25, maximum is 100.","examples":[10,25,50,100],"maximum":100,"minimum":1,"title":"Limit","type":"integer"},"show":{"description":"Display filtering option. Use 'all' to return items that would normally be omitted (e.g., posts you have hidden).","examples":["all"],"title":"Show","type":"string"},"sr_detail":{"description":"Expand subreddits detail in response. Set to true to get more detailed subreddit information.","title":"Sr Detail","type":"boolean"},"subreddit":{"description":"Subreddit name (without 'r/' prefix). Must contain only letters, numbers, and underscores. No spaces or special characters allowed. Case-insensitive.","examples":["python","technology","programming","news"],"maxLength":21,"minLength":1,"pattern":"^[a-zA-Z0-9_]+$","title":"Subreddit","type":"string"},"t":{"default":"all","description":"Time filter for ranking top posts. Specifies the time period for top posts: 'hour', 'day', 'week', 'month', 'year', or 'all' (default).","enum":["hour","day","week","month","year","all"],"examples":["day","week","month","all"],"title":"T","type":"string"}},"required":["subreddit"],"title":"RedditGetRTopRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve all available OAuth scopes supported by the Reddit API. Use when you need to understand what permissions are available or check scope definitions.","name":"REDDIT_GET_SCOPES","parameters":{"properties":{},"title":"GetScopesRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetch the explicit posting rules for a subreddit to ensure compliance before posting or commenting. Use when you need to verify content meets community guidelines or explain subreddit requirements to users.","name":"REDDIT_GET_SUBREDDIT_RULES","parameters":{"properties":{"raw_json":{"default":true,"description":"If True, prevents HTML encoding of special characters in rule descriptions. Recommended to set to True for cleaner text output.","title":"Raw Json","type":"boolean"},"subreddit":{"description":"Name of the subreddit (without 'r/' prefix) for which to retrieve posting rules.","examples":["python","AskReddit","technology"],"title":"Subreddit","type":"string"}},"required":["subreddit"],"title":"GetSubredditRulesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to search subreddits by title and description. Use when you need to find subreddits matching a specific topic or keyword. Returns a paginated listing of subreddits with their details including subscribers, descriptions, and other metadata.","name":"REDDIT_GET_SUBREDDITS_SEARCH","parameters":{"properties":{"after":{"description":"Fullname of a thing - pagination cursor for the next page. Use the 'after' value from the previous response to get the next set of results.","examples":["t5_2qh1i"],"title":"After","type":"string"},"before":{"description":"Fullname of a thing - pagination cursor for the previous page. Use the 'before' value from the previous response to get the previous set of results.","examples":["t5_2qh1i"],"title":"Before","type":"string"},"count":{"description":"A positive integer (default: 0) representing the number of items already seen in previous pages. Used for pagination tracking.","examples":[0,10,25],"minimum":0,"title":"Count","type":"integer"},"limit":{"default":25,"description":"The maximum number of subreddits to return. Default is 25. Maximum allowed value is 100.","examples":[10,25,50,100],"maximum":100,"minimum":1,"title":"Limit","type":"integer"},"q":{"description":"A search query term to search subreddit titles and descriptions. Use specific keywords to find relevant subreddits.","examples":["python","programming","artificial intelligence"],"title":"Q","type":"string"},"show":{"description":"The string 'all' to show all subreddits including those the user might have filtered.","examples":["all"],"title":"Show","type":"string"},"show_users":{"description":"Boolean value to include user results in the search. Set to true to include users matching the search query.","title":"Show Users","type":"boolean"},"sort":{"default":"relevance","description":"Sort order for the search results. 'relevance' sorts by relevance to the query (default). 'activity' sorts by subreddit activity.","enum":["relevance","activity"],"examples":["relevance","activity"],"title":"Sort","type":"string"},"sr_detail":{"description":"Expand subreddits with additional details. Set to true to get more detailed information about each subreddit.","title":"Sr Detail","type":"boolean"}},"required":["q"],"title":"GetSubredditsSearchRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches the list of user flair assignments for a given subreddit. Returns paginated results with user flair details. Returned flair_id values are scoped to the specific subreddit and must not be reused across different subreddits.","name":"REDDIT_GET_USER_FLAIR","parameters":{"properties":{"subreddit":{"description":"Name of the subreddit (e.g., 'pics', 'gaming') for which to retrieve user flair assignments. Do not include 'r/' prefix or URL paths — bare name only.","examples":["learnpython","datascience","announcements"],"title":"Subreddit","type":"string"}},"required":["subreddit"],"title":"GetFlairRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to check whether a username is available for registration on Reddit. Use when you need to verify if a username can be used to create a new account.","name":"REDDIT_GET_USERNAME_AVAILABLE","parameters":{"properties":{"user":{"description":"The username to check for availability. Must be a valid, unused username string. Usernames are case-insensitive and must be between 3-20 characters.","examples":["testuser123","example_username"],"title":"User","type":"string"}},"required":["user"],"title":"GetUsernameAvailableRequest","type":"object"}},"type":"function"},{"function":{"description":"List available link/post flairs for a subreddit (including flair_template_id) so posts can satisfy flair-required validation. Use when you need to discover valid flair IDs before creating a post in a subreddit that requires flair. Note: Reddit may return empty or deny access if the authenticated user cannot set link flair and is not a moderator.","name":"REDDIT_LIST_SUBREDDIT_POST_FLAIRS","parameters":{"properties":{"subreddit":{"description":"The name of the subreddit (without 'r/' prefix) for which to retrieve available post/link flairs.","examples":["learnpython","AskReddit","pics"],"title":"Subreddit","type":"string"}},"required":["subreddit"],"title":"ListSubredditPostFlairsRequest","type":"object"}},"type":"function"},{"function":{"description":"Posts a comment on Reddit, replying to an existing submission (post) or another comment. Fails if the target thread is locked, archived, or restricted — verify thread state beforehand. Rapid successive calls trigger Reddit RATELIMIT errors with explicit cooldown hints (e.g., 'take a break for 9 minutes'); honor the specified wait before retrying. A successful API response does not guarantee public visibility — automod or spam filters may silently remove the comment. Publishes immediately and publicly; confirm target and text before executing.","name":"REDDIT_POST_REDDIT_COMMENT","parameters":{"properties":{"text":{"description":"REQUIRED. The raw Markdown text of the comment to be submitted. This field must be provided and cannot be empty.","examples":["This is an insightful comment!","I agree completely."],"title":"Text","type":"string"},"thing_id":{"description":"REQUIRED. The ID of the parent post (link) or comment, prefixed with 't3_' for a post (e.g., 't3_10omtdx') or 't1_' for a comment (e.g., 't1_h2g9w8l'). This field must be provided.","examples":["t3_10omtdx","t1_h2g9w8l"],"title":"Thing Id","type":"string"}},"required":["thing_id","text"],"title":"PostCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves all comments for a Reddit post given its base-36 article ID. Response is a two-element listings array: post metadata in `listings[0]`; comments in `listings[1].data.children` with text at each `[].data.body` and nested replies under each comment's `replies` field. Replies require recursive traversal to capture full discussion. Large, locked, or archived threads may return truncated trees or `more` placeholders rather than full results. Filter out comments where `body` is `[deleted]` or `[removed]`; use `parent_id` to reconstruct conversation flow. No time-filter parameter — compare `created_utc` against a UTC cutoff to filter by date.","name":"REDDIT_RETRIEVE_POST_COMMENTS","parameters":{"properties":{"article":{"description":"Base-36 ID of the Reddit post (e.g., 'q5u7q5'), typically found in the post's URL and not including the 't3_' prefix.","examples":["q5u7q5","13a9zao"],"minLength":1,"title":"Article","type":"string"}},"required":["article"],"title":"RetrieveCommentsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves posts from a specified, publicly accessible subreddit. Responses nest post data under `data.children[].data`; inspect the structure before parsing. Pagination uses a `data.after` cursor; deduplicate across pages by post `id`. No built-in date filtering; compare `created_utc` (Unix seconds, UTC) client-side. Rate limit: ~1–2 requests/second; back off on HTTP 429.","name":"REDDIT_RETRIEVE_REDDIT_POST","parameters":{"properties":{"max_results":{"default":5,"description":"The maximum number of posts to return. Default is 5. Set to 0 to retrieve the maximum allowed by the Reddit API (100 posts). Valid range: 0-100.","examples":[5,10,0,25],"maximum":100,"minimum":0,"title":"Max Results","type":"integer"},"sort":{"default":"hot","description":"Sort order for posts. Options: 'hot' (default, most active posts), 'new' (newest first), 'top' (highest scoring), 'rising' (trending posts), 'controversial' (most controversial).","enum":["hot","new","top","rising","controversial"],"examples":["hot","new","top"],"title":"Sort","type":"string"},"subreddit":{"description":"The name of the subreddit from which to retrieve posts (e.g., 'popular', 'pics'). Do not include 'r/'. Subreddit names must be 3-21 characters and can only contain letters, numbers, and underscores.","examples":["technology","python","news"],"maxLength":21,"minLength":3,"title":"Subreddit","type":"string"}},"required":["subreddit"],"title":"RetrievePostRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for a single Reddit comment or post using its fullname. Returns only the specified item, not surrounding thread context; use REDDIT_RETRIEVE_POST_COMMENTS for full discussion retrieval. Deleted, removed, or quarantined items may return empty or partial payloads.","name":"REDDIT_RETRIEVE_SPECIFIC_COMMENT","parameters":{"properties":{"id":{"description":"Reddit fullname identifier. Format: type prefix (t1_ for comments, t3_ for posts) followed by a base36 ID. Examples: 't1_abc123', 't3_1abc2de'. Note: Share URL tokens from reddit.com/r/.../s/... links are NOT valid fullnames and cannot be used directly. Note: REDDIT_RETRIEVE_POST_COMMENTS expects the bare base-36 ID without the t3_ prefix, unlike this tool.","examples":["t1_abc123","t3_1abc2de"],"pattern":"^t[1-6]_[a-zA-Z0-9]+$","title":"Id","type":"string"}},"required":["id"],"title":"RetrieveCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Searches Reddit for posts/comments using a query. Results nested under `data.children[i].data` (kind `t3` for posts); a `posts` array may also appear — inspect actual response path. No native time-range filter; compare `created_utc` (Unix epoch, UTC) client-side for recency filtering. Empty `children` is a valid no-results outcome. Key post fields: `score`, `num_comments`, `created_utc`, `permalink`. Rate limit: ~1–2 requests/sec; HTTP 429 indicates throttling.","name":"REDDIT_SEARCH_ACROSS_SUBREDDITS","parameters":{"properties":{"after":{"description":"Pagination cursor to fetch the next page of results. Use the `after` value from the previous response to get subsequent results.","examples":["t3_1abc2de"],"title":"After","type":"string"},"before":{"description":"Pagination cursor to fetch the previous page of results. Use the `before` value from the previous response to get preceding results.","examples":["t3_1abc2de"],"title":"Before","type":"string"},"limit":{"default":5,"description":"The maximum number of search results to return. Default is 5. Maximum allowed value is 100. Paginate beyond the first page using the `after` cursor from `data.after` in the response; deduplicate results across pages by post `id`.","examples":["5","10","25"],"maximum":100,"title":"Limit","type":"integer"},"restrict_sr":{"default":true,"description":"If True (default), confines the search to posts and comments within subreddits. If False, the search scope is broader and may include matching subreddit names or other Reddit entities.","examples":[true,false],"title":"Restrict Sr","type":"boolean"},"search_query":{"description":"The search query string. Supports Reddit search operators: 'title:', 'author:', 'subreddit:', 'url:', 'site:', 'flair:', 'self:yes/no', 'nsfw:yes/no', and boolean operators (AND, OR, NOT). Raw URLs (starting with http:// or https://) are not allowed - use the 'url:' or 'site:' operators instead (e.g., 'url:example.com' to find posts linking to that domain).","examples":["latest AI research","funny cat videos","url:youtube.com","site:imgur.com"],"title":"Search Query","type":"string"},"sort":{"default":"relevance","description":"The criterion for sorting search results. 'relevance' (default) sorts by relevance to the query. 'hot' sorts by trending posts with recent upvotes and activity. 'new' sorts by newest first. 'top' sorts by highest score (typically all-time). 'comments' sorts by the number of comments.","enum":["relevance","hot","new","top","comments"],"examples":["relevance","hot","new","top","comments"],"title":"Sort","type":"string"}},"required":["search_query"],"title":"SearchAcrossSubredditsRequest","type":"object"}},"type":"function"},{"function":{"description":"Enable or disable inbox replies for a submission or comment. Use when you want to control whether you receive inbox notifications for replies to your own posts or comments.","name":"REDDIT_TOGGLE_INBOX_REPLIES","parameters":{"properties":{"id":{"description":"The fullname of a thing created by the user. Must be prefixed with the thing type (e.g., 't3_' for a submission/post, 't1_' for a comment). Example: 't3_abc123' for a post.","examples":["t3_abc123","t1_def456"],"title":"Id","type":"string"},"state":{"description":"Boolean value to enable or disable inbox replies. Set to true to enable receiving inbox notifications when users reply to this thing, or false to disable inbox notifications.","examples":[true,false],"title":"State","type":"boolean"}},"required":["id","state"],"title":"SendRepliesRequest","type":"object"}},"type":"function"}]}}} \ No newline at end of file diff --git a/tests/fixtures/composio_slack.json b/tests/fixtures/composio_slack.json new file mode 100644 index 000000000..21874863d --- /dev/null +++ b/tests/fixtures/composio_slack.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"logs":["composio: 151 tool(s) listed"],"result":{"tools":[{"function":{"description":"Registers new participants added to a Slack call.","name":"SLACK_ADD_CALL_PARTICIPANTS","parameters":{"description":"Request schema for `AddCallParticipants`","properties":{"id":{"description":"ID of the call returned by the add method.","examples":["R0123456789"],"title":"Id","type":"string"},"users":{"description":"The list of users to add as participants in the call. users is a JSON array (formatted as a string) containing information for each user. Each element must include a `slack_id`. For example: `[{\"slack_id\": \"U1H77\"}]` or `[{\"slack_id\": \"U1H77\"}, {\"slack_id\": \"U2ABC123\"}]`.","examples":["[{\"slack_id\": \"U1H77\"}]","[{\"slack_id\": \"U2ABC123\"}]","[{\"slack_id\": \"U1H77\"}, {\"slack_id\": \"U2ABC123\"}]"],"title":"Users","type":"string"}},"required":["id","users"],"title":"AddCallParticipantsRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a custom emoji to a Slack workspace given a unique name and an image URL; subject to workspace emoji limits.","name":"SLACK_ADD_EMOJI","parameters":{"description":"Request schema for `AddEmoji`","properties":{"name":{"description":"The desired name for the new custom emoji. This name will be used to invoke the emoji (e.g., if name is 'partyparrot', it's used as ':partyparrot:'). Colons around the name are not required when providing this field. Must use lower-case letters only.","examples":["partyparrot","approved_stamp","team_logo_small"],"title":"Name","type":"string"},"url":{"description":"The URL of the image file to be used as the custom emoji. The image should be accessible via HTTP/HTTPS and meet Slack's emoji requirements (e.g., size, format). Supported formats typically include PNG, GIF, and JPEG.","examples":["https://example.com/emoji/partyparrot.gif","https://cdn.example.com/images/approved_stamp.png"],"title":"Url","type":"string"}},"required":["name","url"],"title":"AddEmojiRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds an alias for an existing custom emoji in a Slack Enterprise Grid organization.","name":"SLACK_ADD_EMOJI_ALIAS","parameters":{"description":"Request schema for `AddEmojiAlias`","properties":{"alias_for":{"description":"The canonical name of the existing custom emoji (e.g., `original_emoji`).","examples":["party_parrot","approved_stamp"],"title":"Alias For","type":"string"},"name":{"description":"The new alias to be created for the emoji specified in `alias_for` (e.g., `new_emoji_alias`). Colons around the name (e.g., `:my_alias:`) are optional and will be automatically trimmed, along with any leading/trailing whitespace.","examples":["parrot_alias",":approved_alias:"],"title":"Name","type":"string"}},"required":["alias_for","name"],"title":"AddEmojiAliasRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds an Enterprise user to a workspace. Use when you need to assign an existing Enterprise Grid user to a specific workspace with optional guest restrictions.","name":"SLACK_ADD_ENTERPRISE_USER_TO_WORKSPACE","parameters":{"description":"Request model for adding an Enterprise user to a workspace.","properties":{"channel_ids":{"description":"Comma separated values of channel IDs to add user in the new workspace.","examples":["C1234567890,C0987654321","C0123456789"],"title":"Channel Ids","type":"string"},"is_restricted":{"description":"True if user should be added to the workspace as a guest. Guests can access only the channels they are invited to.","title":"Is Restricted","type":"boolean"},"is_ultra_restricted":{"description":"True if user should be added to the workspace as a single-channel guest. Single-channel guests can only access one channel (plus DMs and Huddles).","title":"Is Ultra Restricted","type":"boolean"},"team_id":{"description":"The ID of the workspace (e.g., T1234567890) where the user will be added.","examples":["T0AB0BSTDV5","T1234567890"],"title":"Team Id","type":"string"},"user_id":{"description":"The ID of the user to add to the workspace.","examples":["U0984HARZHQ","U1234567890"],"title":"User Id","type":"string"}},"required":["team_id","user_id"],"title":"AddEnterpriseUserToWorkspaceRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a specified emoji reaction to an existing message in a Slack channel, identified by its timestamp; does not remove or retrieve reactions.","name":"SLACK_ADD_REACTION_TO_AN_ITEM","parameters":{"description":"Request schema for `AddReactionToAnItem`","properties":{"channel":{"description":"ID of the channel where the message to add the reaction to was posted.","examples":["C1234567890","G0987654321"],"title":"Channel","type":"string"},"name":{"description":"Name of the emoji to add as a reaction (e.g., 'thumbsup'). This is the emoji name without colons. For emojis with skin tone modifiers, append '::skin-tone-X' where X is a number from 2 to 6 (e.g., 'wave::skin-tone-3'). The emoji must already exist in the workspace; custom or non-existent emoji names will fail silently.","examples":["thumbsup","grinning","robot_face","wave::skin-tone-3"],"title":"Name","type":"string"},"timestamp":{"description":"Timestamp of the message to which the reaction will be added. This is a unique identifier for the message, typically a string representing a float value like '1234567890.123456'. Must be the exact message timestamp; permalinks or approximate values will not work.","examples":["1234567890.123456","1609459200.000200"],"title":"Timestamp","type":"string"}},"required":["channel","name","timestamp"],"title":"AddReactionToAnItemRequest","type":"object"}},"type":"function"},{"function":{"description":"Adds a reference to an external file (e.g., Google Drive, Dropbox) to Slack for discovery and sharing, requiring a unique `external_id` and an `external_url` accessible by Slack.","name":"SLACK_ADD_REMOTE_FILE","parameters":{"description":"Request schema for adding a remote file to Slack.","properties":{"external_id":{"description":"Unique identifier for the file, defined by the calling application, used for future API references (e.g., updating, deleting).","examples":["file-abc-123-xyz-789","guid-document-42"],"title":"External Id","type":"string"},"external_url":{"description":"Publicly accessible or permissioned URL of the remote file, used by Slack to access its content or metadata.","examples":["https://example.com/path/to/your/file.pdf","https://your-service.com/files/unique-id-123"],"title":"External Url","type":"string"},"filetype":{"description":"File type (e.g., 'pdf', 'docx', 'png') to help Slack display appropriate icons or previews.","examples":["pdf","docx","gdoc","png","txt","gsheet"],"title":"Filetype","type":"string"},"indexable_file_contents":{"description":"Plain text content of the file, indexed by Slack for search.","examples":["This document contains project plans for Q4, focusing on market expansion and new product development.","Meeting notes from Q1 review: Key discussion points included budget allocation, resource management, and upcoming deadlines."],"title":"Indexable File Contents","type":"string"},"preview_image":{"description":"Base64-encoded image (e.g., PNG, JPEG) used as the file's preview in Slack.","examples":["(base64 encoded PNG data of a chart)","(base64 encoded JPEG data of a document cover)"],"title":"Preview Image","type":"string"},"title":{"description":"Title of the remote file to be displayed in Slack.","examples":["Project Proposal Q3.docx","Client Onboarding Checklist.pdf"],"title":"Title","type":"string"}},"required":["title","external_id","external_url"],"title":"AddRemoteFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Stars a channel, file, file comment, or a specific message in Slack.","name":"SLACK_ADD_STAR","parameters":{"description":"Request schema for the `stars.add` API method. Used to add a star to a channel, file, file comment, or a specific message. Exactly one type of item must be targeted per request.","properties":{"channel":{"description":"ID of the channel to star. If starring a specific message, this is the ID of the channel containing the message, and `timestamp` must also be provided.","examples":["C1234567890","G0123456789"],"title":"Channel","type":"string"},"file":{"description":"ID of the file to add a star to.","examples":["F1234567890","F0987654321"],"title":"File","type":"string"},"file_comment":{"description":"ID of the file comment to add a star to.","examples":["Fc1234567890","Fc0987654321"],"title":"File Comment","type":"string"},"timestamp":{"description":"Timestamp of the message to add a star to. This uniquely identifies the message within the specified `channel`. Requires `channel` to also be provided.","examples":["1234567890.123456","1678886400.000100"],"title":"Timestamp","type":"string"}},"title":"AddStarRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to search for public or private channels in an Enterprise organization. Use when you need to find channels by name, type, or other criteria within an Enterprise Grid workspace.","name":"SLACK_ADMIN_CONVERSATIONS_SEARCH","parameters":{"description":"Request model for searching public or private channels in an Enterprise organization.","properties":{"connected_team_ids":{"description":"Comma separated string of encoded team IDs, signifying the external organizations to search through.","examples":["T1234567890","T1234567890,T0987654321"],"title":"Connected Team Ids","type":"string"},"cursor":{"description":"Set cursor to next_cursor returned by the previous call to list items in the next page.","examples":["dXNlcjpVMDYxREk0Nlc="],"title":"Cursor","type":"string"},"limit":{"description":"Maximum number of items to be returned. Must be between 1 - 20 both inclusive. Default is 10.","examples":[10,20],"maximum":20,"minimum":1,"title":"Limit","type":"integer"},"query":{"description":"Name of the channel to query by.","examples":["general","marketing","engineering"],"title":"Query","type":"string"},"search_channel_types":{"description":"The type of channel to include or exclude in the search.","enum":["public","private","private_exclude","im","mpim","ext_shared","org_shared","archived","exclude_archived","multi_workspace","org_wide","external_shared"],"examples":["private","public","private_exclude","archived"],"title":"Search Channel Types","type":"string"},"sort":{"description":"Sort method for channel search results.","enum":["relevant","name","member_count","created"],"examples":["relevant","name"],"title":"SortType","type":"string"},"sort_dir":{"description":"Sort direction for channel search results.","enum":["asc","desc"],"examples":["asc","desc"],"title":"SortDirection","type":"string"},"team_ids":{"description":"Comma separated string of team IDs, signifying the workspaces to search through.","examples":["T1234567890","T1234567890,T0987654321"],"title":"Team Ids","type":"string"},"total_count_only":{"description":"Only return the total_count of channels. Omits channel data and does not require full admin permissions.","examples":[true,false],"title":"Total Count Only","type":"boolean"}},"title":"AdminConversationsSearchRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to check API calling code by testing connectivity and authentication to the Slack API. Use when you need to verify that API credentials are valid and the connection is working properly.","name":"SLACK_API_TEST","parameters":{"description":"Request schema for `SlackApiTest`","properties":{"error":{"description":"Error response to return. Use this parameter to test error handling by simulating various error responses.","examples":["my_error","test_error"],"title":"Error","type":"string"},"foo":{"description":"Example property to return in the response. This can be any arbitrary string value to test echo functionality.","examples":["bar","test_value"],"title":"Foo","type":"string"}},"title":"SlackApiTestRequest","type":"object"}},"type":"function"},{"function":{"description":"Archives a Slack conversation by its ID, rendering it read-only and hidden while retaining history, ideal for cleaning up inactive channels; be aware that some channels (like #general or certain DMs) cannot be archived and this may impact connected integrations.","name":"SLACK_ARCHIVE_CONVERSATION","parameters":{"description":"Request schema for `ArchiveConversation`","properties":{"channel":{"description":"ID of the Slack conversation to archive. This ID uniquely identifies a channel (e.g., public, private).","examples":["C1234567890"],"title":"Channel","type":"string"}},"title":"ArchiveConversationRequest","type":"object"}},"type":"function"},{"function":{"description":"Search across Slack messages, files, channels, and users using Real-time Search API. BEFORE USING: Call SLACK_ASSISTANT_SEARCH_INFO to check workspace capabilities. - If is_ai_search_enabled=true → Use natural language queries (semantic search) - If is_ai_search_enabled=false → Pass disable_semantic_search=true (keyword search) - If SLACK_ASSISTANT_SEARCH_INFO fails or is unavailable → Default to disable_semantic_search=true (safe keyword fallback) Works on ALL Slack workspace tiers: - Free/Pro/Business: keyword search only - Business+/Enterprise with Slack AI: semantic search available Supports filtering by channel type, date range, and content type. Use `content_types` to search messages, files, channels, or users in a single call. Enable `include_context_messages` for surrounding conversation context. If you get a missing_scope error, the user needs to reconnect their Slack account.","name":"SLACK_ASSISTANT_SEARCH_CONTEXT","parameters":{"description":"Request schema for `AssistantSearchContext`","properties":{"action_token":{"description":"Action token from a Slack event payload. Required when using a bot token. Not needed for user tokens.","title":"Action Token","type":"string"},"after":{"description":"Unix timestamp. Only return results from after this date.","examples":[1704153600],"title":"After","type":"integer"},"before":{"description":"Unix timestamp. Only return results from before this date.","examples":[1704240000],"title":"Before","type":"integer"},"channel_types":{"description":"Comma-separated channel types to include: public_channel, private_channel, mpim, im. Defaults to public_channel.","examples":["public_channel","public_channel,private_channel","public_channel,private_channel,mpim,im"],"title":"Channel Types","type":"string"},"content_types":{"description":"Comma-separated content types to search: messages, files, channels, users. Defaults to messages.","examples":["messages","messages,files","messages,files,channels,users"],"title":"Content Types","type":"string"},"context_channel_id":{"description":"Provide channel context for the search. Note: this parameter provides a contextual hint but may not strictly filter results to only this channel. To reliably restrict results to a specific channel, use the 'modifiers' parameter with 'in:channel_name' instead.","examples":["C1234567890"],"title":"Context Channel Id","type":"string"},"cursor":{"description":"Pagination cursor from a previous response's next_cursor field.","examples":["dXNlcjpVMEc5V0ZYTlo="],"title":"Cursor","type":"string"},"disable_semantic_search":{"description":"When true, forces keyword-only search even if the workspace has AI/semantic search available. Use this when SLACK_ASSISTANT_SEARCH_INFO returns is_ai_search_enabled=false, or when you explicitly want keyword matching.","examples":[true,false],"title":"Disable Semantic Search","type":"boolean"},"highlight":{"description":"Highlight matching search terms in the results.","examples":[true,false],"title":"Highlight","type":"boolean"},"include_archived_channels":{"description":"Include results from archived channels.","examples":[true,false],"title":"Include Archived Channels","type":"boolean"},"include_bots":{"description":"Include bot messages in search results.","examples":[true,false],"title":"Include Bots","type":"boolean"},"include_context_messages":{"description":"Include surrounding messages before and after each result for conversational context.","examples":[true,false],"title":"Include Context Messages","type":"boolean"},"include_deleted_users":{"description":"Include deleted users in search results. Defaults to false.","examples":[true,false],"title":"Include Deleted Users","type":"boolean"},"include_message_blocks":{"description":"Return message blocks in the response.","examples":[true,false],"title":"Include Message Blocks","type":"boolean"},"limit":{"description":"Maximum number of results per page. Max 20. Defaults to 20.","examples":[5,10,20],"title":"Limit","type":"integer"},"modifiers":{"description":"Additional search modifiers in 'modifier:value' format. E.g., 'has:pin before:yesterday is:thread'.","examples":["has:pin","has:link is:thread","before:yesterday"],"title":"Modifiers","type":"string"},"query":{"description":"Search query. Supports both keyword search and natural language questions. Natural language queries (starting with what/where/how or ending with ?) trigger semantic search if available on the workspace. Supports OR operator for multiple terms: \"deployment issues with kubernetes OR docker OR terraform\".","examples":["What is project gizmo?","deployment issues with kubernetes OR docker OR terraform","outage OR downtime OR performance issues","quarterly report"],"title":"Query","type":"string"},"sort":{"description":"Sort results by 'score' (relevance) or 'timestamp' (chronological). Defaults to score.","examples":["score","timestamp"],"title":"Sort","type":"string"},"sort_dir":{"description":"Sort direction: 'asc' (ascending) or 'desc' (descending). Defaults to desc.","examples":["asc","desc"],"title":"Sort Dir","type":"string"},"term_clauses":{"description":"List of search term clauses for conjunctive matching. Results must match every clause specified. Each clause is a string with one or more search terms.","examples":[["kubernetes","deployment error"],["budget","Q3"]],"items":{"type":"string"},"title":"Term Clauses","type":"array"}},"required":["query"],"title":"AssistantSearchContextRequest","type":"object"}},"type":"function"},{"function":{"description":"Check if semantic (AI-powered) search is available on the Slack workspace. Returns whether natural language queries will trigger semantic search in assistant.search.context calls.","name":"SLACK_ASSISTANT_SEARCH_INFO","parameters":{"description":"Request schema for `AssistantSearchInfo`","properties":{},"title":"AssistantSearchInfoRequest","type":"object"}},"type":"function"},{"function":{"description":"Closes a Slack direct message (DM) or multi-person direct message (MPDM) channel, removing it from the user's sidebar without deleting history; this action affects only the calling user's view.","name":"SLACK_CLOSE_DM","parameters":{"description":"Request schema for `CloseDm`","properties":{"channel":{"description":"The ID of the direct message or multi-person direct message channel to close. Example: D1234567890 or G0123456789.","examples":["D1234567890","G0123456789"],"title":"Channel","type":"string"}},"required":["channel"],"title":"CloseDmRequest","type":"object"}},"type":"function"},{"function":{"description":"Convert a public Slack channel to private using the Admin API. This is an Enterprise Grid only feature and requires an org-installed user token with admin.conversations:write scope.","name":"SLACK_CONVERT_CHANNEL_TO_PRIVATE","parameters":{"description":"Request schema for converting a public Slack channel to private.","properties":{"channel_id":{"description":"The ID of the public channel to convert to private. Required parameter.","examples":["C1234567890"],"title":"Channel Id","type":"string"},"name":{"description":"Optional name parameter. Only respected when converting an MPIM (multi-person instant message).","examples":["private-team-channel"],"title":"Name","type":"string"}},"required":["channel_id"],"title":"ConvertChannelToPrivateRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a Slack reminder with specified text and time; time accepts Unix timestamps, seconds from now, or natural language (e.g., 'in 15 minutes', 'every Thursday at 2pm').","name":"SLACK_CREATE_A_REMINDER","parameters":{"description":"Request schema for creating a new reminder in Slack.","properties":{"team_id":{"description":"Encoded team id. Required if using an org-level token to specify which workspace the reminder should be created in.","examples":["T1234567890"],"title":"Team Id","type":"string"},"text":{"description":"The textual content of the reminder message.","examples":["Submit weekly report","Follow up with Jane Doe"],"title":"Text","type":"string"},"time":{"description":"Specifies when the reminder should occur. This can be a Unix timestamp (integer, up to five years from now), the number of seconds until the reminder (integer, if within 24 hours, e.g., '300' for 5 minutes), or a natural language description (string, e.g., \"in 15 minutes,\" or \"every Thursday at 2pm\", \"daily\"). For recurring reminders, express the recurrence in this field using natural language (e.g., 'every day at 9am', 'every Monday at 10am'). Natural language is parsed relative to the user's workspace timezone; use Unix timestamps when target timezone is uncertain.","examples":["1735689600","900","in 20 minutes","every Monday at 10am","every day at 9am"],"title":"Time","type":"string"},"user":{"description":"The ID of the user who will receive the reminder (e.g., 'U012AB3CD4E'). If not specified, the reminder will be sent to the user who created it. NOTE: Setting reminders for other users is no longer supported for user tokens - only bot tokens can set reminders for other users.","examples":["U012AB3CD4E","W1234567890"],"title":"User","type":"string"}},"required":["text","time"],"title":"CreateAReminderRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new Slack Canvas with the specified title and optional content.","name":"SLACK_CREATE_CANVAS","parameters":{"properties":{"channel_id":{"description":"Optional channel ID (e.g., 'C1234567890'). If provided, the canvas will be automatically added as a tab in this channel with write permissions.","examples":["C1234567890"],"title":"Channel Id","type":"string"},"document_content":{"additionalProperties":true,"description":"Optional canvas content in Slack's document format. If not provided, creates an empty canvas.","examples":[{"markdown":"# Welcome\n\nThis is a new canvas","type":"markdown"}],"title":"Document Content","type":"object"},"title":{"description":"The title of the canvas to create. If not provided, Slack will generate a default title.","examples":["Project Planning","Team Meeting Notes","Sprint Retrospective"],"maxLength":255,"title":"Title","type":"string"}},"title":"CreateCanvasRequest","type":"object"}},"type":"function"},{"function":{"description":"Initiates a public or private channel-based conversation in a Slack workspace. Immediately creates the channel; invoke only after explicit user confirmation.","name":"SLACK_CREATE_CHANNEL","parameters":{"description":"Request schema for `CreateChannel`","properties":{"is_private":{"description":"Create a private channel instead of a public one","examples":[true],"title":"Is Private","type":"boolean"},"name":{"description":"Name of the public or private channel to create Must be lowercase, unique, and contain no spaces or periods; max 80 characters.","examples":["mychannel"],"title":"Name","type":"string"},"team_id":{"description":"encoded team id to create the channel in, required if org token is used","examples":["T1234567890"],"title":"Team Id","type":"string"}},"required":["name"],"title":"CreateChannelRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new public or private Slack channel with a unique name; the channel can be org-wide, or team-specific if `team_id` is given (required if `org_wide` is false or not provided).","name":"SLACK_CREATE_CHANNEL_BASED_CONVERSATION","parameters":{"description":"Request schema for `CreateChannelBasedConversation`","properties":{"description":{"description":"Optional description for the channel (e.g., 'Discussion about Q4 marketing strategies').","title":"Description","type":"string"},"is_private":{"description":"Set to `true` to make the channel private, or `false` for public.","title":"Is Private","type":"boolean"},"name":{"description":"Name for the new channel. Must be unique, 80 characters or fewer, lowercase, without spaces or periods, and may contain letters, numbers, and hyphens.","examples":["project-alpha","marketing-campaign-q3","team-devs-internal"],"title":"Name","type":"string"},"org_wide":{"description":"Set to `true` to make the channel available org-wide. If `false` or not set, `team_id` is required.","title":"Org Wide","type":"boolean"},"team_id":{"description":"Workspace (team) ID for channel creation (e.g., T123ABCDEFG). Required if `org_wide` is `false` or not set.","examples":["T123ABCDEFG"],"title":"Team Id","type":"string"}},"required":["is_private","name"],"title":"CreateChannelBasedConversationRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to create an Enterprise team in Slack. Use when you need to create a new team (workspace) within an Enterprise Grid organization. Requires admin.teams:write scope.","name":"SLACK_CREATE_ENTERPRISE_TEAM","parameters":{"description":"Request schema for creating an Enterprise team in Slack.","properties":{"team_description":{"description":"Description for the team. Helps users understand the purpose of this team.","examples":["This team is for the softball league coordination."],"title":"Team Description","type":"string"},"team_discoverability":{"description":"Enum for team discoverability options.","enum":["open","closed","invite_only","unlisted"],"title":"TeamDiscoverability","type":"string"},"team_domain":{"description":"Team domain (for example, slacksoftballteam). This will be part of the team's URL.","examples":["slacksoftballteam","myteamdomain"],"title":"Team Domain","type":"string"},"team_name":{"description":"Team name (for example, Slack Softball Team). This is the display name for the team.","examples":["Slack Softball Team","My Team Name"],"title":"Team Name","type":"string"}},"required":["team_domain","team_name"],"title":"CreateEnterpriseTeamRequest","type":"object"}},"type":"function"},{"function":{"description":"Creates a new User Group (often referred to as a subteam) in a Slack workspace.","name":"SLACK_CREATE_USER_GROUP","parameters":{"description":"Request schema for `CreateUserGroup`","properties":{"additional_channels":{"description":"Comma-separated encoded channel IDs for which the User Group can custom add usergroup members to.","examples":["C012AB3CD,C023BC4DE","C034CD5EF"],"title":"Additional Channels","type":"string"},"channels":{"description":"Comma-separated encoded channel IDs for default channels, suggested when mentioning or inviting the group.","examples":["C012AB3CD,C023BC4DE","C034CD5EF"],"title":"Channels","type":"string"},"description":{"description":"Short description for the User Group.","examples":["Manages all customer support inquiries.","Core engineering team members."],"title":"Description","type":"string"},"enable_section":{"description":"Configure this user group to show as a sidebar section for all group members. Only relevant if group has 1 or more default channels added.","title":"Enable Section","type":"boolean"},"handle":{"description":"Unique mention handle. Must be unique across channels, users, and other User Groups. Max 21 chars; lowercase letters, numbers, hyphens, underscores only.","examples":["support-team","devs","project-phoenix-leads"],"title":"Handle","type":"string"},"include_count":{"description":"Include the User Group's user count in the response. Server defaults to `false` if omitted.","title":"Include Count","type":"boolean"},"name":{"description":"Unique name for the User Group. Must be unique among all User Groups in the workspace.","examples":["Customer Support","Core Engineering","Project Phoenix Leads"],"title":"Name","type":"string"},"team_id":{"description":"Encoded team ID where the User Group should be created. Required if using an org token. Will be ignored if the API call is sent using a workspace-level token.","examples":["T1234567890","T0HBCDEFG"],"title":"Team Id","type":"string"}},"required":["name"],"title":"CreateUserGroupRequest","type":"object"}},"type":"function"},{"function":{"description":"Customizes URL previews (unfurling) in a specific Slack message using a URL-encoded JSON in `unfurls` to define custom content or remove existing previews.","name":"SLACK_CUSTOMIZE_URL_UNFURL","parameters":{"description":"Request schema for `CustomizeUrlUnfurl`","properties":{"channel":{"description":"Channel, private group, or DM channel to send message to. Can be an encoded ID, or a name. Must be provided with `ts`, or alternatively provide `unfurl_id` and `source` together.","examples":["C1234567890","general"],"title":"Channel","type":"string"},"metadata":{"description":"JSON object with 'entities' field providing Work Object array. Either `unfurls` or `metadata` is required. Pass as a JSON string.","examples":["{\"entities\": [{\"url\": \"https://example.com\", \"type\": \"article\"}]}"],"title":"Metadata","type":"string"},"source":{"description":"Link source: either 'composer' or 'conversations_history'. Must be provided with `unfurl_id`.","examples":["composer","conversations_history"],"title":"Source","type":"string"},"ts":{"description":"Timestamp of the message to customize URL unfurling for. Must be provided with `channel`, or alternatively provide `unfurl_id` and `source` together.","examples":["1234567890.123456"],"title":"Ts","type":"string"},"unfurl_id":{"description":"Link ID to unfurl. Must be provided with `source`. Alternative to using `channel` and `ts` parameters.","examples":["Uxxxxxx-909b5454-75f8-4ac4-b325-1b40e230bbd8"],"title":"Unfurl Id","type":"string"},"unfurls":{"description":"JSON string mapping URLs to custom unfurl content (Slack attachment format or blocks). Pass as a plain JSON string (not URL-encoded). To remove an existing unfurl, provide an empty object for that URL.","examples":["{\"https://example.com/article\": {\"text\": \"Article Preview\", \"color\": \"#36a64f\"}}"],"title":"Unfurls","type":"string"},"user_auth_blocks":{"description":"JSON array of structured blocks (URL-encoded) sent as ephemeral authentication invitation. Alternative to `user_auth_message` for richer formatting. Used when `user_auth_required` is true.","examples":["[{\"type\": \"section\", \"text\": {\"type\": \"mrkdwn\", \"text\": \"Please authenticate to see previews\"}}]"],"title":"User Auth Blocks","type":"string"},"user_auth_message":{"description":"Ephemeral message text prompting user authentication with your app for domain-specific unfurling. Used when `user_auth_required` is true and authorization is pending.","examples":["Please authenticate with MyApp to see rich previews for example.com."],"title":"User Auth Message","type":"string"},"user_auth_required":{"description":"Set to `true` if user authentication is required to unfurl links for a domain, enabling an authentication flow using `user_auth_url` and `user_auth_message`.","examples":[true,false],"title":"User Auth Required","type":"boolean"},"user_auth_url":{"description":"URL-encoded custom URL for user authentication with your app to enable unfurling. Used when `user_auth_required` is true.","examples":["https://yourapp.com/slack/auth?user_id=U123&channel_id=C123"],"title":"User Auth Url","type":"string"}},"title":"CustomizeUrlUnfurlRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a Slack Canvas permanently and irreversibly. Always confirm with the user before calling this tool.","name":"SLACK_DELETE_CANVAS","parameters":{"properties":{"canvas_id":{"description":"The unique identifier of the canvas to delete","examples":["F01234ABCDE"],"title":"Canvas Id","type":"string"}},"required":["canvas_id"],"title":"DeleteCanvasRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently and irreversibly deletes a specified public or private channel, including all its messages and files, within a Slack Enterprise Grid organization.","name":"SLACK_DELETE_CHANNEL","parameters":{"description":"Request to delete a public or private channel.","properties":{"channel_id":{"description":"ID of the channel to be permanently deleted. This channel can be public or private.","examples":["C0123456789"],"title":"Channel Id","type":"string"}},"required":["channel_id"],"title":"DeleteChannelRequest","type":"object"}},"type":"function"},{"function":{"description":"Permanently deletes an existing file from a Slack workspace using its unique file ID; this action is irreversible and also removes any associated comments or shares.","name":"SLACK_DELETE_FILE","parameters":{"description":"Request schema for `DeleteFile`","properties":{"file":{"description":"ID of the file to delete. Typically obtained when a file is uploaded or listed.","examples":["F2147483002","F012345AB67"],"title":"File","type":"string"},"team_id":{"description":"The team/workspace ID where the file exists. Required for Enterprise Grid org-level tokens.","examples":["T1234567890"],"title":"Team Id","type":"string"}},"required":["file"],"title":"DeleteFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a specific comment from a file in Slack; this action is irreversible.","name":"SLACK_DELETE_FILE_COMMENT","parameters":{"description":"Request schema for `DeleteFileComment`","properties":{"file":{"description":"ID of the file to delete a comment from. The file ID can be obtained using the `files.info` method or when a file is shared.","examples":["F1234567890"],"title":"File","type":"string"},"id":{"description":"ID of the comment to delete. This can be obtained when the comment is created or by listing file comments.","examples":["Fc1234567890"],"title":"Id","type":"string"}},"required":["file","id"],"title":"DeleteFileCommentRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes an existing Slack reminder, typically when it is no longer relevant or a task is completed; this operation is irreversible.","name":"SLACK_DELETE_REMINDER","parameters":{"description":"Request schema for deleting a Slack reminder.","properties":{"reminder":{"description":"The unique identifier of the reminder to be deleted. This ID is obtained when a reminder is created or listed.","examples":["Rm1234567890"],"title":"Reminder","type":"string"},"team_id":{"description":"Encoded team id, required if org token is used.","examples":["T1234567890"],"title":"Team Id","type":"string"}},"required":["reminder"],"title":"DeleteReminderRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a message, identified by its channel ID and timestamp, from a Slack channel, private group, or direct message conversation; the authenticated user or bot must be the original poster.","name":"SLACK_DELETES_A_MESSAGE_FROM_A_CHAT","parameters":{"description":"Request schema for `DeletesAMessageFromAChat`","properties":{"as_user":{"description":"Legacy parameter for classic Slack apps. Pass true to delete the message as the authed user. Bot tokens can only delete messages posted by that bot. This parameter is primarily for legacy apps and is generally not needed with modern bot tokens.","title":"As User","type":"boolean"},"channel":{"description":"The ID of the channel, private group, or direct message conversation containing the message to be deleted.","examples":["C1234567890","G0987654321","D060123ABC"],"title":"Channel","type":"string"},"ts":{"description":"Timestamp of the message to be deleted. Must be the exact Slack message timestamp string with fractional precision, e.g., '1234567890.123456'. Thread replies use their own `ts`; ephemeral messages and certain app-posted messages cannot be deleted via this method even with a valid timestamp.","examples":["1234567890.123456","1609459200.000000"],"title":"Ts","type":"string"}},"title":"DeletesAMessageFromAChatRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes a pending, unsent scheduled message from the specified Slack channel, identified by its `scheduled_message_id`.","name":"SLACK_DELETE_SCHEDULED_MESSAGE","parameters":{"description":"Request schema for `DeleteScheduledMessage`","properties":{"as_user":{"description":"Pass true to delete the message as the authed user with chat:write:user scope. Bot users in this context are considered authed users. If not provided, defaults to false.","examples":[true,false],"title":"As User","type":"boolean"},"channel":{"description":"ID of the channel, private group, or DM conversation where the message is scheduled.","examples":["C1234567890","G0123456789","D0123456789"],"title":"Channel","type":"string"},"scheduled_message_id":{"description":"Unique ID (`scheduled_message_id`) of the message to be deleted; obtained from `chat.scheduleMessage` response.","examples":["Q123ABCDEF456","SM0123456789"],"title":"Scheduled Message Id","type":"string"}},"required":["channel","scheduled_message_id"],"title":"DeleteScheduledMessageRequest","type":"object"}},"type":"function"},{"function":{"description":"Deletes the Slack profile photo for the user identified by the token, reverting them to the default avatar; this action is irreversible and succeeds even if no custom photo was set.","name":"SLACK_DELETE_USER_PROFILE_PHOTO","parameters":{"description":"Input for deleting a user's profile photo.\n\nNo parameters are required as the authenticated user is determined by the\nAuthorization token passed in the request headers.","properties":{},"title":"DeleteUserProfilePhotoRequest","type":"object"}},"type":"function"},{"function":{"description":"Disables a specified, currently enabled Slack User Group by its unique ID, effectively archiving it by setting its 'date_delete' timestamp; the group is not permanently deleted and can be re-enabled.","name":"SLACK_DISABLE_USER_GROUP","parameters":{"description":"Request schema for `DisableUserGroup`","properties":{"include_count":{"description":"If true, include the number of users in the User Group in the response.","examples":["true","false"],"title":"Include Count","type":"boolean"},"team_id":{"description":"Encoded team ID where the User Group exists. Required if using an org-level token.","examples":["T1234567890","T0984H91R2N"],"title":"Team Id","type":"string"},"usergroup":{"description":"Unique encoded ID of the User Group to disable.","examples":["S0123ABCDEF","S0604QSJC"],"title":"Usergroup","type":"string"}},"required":["usergroup"],"title":"DisableUserGroupRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to download Slack file content and convert it to a publicly accessible URL. Use when you need to retrieve and download files that have been shared in Slack channels or conversations.","name":"SLACK_DOWNLOAD_SLACK_FILE","parameters":{"description":"Request model for downloading a Slack file.","properties":{"count":{"description":"Number of comments to retrieve per page. Used for comment pagination. Slack's default is 100 if not provided.","examples":[20,100],"title":"Count","type":"integer"},"cursor":{"description":"Pagination cursor for retrieving comments. Set to `next_cursor` from a previous response's `response_metadata` to fetch the next page of comments. Essential for navigating through large sets of comments.","examples":["dXNlcjpVMDYxRkExNDIK","bmV4dF90czoxNTEyMDg2NDE1MDAwOTc2"],"title":"Cursor","type":"string"},"file":{"description":"ID of the file to download. This is a required field. File IDs start with 'F' followed by alphanumeric characters (e.g., 'F123ABCDEF0').","examples":["F123ABCDEF0","F987ZYXWVU6"],"title":"File","type":"string"},"limit":{"description":"The maximum number of comments to retrieve. This is an upper limit, not a guarantee of how many will be returned. Primarily used for comment pagination.","examples":[10,50],"title":"Limit","type":"integer"},"page":{"description":"Page number of comment results to retrieve. Used for comment pagination. Slack's default is 1 if not provided. `cursor`-based pagination is generally preferred.","examples":[1,3],"title":"Page","type":"integer"}},"required":["file"],"title":"DownloadSlackFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Edits a Slack Canvas with granular control over content placement. Supports replace, insert (before/after/start/end) operations for flexible content management.","name":"SLACK_EDIT_CANVAS","parameters":{"properties":{"canvas_id":{"description":"The unique identifier of the canvas to edit","examples":["F01234ABCDE"],"title":"Canvas Id","type":"string"},"document_content":{"additionalProperties":true,"description":"The content to add/replace in Slack's document format. Required for all operations except 'delete' and 'rename'. Use canvases.sections.lookup to find section IDs for targeted operations.","examples":[{"markdown":"# New Content\n\nContent here","type":"markdown"}],"title":"Document Content","type":"object"},"operation":{"default":"replace","description":"Type of edit operation: 'replace' (replaces entire canvas or specific section if section_id provided), 'insert_after' (inserts content after section_id), 'insert_before' (inserts content before section_id), 'insert_at_start' (prepends content to beginning), 'insert_at_end' (appends content to end), 'delete' (deletes specific section by section_id), 'rename' (renames canvas title using title_content)","enum":["replace","insert_after","insert_before","insert_at_start","insert_at_end","delete","rename"],"title":"Operation","type":"string"},"section_id":{"description":"Section ID for targeted operations. Required for: 'insert_after', 'insert_before', 'delete'. Optional for: 'replace' (if omitted, replaces entire canvas). Not used for: 'insert_at_start', 'insert_at_end'. Use canvases.sections.lookup method to get section IDs from existing canvas.","examples":["temp:C:VXX8e648e6984e441c6aa8c61173","section-abc-123"],"title":"Section Id","type":"string"},"title_content":{"additionalProperties":true,"description":"The new title for the canvas in markdown format. Required only for 'rename' operation. Supports markdown format including emojis (e.g., ':white_check_mark:').","examples":[{"markdown":":rocket: Project Roadmap 2024","type":"markdown"}],"title":"Title Content","type":"object"}},"required":["canvas_id"],"title":"EditCanvasRequest","type":"object"}},"type":"function"},{"function":{"description":"Enables public sharing for an existing Slack file by generating a publicly accessible URL; this action does not create new files. Once enabled, the file is accessible to anyone with the URL — verify intent before sharing sensitive or confidential files.","name":"SLACK_ENABLE_PUBLIC_SHARING_OF_A_FILE","parameters":{"description":"Request schema for `EnablePublicSharingOfAFile`","properties":{"file":{"description":"The ID of the file to be shared publicly.","examples":["F0123456789"],"title":"File","type":"string"}},"required":["file"],"title":"EnablePublicSharingOfAFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Enables a disabled User Group in Slack using its ID, reactivating it for mentions and permissions; this action only changes the enabled status and cannot create new groups or modify other properties.","name":"SLACK_ENABLE_USER_GROUP","parameters":{"description":"Request schema for `EnableUserGroup`","properties":{"include_count":{"description":"If true, includes the count of users in the User Group in the response.","examples":["true","false"],"title":"Include Count","type":"boolean"},"team_id":{"description":"Encoded team id where the user group is, required if org token is used. Ignored for workspace-level tokens.","examples":["T1234567890"],"title":"Team Id","type":"string"},"usergroup":{"description":"The unique encoded ID of the User Group to enable. This ID typically starts with 'S'.","examples":["S0604QSJC"],"title":"Usergroup","type":"string"}},"required":["usergroup"],"title":"EnableUserGroupRequest","type":"object"}},"type":"function"},{"function":{"description":"Ends an ongoing Slack call, identified by its ID (obtained from `calls.add`), optionally specifying the call's duration.","name":"SLACK_END_CALL","parameters":{"description":"Request schema for `EndCall`","properties":{"duration":{"description":"Duration of the call in seconds.","examples":["600","3600"],"title":"Duration","type":"integer"},"id":{"description":"Unique identifier of the call to be ended, obtained from the `calls.add` method.","examples":["R0123456789"],"title":"Id","type":"string"}},"required":["id"],"title":"EndCallRequest","type":"object"}},"type":"function"},{"function":{"description":"Ends the authenticated user's current Do Not Disturb (DND) session in Slack, affecting only DND status and making them available; if DND is not active, Slack acknowledges the request without changing status.","name":"SLACK_END_DND","parameters":{"description":"Request schema for `EndDnd`","properties":{},"title":"EndDndRequest","type":"object"}},"type":"function"},{"function":{"description":"Ends the current user's snooze mode immediately.","name":"SLACK_END_SNOOZE","parameters":{"description":"Request schema for `EndSnooze`","properties":{},"title":"EndSnoozeRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches a chronological list of messages and events from a specified Slack conversation, accessible by the authenticated user/bot, with options for pagination and time range filtering. IMPORTANT LIMITATION: This action only returns messages from the main channel timeline. Threaded replies are NOT returned by this endpoint. To retrieve threaded replies, use the SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION action (conversations.replies API) instead. The oldest/latest timestamp filters work reliably for filtering the main channel timeline, but cannot be used to retrieve individual threaded replies - even if you know the exact reply timestamp, setting oldest=latest to that timestamp will return an empty messages array. To get threaded replies: 1. Use this action to get parent messages (which include thread_ts, reply_count, latest_reply fields) 2. Use SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION with the parent's thread_ts to fetch all replies in that thread","name":"SLACK_FETCH_CONVERSATION_HISTORY","parameters":{"description":"Request schema for fetching conversation history from Slack.","properties":{"channel":{"description":"The ID of the public channel, private channel, direct message, or multi-person direct message to fetch history from.","examples":["C1234567890","G0123456789","D0123456789"],"title":"Channel","type":"string"},"cursor":{"description":"Pagination cursor from `next_cursor` of a previous response to fetch subsequent pages. See Slack's pagination documentation for details.","examples":["dXNlcjpVMDYxTkZUVDA="],"title":"Cursor","type":"string"},"include_all_metadata":{"description":"Return all metadata associated with messages in the conversation history. When true, includes additional metadata fields that may be present on messages.","examples":[true],"title":"Include All Metadata","type":"boolean"},"inclusive":{"description":"When true, includes messages at the exact 'oldest' or 'latest' boundary timestamps in results. When false (default), excludes boundary messages. Only applies when 'oldest' or 'latest' is specified.","examples":[true,false],"title":"Inclusive","type":"boolean"},"latest":{"description":"End of the time range of messages to include in results. Accepts a Unix timestamp or a Slack timestamp (e.g., '1234567890.000000'). NOTE: This filter only applies to main channel messages, not threaded replies. Use SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION to retrieve replies.","examples":["1609459200.000000"],"title":"Latest","type":"string"},"limit":{"description":"Maximum number of messages to return (1-1000). The action automatically paginates through API requests to fetch the requested number of messages. Note: Per-request API limits vary by app type (Marketplace/internal apps: up to 999 per request; non-Marketplace apps: 15 per request as of May 2025). Recommended: 200 or fewer for optimal performance.","examples":["100","200"],"title":"Limit","type":"integer"},"oldest":{"description":"Start of the time range of messages to include in results. Accepts a Unix timestamp or a Slack timestamp (e.g., '1234567890.000000'). NOTE: This filter only applies to main channel messages, not threaded replies. Use SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION to retrieve replies.","examples":["1609372800.000000"],"title":"Oldest","type":"string"}},"required":["channel"],"title":"FetchConversationHistoryRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches reactions for a Slack message, file, or file comment. Exactly one identifier path must be provided: `channel`+`timestamp`, `file`, or `file_comment`. Mixing identifiers (e.g., providing both `channel`+`timestamp` and `file`) causes errors. If the response omits the `reactions` field, the item has zero reactions.","name":"SLACK_FETCH_ITEM_REACTIONS","parameters":{"description":"Request schema for `FetchItemReactions` action. It specifies the item (message, file, or file comment) for which to retrieve reactions.","properties":{"channel":{"description":"Channel ID. Required if `timestamp` is provided and no file or file comment ID is given.","examples":["C1234567890","C061F7XAZ"],"title":"Channel","type":"string"},"file":{"description":"File ID. Use instead of channel/timestamp or file comment ID.","examples":["F1234567890","F2147483002"],"title":"File","type":"string"},"file_comment":{"description":"File comment ID. Use instead of channel/timestamp or file ID.","examples":["Fc1234567890","Fc789123456"],"title":"File Comment","type":"string"},"full":{"description":"If true, returns the complete list of users for each reaction.","title":"Full","type":"boolean"},"team_id":{"description":"Required if using an org-level token. The team/workspace ID where the item exists. Ignored if using a workspace-level token.","examples":["T0984H91R2N","T1234567890"],"title":"Team Id","type":"string"},"timestamp":{"description":"Message timestamp (e.g., '1234567890.123456'). Required if `channel` is provided and no file or file comment ID is given. Thread reply timestamps are tracked separately from the parent message; use the reply's own timestamp to fetch its reactions.","examples":["1234567890.123456","1629876543.000100"],"title":"Timestamp","type":"string"}},"title":"FetchItemReactionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves replies to a specific parent message in a Slack conversation, using the channel ID and the parent message's timestamp (`ts`). Note: The parent message in the response contains metadata (reply_count, reply_users, latest_reply) that indicates expected thread activity. If the returned messages array contains fewer replies than reply_count indicates, check: (1) has_more=true means pagination is needed, (2) recently posted replies may have timing delays, (3) some replies may be filtered by permissions or deleted. The composio_execution_message field will warn about any detected mismatches.","name":"SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION","parameters":{"description":"Request schema for `FetchMessageThreadFromAConversation`","properties":{"channel":{"description":"ID of the conversation (channel, direct message, etc.) to fetch the thread from. Must be a channel ID, not a channel name. Token must have membership in private channels or DMs, otherwise returns empty results or `not_in_channel`/`channel_not_found`.","examples":["C0123456789"],"title":"Channel","type":"string"},"cursor":{"description":"Pagination cursor from `response_metadata.next_cursor` of a previous response to get subsequent pages. If omitted, fetches the first page.","examples":["dXNlcjpVMEc5V0ZYTlo="],"title":"Cursor","type":"string"},"include_all_metadata":{"description":"Return all metadata associated with messages in the thread. When true, includes additional metadata fields that may be present on messages.","examples":[true],"title":"Include All Metadata","type":"boolean"},"inclusive":{"description":"Whether to include messages with `latest` or `oldest` timestamps in results. Effective only if `latest` or `oldest` is specified.","examples":[true],"title":"Inclusive","type":"boolean"},"latest":{"description":"Latest message timestamp in the time range to include results.","examples":["1678886400.000000"],"title":"Latest","type":"string"},"limit":{"description":"Maximum number of messages to return. Fewer may be returned even if more are available.","examples":[100],"title":"Limit","type":"integer"},"oldest":{"description":"Oldest message timestamp in the time range to include results. Must be a UTC-based Slack ts string; incorrect timezone conversion or rounding can produce empty result windows.","examples":["1678836000.000000"],"title":"Oldest","type":"string"},"team_id":{"description":"Required for org-wide apps: the workspace ID to use for this request. If using a workspace-level token, this parameter is optional and will be ignored.","examples":["T1234567890"],"title":"Team Id","type":"string"},"ts":{"description":"Timestamp of the parent message in the thread. Must be an existing message. If no replies, only the parent message itself is returned. Must be the exact full timestamp string of the root/parent message — not a reply's ts, a truncated value, a permalink, or an integer; these silently return wrong results.","examples":["1234567890.123456"],"title":"Ts","type":"string"}},"title":"FetchMessageThreadFromAConversationRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches comprehensive metadata about the current Slack team, or a specified team if the provided ID is accessible.","name":"SLACK_FETCH_TEAM_INFO","parameters":{"description":"Request schema for `FetchTeamInfo`","properties":{"domain":{"description":"Query by domain instead of team (only when team is null). This only works for domains in the same enterprise as the querying team token. This also expects the domain to belong to a team and not the enterprise itself.","examples":["myworkspace","company-team"],"title":"Domain","type":"string"},"team":{"description":"The ID of the team to retrieve information for. If omitted, information for the current team (associated with the authentication token) is returned. The token must have permissions to view the specified team, especially for teams accessible via external shared channels.","examples":["T12345678","E87654321"],"title":"Team","type":"string"}},"title":"FetchTeamInfoRequest","type":"object"}},"type":"function"},{"function":{"description":"Find channels in a Slack workspace by any criteria - name, topic, purpose, or description. Returns channel IDs (C*/G* prefixed) required by most Slack tools — always resolve names to IDs here before passing to other tools. NOTE: This action searches channels and conversations visible to the authenticated user. Empty results may indicate: - No channels match the search query in name, topic, or purpose - The target private channel or DM is not accessible to the authenticated user because they are not a member - The connection lacks required read scopes (channels:read, groups:read, im:read, mpim:read). If empty, retry with exact_match=false or exclude_archived=false to avoid false negatives. In large workspaces, paginate using next_cursor to avoid missing matches. Check 'composio_execution_message' and 'total_channels_searched' in the response for details.","name":"SLACK_FIND_CHANNELS","parameters":{"description":"Request schema for finding Slack channels by any criteria (name, topic, purpose, etc.).","properties":{"exact_match":{"default":false,"description":"When true, only return channels whose name exactly matches the query (case-insensitive). Also matches against previous channel names and the 'general' flag. When false, returns partial matches across name, topic, and purpose. Defaults to false.","examples":[true,false],"title":"Exact Match","type":"boolean"},"exclude_archived":{"default":true,"description":"Exclude archived channels from search results. Defaults to true.","examples":[true,false],"title":"Exclude Archived","type":"boolean"},"limit":{"default":50,"description":"Maximum number of channels to return (1 to 999). Defaults to 50. Slack recommends no more than 200 results at a time for optimal performance.","examples":[10,50,100,200,500],"title":"Limit","type":"integer"},"member_only":{"default":false,"description":"Only return channels the user is a member of. Defaults to false.","examples":[true,false],"title":"Member Only","type":"boolean"},"query":{"description":"Search query to find channels. Searches across channel name, topic, purpose, and description (case-insensitive partial matching). Leading '#' prefix is automatically stripped.","examples":["general","#general","marketing","dev","announcements","project"],"title":"Query","type":"string"},"team_id":{"description":"The ID of the workspace to list channels from. Required when using an org-level token to specify which workspace to retrieve channels from. This field is ignored when using a workspace-level token.","examples":["T1234567890","T9876543210"],"title":"Team Id","type":"string"},"types":{"default":"public_channel,private_channel","description":"Comma-separated list of channel types to include: `public_channel`, `private_channel`, `mpim` (multi-person direct message), `im` (direct message). Defaults to public and private channels.","examples":["public_channel","private_channel","public_channel,private_channel"],"title":"Types","type":"string"}},"required":["query"],"title":"FindChannelsRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use FindUsers instead. Retrieves the Slack user object for an active user by their registered email address; requires the users:read.email OAuth scope. Fails with 'users_not_found' if the email is unregistered, the user is inactive, the account is a guest, or the email is hidden by workspace privacy settings.","name":"SLACK_FIND_USER_BY_EMAIL_ADDRESS","parameters":{"description":"Request schema for `FindUserByEmailAddress`","properties":{"email":{"description":"The email address of the user to look up.","examples":["sally.doe@example.com","johndoe@workplace.org"],"title":"Email","type":"string"}},"required":["email"],"title":"FindUserByEmailAddressRequest","type":"object"}},"type":"function"},{"function":{"description":"Find users in a Slack workspace by any criteria - email, name, display name, or other text. Includes optimized email lookup for exact email matches. Zero results may reflect email visibility restrictions or workspace policies, not global absence. Repeated calls may trigger HTTP 429; honor the Retry-After header.","name":"SLACK_FIND_USERS","parameters":{"description":"Request schema for finding Slack users by any criteria (email, name, etc.).","properties":{"email":{"description":"Email address to search for. This is a convenience parameter that automatically performs an email-based search. Either email or search_query parameter is required.","examples":["john.doe@company.com","jane@example.com"],"title":"Email","type":"string"},"exact_match":{"default":false,"description":"When true, only returns users with exact matches on name, display name, real name, first name, last name, or email fields (case-insensitive). For email queries, uses Slack's dedicated email lookup endpoint. When false, allows partial/substring matching. Defaults to false.","examples":[true,false],"title":"Exact Match","type":"boolean"},"include_bots":{"default":false,"description":"Include bot users in search results. Defaults to false.","examples":[true,false],"title":"Include Bots","type":"boolean"},"include_deleted":{"default":false,"description":"Include deleted/deactivated users in search results. Defaults to false.","examples":[true,false],"title":"Include Deleted","type":"boolean"},"include_locale":{"description":"Include the `locale` field for each user. Defaults to `false`.","examples":[true,false],"title":"Include Locale","type":"boolean"},"include_restricted":{"default":true,"description":"Include restricted (guest) users in search results. Defaults to true.","examples":[true,false],"title":"Include Restricted","type":"boolean"},"limit":{"default":50,"description":"Maximum number of users to return (1 to 1000). Slack recommends no more than 200 for optimal performance. Defaults to 50. Large workspaces may require pagination or repeated queries to cover all users.","examples":[10,25,100,200],"title":"Limit","type":"integer"},"search_query":{"description":"Search query to find users. Can be a Slack user ID (e.g., 'U012ABCDEF'), email address, or name. For user IDs (starting with 'U' or 'W'), uses Slack's users.info API directly. For email addresses with exact_match=true, uses Slack's email lookup endpoint. For other queries, searches across name, display name, real name, email, first name, last name, and status text (case-insensitive partial matching). Either search_query (or 'query' as alias), or email parameter is required. Name-based queries can return multiple matches — verify exactly one user ID before passing to downstream tools like SLACK_OPEN_DM or SLACK_SEND_MESSAGE; disambiguate using email or real_name fields.","examples":["U012ABCDEF","john","john.doe@company.com","john doe","smith"],"title":"Search Query","type":"string"},"team_id":{"description":"The ID of the Slack workspace (e.g., 'T123456789'). Required when using an org-level token. For workspace-level tokens, this is optional and will be ignored.","examples":["T123456789","T0984H91R2N"],"title":"Team Id","type":"string"}},"title":"FindUsersRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use SLACK_TEST_AUTH instead. Preflight a Slack token by calling auth.test and returning the token's currently granted OAuth scopes (from response headers) to detect missing permissions before attempting admin actions. Use when you need to verify token capabilities or check for specific scopes before making API calls that require elevated permissions.","name":"SLACK_GET_APP_PERMISSION_SCOPES","parameters":{"description":"Request schema for `GetAppPermissionScopes`","properties":{"required_scopes":{"description":"Optional list of OAuth scopes to check against the token's granted scopes. If provided, the action will compute and return missing_scopes.","examples":[["admin.users:write","channels:read"],["chat:write","users:read"]],"items":{"type":"string"},"title":"Required Scopes","type":"array"}},"title":"GetAppPermissionScopesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve information about action types available in the Slack Audit Logs API. Use when you need to know which action types can be used to filter audit logs or understand the categories of auditable actions in Slack.","name":"SLACK_GET_AUDIT_ACTION_TYPES","parameters":{"description":"Request schema for retrieving Slack Audit action types.\n\nThis endpoint requires no parameters.","properties":{},"title":"GetAuditActionTypesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve object schema information from the Slack Audit Logs API. Use when you need to understand the types of objects returned by audit log endpoints. Returns a list of all object types with descriptions.","name":"SLACK_GET_AUDIT_SCHEMAS","parameters":{"description":"Request schema for GetAuditSchemas - no parameters required.","properties":{},"title":"GetAuditSchemasRequest","type":"object"}},"type":"function"},{"function":{"description":"Fetches information for a specified, existing Slack bot user; will not work for regular user accounts or other integration types.","name":"SLACK_GET_BOT_USER","parameters":{"description":"Request schema for `GetBotUser`","properties":{"bot":{"description":"The ID of the bot user to retrieve information for. This typically starts with 'B'.","examples":["B0123456789"],"title":"Bot","type":"string"},"team_id":{"description":"The ID of the workspace/team. Required when using an org-level token. This typically starts with 'T'.","examples":["T1234567890"],"title":"Team Id","type":"string"}},"title":"GetBotUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a point-in-time snapshot of a specific Slack call's information.","name":"SLACK_GET_CALL_INFO","parameters":{"description":"Request model for retrieving information about a specific Slack call.","properties":{"id":{"description":"Unique identifier of the Slack call for which to retrieve information. This ID is typically returned when a call is initiated (e.g., by the `calls.add` method).","examples":["R1234567890"],"title":"Id","type":"string"}},"required":["id"],"title":"GetCallInfoRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use SLACK_RETRIEVE_DETAILED_INFORMATION_ABOUT_A_FILE instead. Retrieves a specific Slack Canvas by its ID, including its content and metadata.","name":"SLACK_GET_CANVAS","parameters":{"properties":{"canvas_id":{"description":"The unique identifier of the canvas to retrieve The app must have access to the canvas; private or restricted canvases are not retrievable even with a valid ID.","examples":["F01234ABCDE"],"title":"Canvas Id","type":"string"},"count":{"description":"Maximum number of comments to return per page (1-1000). Controls pagination of the comments field in the response.","maximum":1000,"minimum":1,"title":"Count","type":"integer"},"cursor":{"description":"Cursor for pagination of comments. Use the next_cursor value from response_metadata to retrieve the next page. This is the preferred pagination method over page parameter.","title":"Cursor","type":"string"},"limit":{"description":"Maximum number of comments to return (alternative to count parameter). Recommended to use 200 or less for cursor-based pagination.","maximum":1000,"minimum":1,"title":"Limit","type":"integer"},"page":{"description":"Page number for comment pagination (1-based, max 100). Works with count parameter.","maximum":100,"minimum":1,"title":"Page","type":"integer"}},"required":["canvas_id"],"title":"GetCanvasRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves conversation preferences (e.g., who can post, who can thread) for a specified channel, primarily for use within Slack Enterprise Grid environments.","name":"SLACK_GET_CHANNEL_CONVERSATION_PREFERENCES","parameters":{"description":"Request to retrieve conversation preferences for a Slack channel.","properties":{"channel_id":{"description":"Identifier of the channel for which to retrieve conversation preferences.","examples":["C0123456789"],"title":"Channel Id","type":"string"}},"required":["channel_id"],"title":"GetChannelConversationPreferencesRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed information for an existing Slack reminder specified by its ID; this is a read-only operation.","name":"SLACK_GET_REMINDER","parameters":{"description":"Request schema for `GetReminder` action. Specifies the reminder to be retrieved.","properties":{"reminder":{"description":"The unique identifier of the reminder to retrieve information for. This ID typically starts with 'Rm'.","examples":["Rm12345678"],"title":"Reminder","type":"string"},"team_id":{"description":"Encoded team id. Required if org token is passed.","examples":["T1234567890"],"title":"Team Id","type":"string"}},"required":["reminder"],"title":"GetReminderRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieve information about a remote file added to Slack via the files.remote API. Does not work for standard Slack-hosted file uploads.","name":"SLACK_GET_REMOTE_FILE","parameters":{"description":"Request schema for `GetRemoteFile`","properties":{"external_id":{"description":"Creator defined GUID for the file.","examples":["123456"],"title":"External Id","type":"string"},"file":{"description":"Specify a file by providing its ID.","examples":["F2147483862"],"title":"File","type":"string"}},"title":"GetRemoteFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves all profile field definitions for a Slack team, optionally filtered by visibility, to understand the team's profile structure.","name":"SLACK_GET_TEAM_PROFILE","parameters":{"description":"Request schema to fetch team profile settings.","properties":{"team_id":{"description":"The team_id is only relevant when using an org-level token. This field will be ignored if the API call is sent using a workspace-level token.","examples":["T0984HGHPJ6"],"title":"Team Id","type":"string"},"visibility":{"description":"Enum for visibility filter values.","enum":["all","visible","hidden"],"examples":["all","visible","hidden"],"title":"VisibilityFilter","type":"string"}},"title":"GetTeamProfileRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a user's current Do Not Disturb status.","name":"SLACK_GET_USER_DND_STATUS","parameters":{"description":"Request schema for `GetUserDndStatus`","properties":{"team_id":{"description":"The workspace ID (team_id) to fetch DND status from. Required when using an org-level token in Enterprise Grid organizations.","examples":["T1234567890"],"title":"Team Id","type":"string"},"users":{"description":"Comma-separated list of users to fetch Do Not Disturb status for","examples":["U1234,U5678"],"title":"Users","type":"string"}},"required":["users"],"title":"GetUserDndStatusRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a Slack user's current real-time presence (e.g., 'active', 'away') to determine their availability, noting this action does not provide historical data or status reasons.","name":"SLACK_GET_USER_PRESENCE","parameters":{"description":"Request schema for `GetUserPresence`","properties":{"user":{"description":"The ID of the user to query for presence information. This is a string identifier, typically starting with 'U' or 'W' (e.g., 'U123ABC456'). If not provided, presence information for the authenticated user will be returned.","examples":["U012A3CDE","W012A3CDE"],"title":"User","type":"string"}},"title":"GetUserPresenceRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to get all workspaces a channel is connected to within an Enterprise org. Use when you need to determine which workspaces have access to a specific public or private channel in an Enterprise Grid organization.","name":"SLACK_GET_WORKSPACE_CONNECTIONS_FOR_CHANNEL","parameters":{"description":"Request model for getting all workspaces connected to a channel within an Enterprise org.","properties":{"channel_id":{"description":"The channel ID to determine connected workspaces within the organization for. Must be a valid Slack channel ID (e.g., C0ACHDEQ3JP).","examples":["C0ACHDEQ3JP","C1234567890"],"title":"Channel Id","type":"string"},"cursor":{"description":"Pagination cursor from `next_cursor` in the previous response. Set this to paginate through results. Omit for the first page.","examples":["dXNlcjpVMDYxTkZUVDI=","bmV4dF90czoxNTEyMDg1ODYxMDAwNTQ5"],"title":"Cursor","type":"string"},"limit":{"description":"Maximum number of items to return per page. Must be between 1 and 1000 inclusive. If omitted, API defaults to a reasonable limit.","examples":[100,500,1000],"maximum":1000,"minimum":1,"title":"Limit","type":"integer"}},"required":["channel_id"],"title":"GetWorkspaceConnectionsForChannelRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed settings for a specific Slack workspace, primarily for administrators in an Enterprise Grid organization to view or audit workspace configurations.","name":"SLACK_GET_WORKSPACE_SETTINGS","parameters":{"description":"Request schema for `GetWorkspaceSettings`","properties":{"team_id":{"description":"The unique identifier of the Slack team (workspace) for which to fetch settings. This ID typically starts with 'T'.","examples":["T12345ABCDE"],"title":"Team Id","type":"string"}},"required":["team_id"],"title":"GetWorkspaceSettingsRequest","type":"object"}},"type":"function"},{"function":{"description":"Invites users to an existing Slack channel using their valid Slack User IDs. Response is always HTTP 200; inspect `ok`, `error`, and `errors` fields to confirm users were added.","name":"SLACK_INVITE_USERS_TO_A_SLACK_CHANNEL","parameters":{"description":"Request schema for `InviteUsersToASlackChannel`","properties":{"channel":{"description":"ID of the public or private Slack channel to invite users to; must be an existing channel. Typically starts with 'C' (public) or 'G' (private/group). Bot must already be a member of private channels to invite others. Archived channels will cause failure.","examples":["C1234567890","G0987654321"],"title":"Channel","type":"string"},"force":{"description":"When set to true and multiple user IDs are provided, continue inviting the valid ones while disregarding invalid IDs. Default is false.","examples":[true,false],"title":"Force","type":"boolean"},"users":{"description":"Comma-separated string of valid Slack User IDs to invite. Up to 1000 user IDs can be included.","examples":["U1234567890,U2345678901,U3456789012"],"title":"Users","type":"string"}},"title":"InviteUsersToASlackChannelRequest","type":"object"}},"type":"function"},{"function":{"description":"Invites users to a specified Slack channel; this action is restricted to Enterprise Grid workspaces and requires the authenticated user to be a member of the target channel.","name":"SLACK_INVITE_USER_TO_CHANNEL","parameters":{"description":"Request schema for `InviteUserToChannel`","properties":{"channel_id":{"description":"The ID of the public or private Slack channel to which users will be invited.","examples":["C1234567890","C061X2Z7W9S"],"title":"Channel Id","type":"string"},"user_ids":{"description":"A comma-separated string of Slack User IDs to invite to the channel. Up to 1000 users can be specified.","examples":["U012A3CDE,U023B4DEF","W12345678,W87654321"],"title":"User Ids","type":"string"}},"required":["channel_id","user_ids"],"title":"InviteUserToChannelRequest","type":"object"}},"type":"function"},{"function":{"description":"Invites a user to a Slack workspace and specified channels by email; use `resend=True` to re-process an existing invitation for a user not yet signed up.","name":"SLACK_INVITE_USER_TO_WORKSPACE","parameters":{"description":"Request model for inviting a user to a Slack workspace, with options to specify channels, user type, and custom messages.","properties":{"channel_ids":{"description":"A comma-separated list of channel IDs (e.g., C1234567890,C0987654321) for the user to join. At least one channel ID must be provided. Channel names are not accepted and will cause errors.","examples":["C1234567890,C9876543210","C0123456789"],"title":"Channel Ids","type":"string"},"custom_message":{"description":"Custom message to include in the invitation email.","examples":["Welcome to the team! Looking forward to working with you."],"title":"Custom Message","type":"string"},"email":{"description":"The email address of the person to be invited to the workspace.","examples":["new.user@example.com"],"title":"Email","type":"string"},"email_password_policy_enabled":{"description":"Allow invited user to sign in via email and password. Only available for Enterprise Grid teams via admin invite.","title":"Email Password Policy Enabled","type":"boolean"},"guest_expiration_ts":{"description":"Unix timestamp for guest account expiration in the format 'XXXXXXXXXX.XXXXXX' (10-digit seconds followed by 6-digit microseconds, e.g., '1735689600.000000'). Provide only if inviting a guest user and an expiration date is desired.","examples":["1735689600.000000","1678886400.123456"],"title":"Guest Expiration Ts","type":"string"},"is_restricted":{"description":"Specifies if the invited user should be a multi-channel guest. Defaults to false. Multi-channel guests can access only the channels they are invited to, plus any public channels.","title":"Is Restricted","type":"boolean"},"is_ultra_restricted":{"description":"Specifies if the invited user should be a single-channel guest (also known as an ultra-restricted guest). Defaults to false. Single-channel guests can only access one channel (plus DMs and Huddles).","title":"Is Ultra Restricted","type":"boolean"},"real_name":{"description":"The full name of the user being invited.","examples":["Jane Doe"],"title":"Real Name","type":"string"},"resend":{"description":"If true, allows this invitation to be resent if the user hasn't signed up. Defaults to false.","title":"Resend","type":"boolean"},"team_id":{"description":"The ID of the Slack workspace (e.g., T123ABCDEFG) where the user will be invited.","examples":["T123ABCDEFG"],"title":"Team Id","type":"string"}},"required":["channel_ids","email","team_id"],"title":"InviteUserToWorkspaceRequest","type":"object"}},"type":"function"},{"function":{"description":"Joins an existing Slack conversation (public channel, private channel, or multi-person direct message) by its ID, if the authenticated user has permission. Joining an already-joined channel returns a non-fatal no-op response. Private or restricted channel joins may fail with a permission error.","name":"SLACK_JOIN_AN_EXISTING_CONVERSATION","parameters":{"description":"Request schema for `JoinAnExistingConversation`","properties":{"channel":{"description":"ID of the Slack conversation (public channel, private channel, or multi-person direct message) to join.","examples":["C1234567890","G0987654321","D123ABCDEF0"],"title":"Channel","type":"string"}},"required":["channel"],"title":"JoinAnExistingConversationRequest","type":"object"}},"type":"function"},{"function":{"description":"Leaves a Slack conversation given its channel ID; fails if leaving as the last member of a private channel or if used on a Slack Connect channel.","name":"SLACK_LEAVE_CONVERSATION","parameters":{"description":"Specifies the channel to leave.","properties":{"channel":{"description":"ID of the conversation to leave (e.g., C1234567890).","examples":["C1234567890","D9876543210","G12345ABCDE"],"title":"Channel","type":"string"}},"required":["channel"],"title":"LeaveConversationRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list approved apps for an Enterprise Grid organization or workspace. Use when you need to retrieve the list of apps that have been approved for installation by workspace admins. Requires admin.apps:read scope and a user token from an org owner/admin context.","name":"SLACK_LIST_ADMIN_APPS_APPROVED","parameters":{"description":"Request schema for listing approved apps for an org or workspace.","properties":{"certified":{"description":"Filter results to certified apps only. When false, certified apps are excluded from results. Defaults to false if not specified.","examples":[true,false],"title":"Certified","type":"boolean"},"cursor":{"description":"Pagination cursor for retrieving the next page. Set to `next_cursor` returned by the previous call to list items in the next page.","examples":["dXNlcjpVMDYxTkZUVDA="],"title":"Cursor","type":"string"},"enterprise_id":{"description":"The Enterprise Grid organization ID to list approved apps for.","examples":["E1234567890","E0984H91R2N"],"title":"Enterprise Id","type":"string"},"limit":{"description":"The maximum number of items to return. Must be between 1 and 1000 (inclusive).","examples":[100,500,1000],"maximum":1000,"minimum":1,"title":"Limit","type":"integer"},"team_id":{"description":"The workspace/team ID to list approved apps for. Required when using an org-level token.","examples":["T0984H91R2N","T1234567890"],"title":"Team Id","type":"string"}},"title":"ListAdminAppsApprovedRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list pending app installation requests for a team/workspace. Use when you need to see which apps users have requested to install that haven't yet been approved or denied. Requires Enterprise Grid or Business+ plan with admin.apps:read scope.","name":"SLACK_LIST_ADMIN_APPS_REQUESTS","parameters":{"description":"Request schema for listing app requests.","properties":{"certified":{"description":"Filter results to certified apps only. When true, only certified apps are returned. When false, certified apps are excluded from results. Defaults to false if not specified.","examples":[true,false],"title":"Certified","type":"boolean"},"cursor":{"description":"Pagination cursor for fetching subsequent pages. Set to `next_cursor` returned by the previous call to list items in the next page. Omit for the first page.","examples":["dXNlcjpVMDYxREk0STM="],"title":"Cursor","type":"string"},"enterprise_id":{"description":"The Enterprise Grid organization ID to list app requests for. Use to query at the Enterprise level.","examples":["E1234567890","E0984H91R2N"],"title":"Enterprise Id","type":"string"},"limit":{"description":"The maximum number of items to return. Must be between 1 and 1000 inclusive. Defaults to the API's default if not specified.","examples":[10,100,500],"maximum":1000,"minimum":1,"title":"Limit","type":"integer"},"team_id":{"description":"The workspace/team ID to list app requests for. Required for Enterprise Grid organizations using org-level tokens. For workspace-level tokens, this filters to a specific workspace.","examples":["T0AB0BSTDV5","T1234567890"],"title":"Team Id","type":"string"}},"title":"ListAdminAppsRequestsRequest","type":"object"}},"type":"function"},{"function":{"description":"List custom emoji across an Enterprise Grid organization. Use when you need to retrieve all custom emoji for an entire Enterprise Grid org (not just a single workspace). Requires admin.teams:read scope and an admin token. For single workspace emoji, use the regular emoji.list method instead.","name":"SLACK_LIST_ADMIN_EMOJI","parameters":{"description":"Request model for listing emoji across an Enterprise Grid organization.","properties":{"cursor":{"description":"Pagination cursor from response_metadata.next_cursor of a previous response. Use to fetch the next page of results.","examples":["dXNlcjpVMDYxTkZUVDA="],"title":"Cursor","type":"string"},"limit":{"description":"Maximum number of items to return. Must be between 1 and 1000 (inclusive).","examples":[100,500,1000],"maximum":1000,"minimum":1,"title":"Limit","type":"integer"}},"title":"ListAdminEmojiRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists conversations available to the user with various filters and search options. Always use resolved `channel_id` (not display names) for downstream operations, as names may be non-unique. The `created` field in results is a Unix epoch timestamp (UTC). Pagination across large workspaces may return HTTP 429 with a `Retry-After` header; honor the delay and resume from the last successful cursor.","name":"SLACK_LIST_ALL_CHANNELS","parameters":{"description":"Request schema for listing Slack team channels with various filtering options.","properties":{"cursor":{"description":"Pagination cursor (from a previous response's `next_cursor`) for the next page of results. Omit for the first page. Loop on `response_metadata.next_cursor` until it is empty to retrieve all channels; stopping early silently omits results.","examples":["dXNlcjpVMDYxTkZUVDI=","bmV4dF90czoxNTEyMDg1ODYxMDAwNTQ5"],"title":"Cursor","type":"string"},"exclude_archived":{"description":"Excludes archived channels if true. The API defaults to false (archived channels are included).","examples":[true,false],"title":"Exclude Archived","type":"boolean"},"limit":{"default":1,"description":"Maximum number of channels to return per page (1 to 1000). Fewer channels may be returned than requested. This schema defaults to 1 if omitted.","examples":[100,500,1000],"title":"Limit","type":"integer"},"team_id":{"description":"Encoded team id to list channels in. Required if using an org-level token.","examples":["T1234567890"],"title":"Team Id","type":"string"},"types":{"description":"Comma-separated list of conversation types to include: `public_channel` (regular #channels everyone can join), `private_channel` (invite-only channels), `im` (1-on-1 direct messages), `mpim` (group direct messages with 3+ people). Defaults to `public_channel` if omitted. Private channels, IMs, and MPIMs only appear if the authenticated user/bot is a member and the token has the required scopes; absence from results reflects access limits, not non-existence.","examples":["public_channel,private_channel","im,mpim"],"title":"Types","type":"string"}},"title":"ListAllChannelsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a paginated list of all users with profile details, status, and team memberships in a Slack workspace; data may not be real-time. Filter response fields `is_bot`, `is_app_user`, and `deleted` to build human-only rosters. Profile fields like `email` and `phone` may be absent depending on OAuth scopes and workspace privacy settings. Guest/restricted accounts may be omitted based on scopes—do not treat results as a complete directory. High-frequency calls risk HTTP 429; honor the `Retry-After` header and throttle to ~1–2 requests/second. Use stable user IDs rather than display names for mapping. Prefer SLACK_FIND_USERS for targeted lookups; cache results to avoid full-workspace fetches.","name":"SLACK_LIST_ALL_USERS","parameters":{"description":"Request schema for `ListAllUsers`.","properties":{"cursor":{"description":"Pagination cursor for fetching subsequent pages. Set to `next_cursor` from a previous response's `response_metadata`. Omit for the first page. Paginate until `next_cursor` is empty—stopping early silently undercounts users. Page size is capped at ~200 users.","examples":["dXNlcjpVMDYxREk0STM=","dXNlcjpVMDYxREk0STQ="],"title":"Cursor","type":"string"},"include_locale":{"description":"Include the `locale` field for each user. Defaults to `false`.","examples":["true","false"],"title":"Include Locale","type":"boolean"},"limit":{"default":1,"description":"Maximum number of items to return per page; fewer may be returned if the end of the list is reached. Recommended to set a value (e.g., 100) as Slack may error for large workspaces if omitted.","examples":["20","100","200"],"title":"Limit","type":"integer"},"team_id":{"description":"The workspace/team ID to list users from. Required when using an org-level token (Enterprise Grid). This field is ignored when using a workspace-level token. Use admin.teams.list to get available team IDs.","examples":["T0984H91R2N","T1234567890"],"title":"Team Id","type":"string"}},"title":"ListAllUsersRequest","type":"object"}},"type":"function"},{"function":{"description":"List all approved workspace invite requests with pagination support. Use to review which invite requests have been approved and the details of each approval. Requires admin.invites:read scope and Enterprise Grid organization.","name":"SLACK_LIST_APPROVED_WORKSPACE_INVITE_REQUESTS","parameters":{"description":"Request schema for listing all approved workspace invite requests.","properties":{"cursor":{"description":"Value of the `next_cursor` field sent as part of the previous API response. Use for pagination to retrieve the next page of results.","examples":["dXNlcjpVMDYxTkZUVDA="],"title":"Cursor","type":"string"},"limit":{"description":"The number of results that will be returned by the API on each invocation. Must be between 1 - 1000, both inclusive. Default is 100 if not specified.","examples":[100,500,1000],"maximum":1000,"minimum":1,"title":"Limit","type":"integer"},"team_id":{"description":"ID for the workspace where the invite requests were made. If not provided, lists approved requests across all workspaces in the Enterprise Grid organization.","examples":["T0AB0BSTDV5","T1234567890"],"title":"Team Id","type":"string"}},"title":"ListApprovedWorkspaceInviteRequestsRequest","type":"object"}},"type":"function"},{"function":{"description":"Obtains a paginated list of workspaces your org-wide app has been approved for. Use when you need to discover all workspaces within an organization where the app is installed.","name":"SLACK_LIST_AUTH_TEAMS","parameters":{"description":"Request schema for ListAuthTeams.","properties":{"cursor":{"description":"Paginate through collections of data by setting the cursor parameter to a next_cursor attribute returned by a previous request's response_metadata. Omit for the first page.","examples":["dXNlcl9pZDo5MTQyOTI5Mzkz"],"title":"Cursor","type":"string"},"include_icon":{"description":"When true, the response returns URIs to the avatar images that represent each workspace.","examples":[true,false],"title":"Include Icon","type":"boolean"},"limit":{"description":"The maximum number of items to return. Must be a positive integer no larger than 1000. Default is 100 if not specified.","examples":[100,200,500],"maximum":1000,"minimum":1,"title":"Limit","type":"integer"}},"title":"ListAuthTeamsRequest","type":"object"}},"type":"function"},{"function":{"description":"DEPRECATED: Use SLACK_LIST_FILES_WITH_FILTERS_IN_SLACK instead (pass types=\"canvas\" for equivalent behavior). Lists Slack Canvases with filtering by channel, user, timestamp, and page-based pagination. Uses Slack's files.list API with types=canvas filter. Only canvases accessible to the authenticated app are returned; missing canvases indicate permissions restrictions, not empty data. Use `paging.pages` in the response to determine total pages; iterate `page` with `count` to retrieve all results. Known limitations: - The 'user' filter may return canvases accessible to the specified user, not just canvases they created. - The 'ts_from' and 'ts_to' timestamp filters may not work reliably for canvas types. Consider client-side filtering on the 'created' field in the response if precise date filtering is required.","name":"SLACK_LIST_CANVASES","parameters":{"properties":{"channel":{"description":"Optional channel ID (e.g., 'C1234567890') to filter canvases. Must be a channel ID, not name.","examples":["C1234567890","C9876543210"],"title":"Channel","type":"string"},"count":{"default":100,"description":"Maximum number of canvases to return per page (1-1000)","maximum":1000,"minimum":1,"title":"Count","type":"integer"},"page":{"default":1,"description":"Page number for pagination (1-based)","minimum":1,"title":"Page","type":"integer"},"show_files_hidden_by_limit":{"description":"Display truncated file metadata for older files when workspace has exceeded file limits. When true, shows metadata for files that would normally be hidden due to workspace storage limits.","title":"Show Files Hidden By Limit","type":"boolean"},"team_id":{"description":"Team/Workspace ID for Enterprise Grid organizations (starts with 'T'). Required when using org-level tokens. For single-workspace installations, this parameter is optional and will be ignored.","examples":["T1234567890","T0984H91R2N"],"title":"Team Id","type":"string"},"ts_from":{"description":"Filter canvases created after this Unix timestamp (inclusive). Pass as integer epoch seconds. Note: This filter may not work reliably for canvas types in the Slack API.","examples":[1678886400],"title":"Ts From","type":"integer"},"ts_to":{"description":"Filter canvases created before this Unix timestamp (inclusive). Pass as integer epoch seconds. Note: This filter may not work reliably for canvas types in the Slack API.","examples":[1678972800],"title":"Ts To","type":"integer"},"user":{"description":"Optional user ID to filter canvases created by a specific user. Note: This filter may return canvases accessible to the user (not just created by them) due to Slack API behavior with canvas types.","examples":["U1234567890"],"title":"User","type":"string"}},"title":"ListCanvasesRequest","type":"object"}},"type":"function"},{"function":{"description":"List conversations (channels/DMs) accessible to a specified user (or the authenticated user if no user ID is provided), respecting shared membership for non-public channels. Returns conversation IDs (C* for channels, G* for group DMs), not display names. Absence of private channels, DMs, or MPIMs from results indicates token scope or membership limits, not that the conversation is nonexistent.","name":"SLACK_LIST_CONVERSATIONS","parameters":{"description":"Request model for listing conversations accessible to a user, with options for pagination and filtering.","properties":{"cursor":{"description":"Pagination cursor for retrieving the next set of results. Obtain this from the `next_cursor` field in a previous response's `response_metadata`. If omitted, the first page is fetched. Must loop on `next_cursor` until it is empty to avoid silently missing conversations.","examples":["dXNlcjpVMDYxREk0Nlc=","bmV4dF90czoxNTEyMDg1ODYxMDAwNTQz"],"title":"Cursor","type":"string"},"exclude_archived":{"description":"Set to `true` to exclude archived channels from the list. If `false` or omitted, archived channels are typically included (the API's default behavior for omission will apply, usually including them).","examples":["true","false"],"title":"Exclude Archived","type":"boolean"},"limit":{"description":"The maximum number of items to return per page. Must be an integer, typically between 1 and 1000 (e.g., 100). If omitted, the API's default limit (often 100) applies. Fewer items than the limit may be returned.","examples":["100","500","1000"],"title":"Limit","type":"integer"},"team_id":{"description":"The team (workspace) ID to filter conversations by. Required for Enterprise Grid tokens to specify which workspace. Can be obtained from team.info API.","examples":["T1234567890","T0984ABC123"],"title":"Team Id","type":"string"},"types":{"description":"Comma-separated list of conversation types to include: `public_channel` (regular #channels everyone can join), `private_channel` (invite-only channels), `im` (1-on-1 direct messages), `mpim` (group direct messages with 3+ people). If omitted, all types are included. If omitted, the API defaults to `public_channel` only — explicitly specify all desired types to include private channels, DMs, or MPIMs. For `im` results, only user IDs are returned; use a user-lookup tool to resolve display names.","examples":["public_channel,private_channel","im,mpim","public_channel"],"title":"Types","type":"string"},"user":{"description":"The ID of the user whose conversations will be listed. If not provided, conversations for the authenticated user are returned. Non-public channels are restricted to those where the calling user (authenticating user) shares membership.","examples":["U123ABC456","W012A3BCD"],"title":"User","type":"string"}},"title":"ListAccessibleConversationsForAUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves all custom emojis for the Slack workspace (image URLs or aliases), not standard Unicode emojis; does not include usage statistics or creation dates.","name":"SLACK_LIST_CUSTOM_EMOJIS","parameters":{"description":"Request model for the `ListCustomEmojis` action.\n\nLists custom emoji for a team/workspace.","properties":{"include_categories":{"description":"Include a list of categories for Unicode emoji and the emoji in each category. When true, the response will include 'categories' and 'categories_version' fields.","title":"Include Categories","type":"boolean"}},"title":"ListCustomEmojisRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list all denied workspace invite requests with details about who denied them and when. Use when you need to review or audit denied invitation requests.","name":"SLACK_LIST_DENIED_WORKSPACE_INVITE_REQUESTS","parameters":{"description":"Request schema for listing denied workspace invite requests.","properties":{"cursor":{"description":"Value of the next_cursor field sent as part of the previous API response for pagination. Omit for the first page.","examples":["dXNlcjpVMDYxREk0STM=","ZGF0ZV9jcmVhdGU6MTU2MTc0Nzc2Ng=="],"title":"Cursor","type":"string"},"limit":{"description":"The number of results that will be returned by the API on each invocation. Must be between 1-1000 inclusive.","examples":[100,500,1000],"maximum":1000,"minimum":1,"title":"Limit","type":"integer"},"team_id":{"description":"ID for the workspace where the invite requests were made. Required for Enterprise Grid organizations.","examples":["T0984H91R2N","T1234567890"],"title":"Team Id","type":"string"}},"title":"ListDeniedWorkspaceInviteRequestsRequest","type":"object"}},"type":"function"},{"function":{"description":"List all teams (workspaces) in a Slack Enterprise Grid organization with pagination support. Use when you need to retrieve team IDs, names, domains, and metadata for all workspaces in an Enterprise. Requires admin.teams:read scope and Enterprise Grid organization.","name":"SLACK_LIST_ENTERPRISE_TEAMS","parameters":{"description":"Request schema for listing all teams in an Enterprise organization.","properties":{"cursor":{"description":"Set cursor to next_cursor returned by the previous call to list items in the next page. Omit for the first page.","examples":["dXNlcjpVMDYxREk0STM=","5c3e53d5"],"title":"Cursor","type":"string"},"limit":{"description":"The maximum number of items to return per page. Must be between 1 - 100 both inclusive. If omitted, the API's default limit applies. Fewer items may be returned.","examples":[10,50,100],"maximum":100,"minimum":1,"title":"Limit","type":"integer"}},"title":"ListEnterpriseTeamsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists files and their metadata within a Slack workspace, filterable by user, channel, timestamp, or type; returns metadata only, not file content. Results are limited to files visible to the authenticated user — files in private channels or restricted to certain members require appropriate membership and permissions. For large workspaces, check `paging.pages` in the response to determine total pages when paginating.","name":"SLACK_LIST_FILES_WITH_FILTERS_IN_SLACK","parameters":{"description":"Request schema for `ListFilesWithFiltersInSlack`","properties":{"channel":{"description":"Filter files appearing in a specific channel, indicated by its Slack Channel ID.","examples":["C1234567890","G0abcdef0"],"title":"Channel","type":"string"},"count":{"description":"Specifies the number of files to return per page. Default is 100, maximum is 1000.","examples":["100","50","1000"],"title":"Count","type":"string"},"page":{"description":"Specifies the page number of the results to retrieve when paginating. Default is 1.","examples":["1","2"],"title":"Page","type":"string"},"show_files_hidden_by_limit":{"description":"Show truncated file info for files hidden due to being too old or if the team owning the file is over the storage limit.","examples":[true,false],"title":"Show Files Hidden By Limit","type":"boolean"},"team_id":{"description":"The team/workspace ID to list files from. Required for Enterprise Grid workspaces.","examples":["T1234567890","E0984HGHPJ6"],"title":"Team Id","type":"string"},"ts_from":{"description":"Filter files created after this Unix timestamp (inclusive).","examples":["1678886400"],"title":"Ts From","type":"integer"},"ts_to":{"description":"Filter files created before this Unix timestamp (inclusive).","examples":["1678972800"],"title":"Ts To","type":"integer"},"types":{"description":"Filter by file type (comma-separated). Valid types: `all` (everything), `spaces` (Posts/long-form content), `snippets` (code snippets), `images`, `pdfs`, `gdocs` (Google Docs), `zips`. Defaults to 'all'.","examples":["images","pdfs","images,pdfs","all","spaces,snippets"],"title":"Types","type":"string"},"user":{"description":"Filter files created by a single user. Provide the Slack User ID.","examples":["W1234567890","U0abcdef0"],"title":"User","type":"string"}},"title":"ListFilesWithFiltersInSlackRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists IDP groups that have restricted access to a private Slack channel. Use when you need to see which identity provider groups can access a specific channel.","name":"SLACK_LIST_IDP_GROUPS_LINKED_TO_CHANNEL","parameters":{"description":"Request schema for listing IDP groups linked to a Slack channel.","properties":{"channel_id":{"description":"The channel ID to list IDP groups for. This is the unique identifier for the private channel.","examples":["C0ABHF7RSLR","C1234567890"],"title":"Channel Id","type":"string"},"team_id":{"description":"The workspace where the channel exists. Required for channels tied to one workspace, optional for channels shared across an organization.","examples":["T0984H91R2N","T1234567890"],"title":"Team Id","type":"string"}},"required":["channel_id"],"title":"ListIdpGroupsLinkedToChannelRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list all pending workspace invite requests. Use when you need to see who has been invited but hasn't joined yet. Requires admin.invites:read scope.","name":"SLACK_LIST_PENDING_WORKSPACE_INVITE_REQUESTS","parameters":{"description":"Request model for listing pending workspace invite requests.","properties":{"cursor":{"description":"Value of the `next_cursor` field sent as part of the previous API response. Used for pagination to fetch subsequent pages of results. Omit for the first page.","examples":["dXNlcjpVMDYxREk0STM=","ZGF0ZV9jcmVhdGU6MTYxOTcwMDk3MA=="],"title":"Cursor","type":"string"},"limit":{"description":"The number of results that will be returned by the API on each invocation. Must be between 1 and 1000 (both inclusive). If not specified, uses the API's default.","examples":[100,500,1000],"maximum":1000,"minimum":1,"title":"Limit","type":"integer"},"team_id":{"description":"ID for the workspace where the invite requests were made. If not provided, lists requests for all workspaces the token has access to.","examples":["T0984H91R2N","T1234567890"],"title":"Team Id","type":"string"}},"title":"ListPendingWorkspaceInviteRequestsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves all messages and files pinned to a specified channel; the caller must have access to this channel.","name":"SLACK_LIST_PINNED_ITEMS","parameters":{"description":"Request schema for `ListPinnedItems`","properties":{"channel":{"description":"The ID of the channel to retrieve pinned items from. This can be a public channel ID, private group ID, or direct message channel ID.","examples":["C1234567890","G0123456789","D0123456789"],"title":"Channel","type":"string"}},"required":["channel"],"title":"ListPinnedItemsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all reminders with their details for the authenticated Slack user; returns an empty array if no reminders exist (valid state, not an error). Reminder text is not unique—perform client-side matching on returned objects before extracting a reminder ID for use with SLACK_MARK_REMINDER_AS_COMPLETE or SLACK_DELETE_A_SLACK_REMINDER.","name":"SLACK_LIST_REMINDERS","parameters":{"description":"Request schema for `ListReminders`","properties":{"team_id":{"description":"Encoded team id. Required if org token is passed. Omitting this when using an org-level token will cause the call to fail.","examples":["T1234567890"],"title":"Team Id","type":"string"}},"title":"ListRemindersRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieve information about a team's remote files.","name":"SLACK_LIST_REMOTE_FILES","parameters":{"description":"Request schema for `ListRemoteFiles`","properties":{"channel":{"description":"Filter files appearing in a specific channel, indicated by its ID.","examples":["C1234567890"],"title":"Channel","type":"string"},"cursor":{"description":"Paginate through collections of data by setting the cursor parameter to a next_cursor attribute returned by a previous request's response_metadata. Default value fetches the first 'page' of the collection. See pagination for more detail.","examples":["dXNlcjpVMDYxTkZUVDI="],"title":"Cursor","type":"string"},"limit":{"description":"The maximum number of items to return.","examples":[20],"title":"Limit","type":"integer"},"ts_from":{"description":"Filter files created after this timestamp (inclusive).","examples":[123456789.012345],"title":"Ts From","type":"number"},"ts_to":{"description":"Filter files created before this timestamp (inclusive).","examples":[123456789.012345],"title":"Ts To","type":"number"}},"title":"ListRemoteFilesRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list restricted apps for an org or workspace. Use when you need to view apps that have been restricted from installation. Requires admin.apps:read scope and appropriate admin permissions.","name":"SLACK_LIST_RESTRICTED_APPS","parameters":{"description":"Request schema for listing restricted apps for an org or workspace.","properties":{"certified":{"description":"Filter results to certified apps only. When false, certified apps are excluded from results. Defaults to false if not specified.","examples":[true,false],"title":"Certified","type":"boolean"},"cursor":{"description":"Pagination cursor from response_metadata.next_cursor of a previous response. Set to next_cursor returned by the previous call to list items in the next page.","examples":["dXNlcjpVMDYxTkZUVDA=","bmV4dF90czoxNTEyMDg1ODYxMDAwNTQz"],"title":"Cursor","type":"string"},"enterprise_id":{"description":"The Enterprise Grid organization ID to list restricted apps from. Use this to filter by a specific enterprise organization.","examples":["E1234567890","E0984ABC123"],"title":"Enterprise Id","type":"string"},"limit":{"description":"The maximum number of items to return. Must be between 1 and 1000 (inclusive). If omitted, the API default applies.","examples":[100,500,1000],"maximum":1000,"minimum":1,"title":"Limit","type":"integer"},"team_id":{"description":"The workspace/team ID to list restricted apps from. Use this to filter by a specific workspace within an Enterprise Grid organization.","examples":["T1234567890","T0984ABC123"],"title":"Team Id","type":"string"}},"title":"ListRestrictedAppsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a list of pending (not yet delivered) messages scheduled in a specific Slack channel, or across all accessible channels if no channel ID is provided, optionally filtered by time and paginated.","name":"SLACK_LIST_SCHEDULED_MESSAGES","parameters":{"description":"Request schema for listing scheduled messages in a channel or workspace.","properties":{"channel":{"description":"ID or name of the channel (public, private, or DM) to list messages for. If omitted, lists for all accessible channels in the workspace.","examples":["C1234567890","general"],"title":"Channel","type":"string"},"cursor":{"description":"Pagination cursor from `response_metadata.next_cursor` of a previous response. Omit for the first page.","examples":["dXNlcjpVMDYxREk0STM=","bmV4dF9wYWdlX2N1cnNvcg=="],"title":"Cursor","type":"string"},"latest":{"description":"Latest UNIX timestamp (exclusive) for messages. Defaults to the current time if omitted.","examples":["1678886400.000000","1678972800.000000"],"title":"Latest","type":"string"},"limit":{"description":"Maximum messages per page (1-1000). Defaults to 100.","examples":["100","50"],"title":"Limit","type":"integer"},"oldest":{"description":"Earliest UNIX timestamp (inclusive) for messages. Defaults to 0 if omitted.","examples":["1678800000.000000","1678880000.000000"],"title":"Oldest","type":"string"},"team_id":{"description":"The workspace ID (team_id) to list scheduled messages for. Required when using an org-level token; will be ignored when using a workspace-level token.","examples":["T1234567890"],"title":"Team Id","type":"string"}},"title":"ListScheduledMessagesRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists items starred by a user. Returns classic starred items only — does not reflect Slack's 'saved for later' feature. Use SLACK_SEARCH_MESSAGES or SLACK_SEARCH_ALL for broader saved-content queries.","name":"SLACK_LIST_STARRED_ITEMS","parameters":{"description":"Request schema for `ListStarredItems`","properties":{"count":{"description":"Number of items to return per page.","examples":[20],"title":"Count","type":"integer"},"cursor":{"description":"Parameter for pagination. Set cursor to the next_cursor attribute returned by the previous request's response_metadata. Continue paginating until next_cursor is empty to retrieve all starred items.","examples":["dXNlcjpVMDYxTkZUVDI="],"title":"Cursor","type":"string"},"limit":{"description":"The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the list hasn't been reached.","examples":[20],"title":"Limit","type":"integer"},"page":{"description":"Page number of results to return.","examples":[2],"title":"Page","type":"integer"},"team_id":{"description":"Encoded team id to list stars in, required if org token is used.","examples":["T1234567890"],"title":"Team Id","type":"string"}},"title":"ListStarredItemsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a list of all user IDs within a specified Slack user group, with an option to include users from disabled groups.","name":"SLACK_LIST_USER_GROUP_MEMBERS","parameters":{"description":"Request schema for listing all users in a Slack user group.","properties":{"include_disabled":{"description":"Set to `true` to include users from disabled user groups. If omitted, the default Slack API behavior for handling disabled groups (typically excluding them) will apply.","title":"Include Disabled","type":"boolean"},"team_id":{"description":"The encoded ID of the team/workspace. Only relevant when using an org-level token. This field will be ignored if the API call is sent using a workspace-level token.","examples":["T1234567890","T0984H91R2N"],"title":"Team Id","type":"string"},"usergroup":{"description":"The encoded ID of the User Group to list users from. This ID is an alphanumeric string.","examples":["S0604QSJC","S123ABC456"],"title":"Usergroup","type":"string"}},"required":["usergroup"],"title":"ListUserGroupMembersRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists user groups in a Slack workspace, including user-created and default groups; results for large workspaces may be paginated.","name":"SLACK_LIST_USER_GROUPS","parameters":{"description":"Request model for listing user groups in a Slack team, providing options to customize the retrieved information.","properties":{"include_count":{"description":"Include the number of users in each user group. Defaults to false.","examples":["true","false"],"title":"Include Count","type":"boolean"},"include_disabled":{"description":"Include disabled user groups in the results. Defaults to false.","examples":["true","false"],"title":"Include Disabled","type":"boolean"},"include_users":{"description":"Include the list of user IDs for each user group. Defaults to false.","examples":["true","false"],"title":"Include Users","type":"boolean"},"team_id":{"description":"Encoded team ID to list user groups in. Required when using an org-level token.","examples":["T1234567890"],"title":"Team Id","type":"string"}},"title":"ListUserGroupsRequest","type":"object"}},"type":"function"},{"function":{"description":"Lists all reactions added by a specific user to messages, files, or file comments in Slack, useful for engagement analysis when the item content itself is not required. Results are paginated; check `response_metadata.next_cursor` and iterate with the `cursor` parameter to retrieve complete reaction history.","name":"SLACK_LIST_USER_REACTIONS","parameters":{"description":"Request schema for `ListUserReactions`","properties":{"count":{"description":"Number of items to return per page.","examples":["20"],"title":"Count","type":"integer"},"cursor":{"description":"Pagination cursor. Set to `next_cursor` from a previous response's `response_metadata`. See Slack API pagination documentation for details.","examples":["dXNlcjpVMDYxTkZ0NUI="],"title":"Cursor","type":"string"},"full":{"description":"If true, return the complete reaction list, which may include reactions to deleted items. Significantly inflates payload size; enable only when reactions to deleted items are explicitly needed.","title":"Full","type":"boolean"},"limit":{"description":"Maximum number of items to return; fewer items may be returned. Use with cursor-based pagination.","examples":["100"],"title":"Limit","type":"integer"},"page":{"description":"Page number of results to return.","examples":["1"],"title":"Page","type":"integer"},"team_id":{"description":"Required when using an org-level token. The ID of the workspace to list reactions from.","examples":["T1234567890"],"title":"Team Id","type":"string"},"user":{"description":"Reactions made by this user. Defaults to the authed user.","examples":["U012A3CDEFG"],"title":"User","type":"string"}},"title":"ListUserReactionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list all admins on a given Slack workspace. Use when you need to identify workspace administrators. Requires Enterprise Grid organization and admin.teams:read scope.","name":"SLACK_LIST_WORKSPACE_ADMINS","parameters":{"description":"Request schema for listing all admins on a workspace.","properties":{"cursor":{"description":"Pagination cursor for fetching subsequent pages. Set to next_cursor from a previous response. Omit for the first page.","examples":["dXNlcjpVMDYxREk0STM=","dXNlcjpVMDYxREk0STQ="],"title":"Cursor","type":"string"},"limit":{"description":"The maximum number of items to return per page. Must be between 1 and 1000 (inclusive). Fewer may be returned if the end of the list is reached.","examples":[20,100,200],"maximum":1000,"minimum":1,"title":"Limit","type":"integer"},"team_id":{"description":"The ID of the workspace to list admins for. Required for Enterprise Grid organizations.","examples":["T0AB0BSTDV5","T1234567890"],"title":"Team Id","type":"string"}},"required":["team_id"],"title":"ListWorkspaceAdminsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to list all owners on a given Slack workspace. Use when you need to identify workspace ownership or admin structure. Requires admin.teams:read scope.","name":"SLACK_LIST_WORKSPACE_OWNERS","parameters":{"description":"Request schema for listing workspace owners.","properties":{"cursor":{"description":"Set cursor to next_cursor returned by the previous call to list items in the next page.","examples":["dXNlcjpVMDYxREk0STM="],"title":"Cursor","type":"string"},"limit":{"description":"The maximum number of items to return. Must be between 1 and 1000 (inclusive).","examples":[100,500,1000],"maximum":1000,"minimum":1,"title":"Limit","type":"integer"},"team_id":{"description":"The workspace ID to list owners for. Required parameter.","examples":["T0AB0BSTDV5","T1234567890"],"title":"Team Id","type":"string"}},"required":["team_id"],"title":"ListWorkspaceOwnersRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a paginated list of admin users for a specified Slack workspace.","name":"SLACK_LIST_WORKSPACE_USERS","parameters":{"description":"Request schema for listing admin users in a Slack workspace.","properties":{"cursor":{"description":"Pagination cursor for retrieving the next page of results. Pass the `next_cursor` value returned from a previous request to fetch subsequent items. If omitted, the first page is retrieved.","examples":["dXNlcjpVMEc5V0ZYTlo="],"title":"Cursor","type":"string"},"include_deactivated_user_workspaces":{"description":"Only applicable with org-level tokens. When true, returns user workspaces regardless of the user's deactivation status. Defaults to false.","examples":["true","false"],"title":"Include Deactivated User Workspaces","type":"boolean"},"is_active":{"description":"Filter users by their activity status. Set to true to return only active users, false to return only deactivated users. If omitted, defaults to true (active users only).","examples":["true","false"],"title":"Is Active","type":"boolean"},"limit":{"description":"The maximum number of admin users to retrieve per page. Must be a positive integer. If not specified, defaults to 100.","examples":["20","50","100"],"title":"Limit","type":"integer"},"only_guests":{"description":"When true, returns only guest accounts and their expiration dates for the specified team. Defaults to false.","examples":["true","false"],"title":"Only Guests","type":"boolean"},"team_id":{"description":"The ID of the Slack workspace (e.g., `T123456789`) from which to list admin users. If omitted when using an org-level token, returns users across the entire Enterprise organization.","examples":["T123456789"],"title":"Team Id","type":"string"}},"title":"ListWorkspaceUsersRequest","type":"object"}},"type":"function"},{"function":{"description":"Looks up section IDs in a Slack Canvas for use with targeted edit operations. Section IDs are needed for insert_after, insert_before, delete, and section-specific replace operations.","name":"SLACK_LOOKUP_CANVAS_SECTIONS","parameters":{"properties":{"canvas_id":{"description":"The unique identifier of the canvas to lookup sections in","examples":["F01234ABCDE"],"title":"Canvas Id","type":"string"},"criteria":{"additionalProperties":true,"description":"Search criteria to find sections. Use 'contains_text' to search for text within sections. Returns section IDs that match the criteria.","examples":[{"contains_text":"grocery"},{"contains_text":"Roadmap"},{"contains_text":"Task"}],"title":"Criteria","type":"object"}},"required":["canvas_id","criteria"],"title":"LookupCanvasSectionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Marks a specific Slack reminder as complete using its `reminder` ID; **DEPRECATED**: This Slack API endpoint ('reminders.complete') was deprecated in March 2023 and is not recommended for new applications.","name":"SLACK_MARK_REMINDER_AS_COMPLETE","parameters":{"description":"Request model for marking a specific Slack reminder as complete.","properties":{"reminder":{"description":"The unique identifier of the Slack reminder to be marked as complete. This ID is typically obtained when a reminder is created or listed. Must be a reminder ID (format: 'Rm12345678'), not reminder text or name; use SLACK_LIST_REMINDERS to retrieve valid IDs.","examples":["Rm12345678"],"title":"Reminder","type":"string"},"team_id":{"description":"Encoded team id. Required if using an org-level token to specify which workspace the reminder belongs to.","examples":["T1234567890"],"title":"Team Id","type":"string"}},"title":"MarkReminderAsCompleteRequest","type":"object"}},"type":"function"},{"function":{"description":"Opens or resumes a Slack direct message (DM) or multi-person direct message (MPIM) by providing either user IDs or an existing channel ID. Returns `already_open=true` when the DM exists — treat as success and reuse the returned `channel.id` (starts with 'D') for subsequent SLACK_SEND_MESSAGE calls; passing a username, email, or user ID directly to SLACK_SEND_MESSAGE causes `channel_not_found`. Avoid redundant calls when an existing DM channel ID is available.","name":"SLACK_OPEN_DM","parameters":{"description":"Request schema for `OpenOrResumeDirectOrMultiPersonMessages`","properties":{"channel":{"description":"ID or name of an existing DM or MPIM channel to open/resume. Either `channel` or `users` must be provided.","examples":["D0123456789","general"],"title":"Channel","type":"string"},"prevent_creation":{"description":"Do not create a direct message or multi-person direct message. This is used to see if there is an existing dm or mpdm.","title":"Prevent Creation","type":"boolean"},"return_im":{"description":"If `true`, returns the full DM channel object. Applies only when opening a DM via a single user ID in `users` (not with `channel`).","title":"Return Im","type":"boolean"},"users":{"description":"Comma-separated string of user IDs (1 for a DM, or 2-8 for an MPIM) to open/resume a conversation. Order is preserved for MPIMs. Either `channel` or `users` must be provided. Accepts list input (will be converted to comma-separated string). Also accepts `user_ids` as alias. Do not pass emails, display names, or workspace usernames — only Slack user IDs (e.g., `U0123456789`). Do not provide both `users` and `channel` simultaneously.","examples":["U0123456789","U0123456789,U9876543210"],"title":"Users","type":"string"}},"title":"OpenOrResumeDirectOrMultiPersonMessagesRequest","type":"object"}},"type":"function"},{"function":{"description":"Pins a message to a specified Slack channel; the message must not already be pinned.","name":"SLACK_PIN_ITEM","parameters":{"description":"Request schema for `PinItem`","properties":{"channel":{"description":"The ID of the channel where the message will be pinned.","examples":["C1234567890"],"title":"Channel","type":"string"},"timestamp":{"description":"Timestamp of the message to pin, in ‘epoch_time.microseconds’ format (e.g., ‘1624464000.000200’). This is required by the Slack pins.add API.","examples":["1624464000.000200"],"title":"Timestamp","type":"string"}},"required":["channel","timestamp"],"title":"PinItemRequest","type":"object"}},"type":"function"},{"function":{"description":"Read Slack Enterprise Grid Audit Logs (logins, admin changes, app installs, channel/privacy changes, etc.) with server-side filters and pagination. Requires Enterprise Grid organization with auditlogs:read scope and a user token (xoxp-...) from an owner/admin context.","name":"SLACK_READ_AUDIT_LOGS","parameters":{"description":"Request schema for retrieving Slack Enterprise Audit Logs.","properties":{"action":{"description":"Comma-separated list of action types to filter by (max 30). Examples: 'user_login', 'user_logout', 'channel_created', 'app_installed'. See Slack's Audit Logs API documentation for full list.","examples":["user_login","user_logout,user_login","channel_created,channel_deleted","app_installed,app_approved"],"title":"Action","type":"string"},"actor":{"description":"User ID of the actor who performed the actions. Filters results to only show actions by this user.","examples":["U1234567890","W012A3BCD"],"title":"Actor","type":"string"},"cursor":{"description":"Pagination cursor from response_metadata.next_cursor of a previous response. Use to fetch the next page of results.","examples":["dXNlcjpVMDYxTkZUVDA="],"title":"Cursor","type":"string"},"entity":{"description":"Entity ID that was affected by the actions. Filters results to only show actions affecting this entity.","examples":["E1234567890","C1234567890"],"title":"Entity","type":"string"},"latest":{"description":"Unix timestamp (inclusive) of the latest audit log entry to include. Use for time-range filtering.","examples":[1609545600,1641081600],"title":"Latest","type":"integer"},"limit":{"description":"Maximum number of audit log entries to return (max 9999). Fewer entries may be returned if there aren't enough matching results.","examples":[100,500,1000],"title":"Limit","type":"integer"},"oldest":{"description":"Unix timestamp (inclusive) of the oldest audit log entry to include. Use for time-range filtering.","examples":[1609459200,1640995200],"title":"Oldest","type":"integer"}},"title":"ReadAuditLogsRequest","type":"object"}},"type":"function"},{"function":{"description":"Registers participants removed from a Slack call.","name":"SLACK_REMOVE_CALL_PARTICIPANTS","parameters":{"description":"Request schema for `RemoveCallParticipants`","properties":{"id":{"description":"ID of the call returned by the add method.","examples":["R0123456789"],"title":"Id","type":"string"},"users":{"description":"The list of users to remove as participants in the call. users is a JSON array with each user having a `slack_id` or `external_id`.","examples":["[{\"slack_id\": \"U1H77\", \"external_id\": \"ext-id\"}]","[{\"slack_id\": \"U2ABC123\"}]"],"title":"Users","type":"string"}},"required":["id","users"],"title":"RemoveCallParticipantsRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to remove a custom emoji across an Enterprise Grid organization. Use when you need to delete a custom emoji from the entire organization.","name":"SLACK_REMOVE_EMOJI","parameters":{"description":"Request schema for `RemoveEmoji`","properties":{"name":{"description":"The name of the emoji to be removed. Colons (`:myemoji:`) around the value are not required, although they may be included. The emoji will be removed across the entire Enterprise Grid organization.","examples":["my_test_alias_1","partyparrot","custom_logo"],"title":"Name","type":"string"}},"required":["name"],"title":"RemoveEmojiRequest","type":"object"}},"type":"function"},{"function":{"description":"Removes an emoji reaction from a message, file, or file comment in Slack. Provide exactly one targeting method: channel+timestamp together, file, or file_comment. Mixing methods or omitting all returns invalid_arguments.","name":"SLACK_REMOVE_REACTION_FROM_ITEM","parameters":{"description":"Request schema for `RemoveReactionFromItem`","properties":{"channel":{"description":"Channel ID of the message. Required if `timestamp` is provided.","title":"Channel","type":"string"},"file":{"description":"ID of the file to remove the reaction from.","title":"File","type":"string"},"file_comment":{"description":"ID of the file comment to remove the reaction from.","title":"File Comment","type":"string"},"name":{"description":"Name of the emoji reaction to remove (e.g., 'thumbsup'), without colons. Must be Slack's canonical emoji name; non-canonical names return a 'no_reaction' error.","examples":["thumbsup","smile","robot_face"],"title":"Name","type":"string"},"timestamp":{"description":"Timestamp of the message. Required if `channel` is provided.","title":"Timestamp","type":"string"}},"required":["name"],"title":"RemoveReactionFromItemRequest","type":"object"}},"type":"function"},{"function":{"description":"Removes the Slack reference to an external file (which must have been previously added via the remote files API), specified by either its `external_id` or `file` ID (one of which is required), without deleting the actual external file.","name":"SLACK_REMOVE_REMOTE_FILE","parameters":{"description":"Request schema for `RemoveRemoteFile`","properties":{"external_id":{"description":"Creator-defined, globally unique ID (GUID) for the file.","examples":["my-unique-file-guid-12345","doc-abc-external-id"],"title":"External Id","type":"string"},"file":{"description":"Slack-specific file ID.","examples":["F0123ABCDEF","F9876ZYXWVU"],"title":"File","type":"string"},"token":{"description":"Authentication token.","title":"Token","type":"string"}},"title":"RemoveRemoteFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Removes a star from a previously starred Slack item (message, file, file comment, channel, group, or DM), requiring identification via `file`, `file_comment`, `channel` (for channel/group/DM), or both `channel` and `timestamp` (for a message).","name":"SLACK_REMOVE_STAR","parameters":{"description":"Request schema for removing a star from an item in Slack.","properties":{"channel":{"description":"ID of the item (channel, private group, DM) or the message's channel (if `timestamp` is also provided).","examples":["C1234567890","G0987654321"],"title":"Channel","type":"string"},"file":{"description":"ID of the file to unstar.","examples":["F1234567890"],"title":"File","type":"string"},"file_comment":{"description":"ID of the file comment to unstar.","examples":["Fc1234567890"],"title":"File Comment","type":"string"},"timestamp":{"description":"Timestamp of the message to unstar; requires `channel`.","examples":["1629883200.000100","1503435956.000247"],"title":"Timestamp","type":"string"}},"title":"RemoveStarRequest","type":"object"}},"type":"function"},{"function":{"description":"Removes a specified user from a Slack conversation (channel); the caller must have permissions to remove users and cannot remove themselves using this action.","name":"SLACK_REMOVE_USER_FROM_CONVERSATION","parameters":{"description":"Request schema for `RemoveUserFromConversation`","properties":{"channel":{"description":"ID of the conversation (channel) to remove the user from.","examples":["C012AB3CD4E","G1234567890"],"title":"Channel","type":"string"},"user":{"description":"The ID of the user to be removed from the conversation.","examples":["U012A3BCD4E","W1234567890"],"title":"User","type":"string"}},"title":"RemoveUserFromConversationRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to remove a user from a Slack workspace. Use when you need to revoke a user's access to a workspace.","name":"SLACK_REMOVE_USER_FROM_WORKSPACE","parameters":{"description":"Request model for removing a user from a Slack workspace.","properties":{"team_id":{"description":"The ID of the workspace (e.g., T1234567890) from which to remove the user.","examples":["T0AB0BSTDV5","T1234567890"],"title":"Team Id","type":"string"},"user_id":{"description":"The ID of the user to remove from the workspace.","examples":["U0984HARZHQ","U1234567890"],"title":"User Id","type":"string"}},"required":["team_id","user_id"],"title":"RemoveUserFromWorkspaceRequest","type":"object"}},"type":"function"},{"function":{"description":"Renames a Slack channel, automatically adjusting the new name to meet naming conventions (e.g., converting to lowercase), which may affect integrations using the old name.","name":"SLACK_RENAME_CONVERSATION","parameters":{"description":"Request schema for `RenameConversation`","properties":{"channel":{"description":"ID of the conversation (channel) to rename.","examples":["C012AB3CD"],"title":"Channel","type":"string"},"name":{"description":"New name for the conversation. Must be 80 characters or less and contain only lowercase letters, numbers, hyphens, and underscores.","examples":["new-channel-name"],"title":"Name","type":"string"}},"title":"RenameConversationRequest","type":"object"}},"type":"function"},{"function":{"description":"Renames an existing custom emoji in a Slack workspace, updating all its instances.","name":"SLACK_RENAME_EMOJI","parameters":{"description":"Request schema for `RenameEmoji`","properties":{"name":{"description":"Current name of the custom emoji to be renamed. Colons (e.g., `:current_emoji:`) are optional.","examples":["current_emoji_name","old_face"],"title":"Name","type":"string"},"new_name":{"description":"Desired new name for the custom emoji. Must be unique within the workspace and adhere to Slack's emoji naming conventions.","examples":["new_emoji_name","updated_icon"],"title":"New Name","type":"string"}},"required":["name","new_name"],"title":"RenameEmojiRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to wipe all valid sessions on all devices for a given user. Use when you need to force a user to re-authenticate due to security concerns or account changes.","name":"SLACK_RESET_USER_SESSIONS","parameters":{"description":"Request model for resetting user sessions on all devices.","properties":{"mobile_only":{"description":"Only expire mobile sessions. Defaults to false if not specified.","title":"Mobile Only","type":"boolean"},"user_id":{"description":"The ID of the user to wipe sessions for (e.g., U1234567890).","examples":["U1234567890","U0984HGKCG2"],"title":"User Id","type":"string"},"web_only":{"description":"Only expire web sessions. Defaults to false if not specified.","title":"Web Only","type":"boolean"}},"required":["user_id"],"title":"ResetUserSessionsRequest","type":"object"}},"type":"function"},{"function":{"description":"Restrict an app for installation on a workspace. Use when you need to prevent an app from being installed on a specific workspace or enterprise organization.","name":"SLACK_RESTRICT_APP_INSTALLATION","parameters":{"description":"Request schema for restricting an app for installation on a workspace.","properties":{"app_id":{"description":"The ID of the app to restrict (e.g., A08U8HZHY0Y). Either app_id or request_id must be provided.","examples":["A08U8HZHY0Y"],"title":"App Id","type":"string"},"enterprise_id":{"description":"The enterprise organization ID to restrict the app installation for (e.g., E0984HGHPJ6). Either team_id or enterprise_id must be provided.","examples":["E0984HGHPJ6"],"title":"Enterprise Id","type":"string"},"request_id":{"description":"The ID of the app installation request to restrict. Either app_id or request_id must be provided.","examples":["Ar1234567890"],"title":"Request Id","type":"string"},"team_id":{"description":"The workspace ID to restrict the app installation for (e.g., T1234567890). Either team_id or enterprise_id must be provided.","examples":["T1234567890"],"title":"Team Id","type":"string"}},"title":"RestrictAppInstallationRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves the authenticated user's and their team's identity, with details varying based on OAuth scopes (e.g., `identity.basic`, `identity.email`, `identity.avatar`).","name":"SLACK_RETRIEVE_A_USER_S_IDENTITY_DETAILS","parameters":{"description":"User identification is based on the provided authentication token; no request body parameters are needed.","properties":{},"title":"RetrieveAUserSIdentityDetailsRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves metadata for a Slack conversation by ID (e.g., name, purpose, creation date, with options for member count/locale), excluding message content. The `channel` parameter is effectively required. Private channels, DMs, or channels where the app lacks membership may return restricted data; check `is_archived` and `is_member` fields in the response to diagnose access issues. Bulk lookups may trigger HTTP 429 rate limiting; honor the `Retry-After` response header.","name":"SLACK_RETRIEVE_CONVERSATION_INFORMATION","parameters":{"description":"Request schema for `RetrieveConversationInformation`","properties":{"channel":{"description":"The ID of the conversation (channel, direct message, or multi-person direct message) to retrieve information for. Effectively required — omitting this parameter yields no useful data despite being marked optional.","examples":["C1234567890","D0G9QPYHR","G01234567"],"title":"Channel","type":"string"},"include_locale":{"description":"If true, the response will include the locale setting for the conversation. Defaults to false.","title":"Include Locale","type":"boolean"},"include_num_members":{"description":"If true, the response will include the number of members in the conversation. Defaults to false.","title":"Include Num Members","type":"boolean"}},"title":"RetrieveConversationInformationRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a paginated list of active member IDs (not names, emails, or presence) for a specified Slack public channel, private channel, DM, or MPIM. Returns only user IDs; use a user-lookup tool to enrich member data.","name":"SLACK_RETRIEVE_CONVERSATION_MEMBERS_LIST","parameters":{"description":"Request schema for `RetrieveConversationMembersList`","properties":{"channel":{"description":"ID of the conversation (public channel, private channel, direct message, or multi-person direct message) for which to retrieve the member list. Public channel IDs typically start with 'C', private channels or multi-person direct messages (MPIMs) with 'G', and direct messages (DMs) with 'D'. Channel names are NOT accepted — only IDs. Obtain IDs via SLACK_FIND_CHANNELS or SLACK_LIST_CONVERSATIONS. For private channels and MPIMs, the app must have required scopes and be a member of the conversation, otherwise members may not be returned.","examples":["C1234567890","G0987654321","D12345ABCDE"],"title":"Channel","type":"string"},"cursor":{"description":"Pagination cursor value for fetching specific pages of results. To retrieve the next page, provide the `next_cursor` value obtained from the `response_metadata` of the previous API call. If omitted or empty, the first page of members is fetched. For more details on pagination, refer to Slack API documentation. Loop by passing `next_cursor` into subsequent calls until `next_cursor` is empty to avoid silently truncating large member lists.","examples":["dXNlcj1VMEc5V0ZYTlo=","bmV4dF90czoxNTEyMDg1ODYxMDAwNTZa"],"title":"Cursor","type":"string"},"limit":{"description":"The maximum number of members to return per page. Fewer items may be returned than the requested limit, even if more members exist and the end of the list hasn't been reached.","examples":["100","200"],"title":"Limit","type":"integer"}},"title":"RetrieveConversationMembersListRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a Slack user's current Do Not Disturb (DND) status to determine their availability before interaction; any specified user ID must be a valid Slack user ID.","name":"SLACK_RETRIEVE_CURRENT_USER_DND_STATUS","parameters":{"description":"Request schema for retrieving the current Do Not Disturb (DND) status of a user.","properties":{"team_id":{"description":"Encoded team ID where the passed user param belongs. Required if an org token is used. If no user param is passed, then a team which has access to the app should be passed.","examples":["T1234567890"],"title":"Team Id","type":"string"},"user":{"description":"User ID to fetch DND status for. If not provided, fetches the DND status for the authenticated user.","examples":["U012ABCDEF","W12345678"],"title":"User","type":"string"}},"title":"RetrieveCurrentUserDndStatusRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves detailed metadata and paginated comments for a specific Slack file ID; does not download file content.","name":"SLACK_RETRIEVE_DETAILED_INFORMATION_ABOUT_A_FILE","parameters":{"description":"Request model for retrieving detailed information about a specific file, including parameters for comment pagination.","properties":{"count":{"description":"Number of comments to retrieve per page. Used for comment pagination. Slack's default is 100 if not provided.","examples":[20,100],"title":"Count","type":"integer"},"cursor":{"description":"Pagination cursor for retrieving comments. Set to `next_cursor` from a previous response's `response_metadata` to fetch the next page of comments. Essential for navigating through large sets of comments. See [pagination](https://slack.dev) for more details.","examples":["dXNlcjpVMDYxRkExNDIK","bmV4dF90czoxNTEyMDg2NDE1MDAwOTc2"],"title":"Cursor","type":"string"},"file":{"description":"ID of the file to retrieve information for. This is a required field.","examples":["F123ABCDEF0"],"title":"File","type":"string"},"limit":{"description":"The maximum number of comments to retrieve. This is an upper limit, not a guarantee of how many will be returned. Primarily used for comment pagination.","examples":["10","50"],"title":"Limit","type":"integer"},"page":{"description":"Page number of comment results to retrieve. Used for comment pagination. Slack's default is 1 if not provided. `cursor`-based pagination is generally preferred.","examples":[1,3],"title":"Page","type":"integer"}},"required":["file"],"title":"RetrieveDetailedInformationAboutAFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves comprehensive information for a valid Slack user ID, excluding message history and channel memberships. Sensitive fields like `email` and `phone` require the `users:read.email` scope and may be silently omitted based on workspace privacy policies.","name":"SLACK_RETRIEVE_DETAILED_USER_INFORMATION","parameters":{"description":"Request schema for `RetrieveDetailedUserInformation`","properties":{"include_locale":{"description":"Set to `true` to include the user's locale (e.g., `en-US`) in the response. Defaults to `false`.","title":"Include Locale","type":"boolean"},"user":{"description":"The ID of the user to retrieve information for. Must be a Slack user ID (U- or W-prefixed); passing emails, display names, or other non-ID strings returns a `user_not_found` error.","examples":["U012ABCDEF","W021XYZABC"],"title":"User","type":"string"}},"title":"RetrieveDetailedUserInformationRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves a permalink URL for a specific message in a Slack channel or conversation; the permalink respects Slack's privacy settings.","name":"SLACK_RETRIEVE_MESSAGE_PERMALINK_URL","parameters":{"description":"Request schema for `RetrieveMessagePermalinkUrl`","properties":{"channel":{"description":"The ID of the conversation or channel containing the message. This can be a public channel ID, a private channel ID, a direct message channel ID, or a multi-person direct message channel ID. Must be a channel ID, not a channel name; use SLACK_FIND_CHANNELS to resolve names to IDs.","examples":["C012AB3CD","G123456"],"title":"Channel","type":"string"},"message_ts":{"description":"A message's `ts` value (timestamp), uniquely identifying it within a channel. Example: '1610144875.000600'.","examples":["1610144875.000600","15712345.001500"],"title":"Message Ts","type":"string"}},"required":["channel","message_ts"],"title":"RetrieveMessagePermalinkUrlRequest","type":"object"}},"type":"function"},{"function":{"description":"Retrieves profile information for a specified Slack user (defaults to the authenticated user if `user` ID is omitted); a provided `user` ID must be valid. Sensitive fields like email and phone may be silently omitted if required scopes (e.g., `users:read.email`) are not granted or workspace privacy policies restrict access.","name":"SLACK_RETRIEVE_USER_PROFILE_INFORMATION","parameters":{"description":"Specifies the user and options for retrieving their profile.","properties":{"include_labels":{"description":"Include human-readable labels for custom profile fields. API defaults to false.","examples":[true,false],"title":"Include Labels","type":"boolean"},"user":{"description":"User ID to retrieve profile information for; defaults to the authenticated user.","examples":["U012A3CDE","W1234567890"],"title":"User","type":"string"}},"title":"RetrieveUserProfileInformationRequest","type":"object"}},"type":"function"},{"function":{"description":"Revokes a Slack file's public URL, making it private; this is a no-op if not already public and is irreversible.","name":"SLACK_REVOKE_FILE_PUBLIC_SHARING","parameters":{"description":"Request schema for `RevokeFilePublicSharing`","properties":{"file":{"description":"The ID of the file for which to revoke the public URL. This unique identifier typically starts with 'F'.","examples":["F123ABC456"],"title":"File","type":"string"}},"required":["file"],"title":"RevokeFilePublicSharingRequest","type":"object"}},"type":"function"},{"function":{"description":"Starts a Real Time Messaging session and returns a WebSocket URL. Use when you need to establish a persistent RTM connection to receive real-time events from Slack.","name":"SLACK_RTM_CONNECT","parameters":{"additionalProperties":false,"description":"Request schema for rtm.connect API method. Used to start a Real Time Messaging session.","properties":{"batch_presence_aware":{"description":"Batch presence deliveries via subscription. Enabling changes the shape of `presence_change` events. See batch presence documentation.","title":"Batch Presence Aware","type":"boolean"},"presence_sub":{"description":"Only deliver presence events when requested by subscription. See presence subscriptions documentation.","title":"Presence Sub","type":"boolean"}},"title":"RtmConnectRequest","type":"object"}},"type":"function"},{"function":{"description":"Starts a Real Time Messaging API session for Slack. Use when you need to establish an RTM connection with additional options beyond rtm.connect. Note: RTM API is deprecated; consider Socket Mode for new apps.","name":"SLACK_RTM_START","parameters":{"description":"Request schema for RTM Start action.","properties":{"batch_presence_aware":{"description":"Batch presence deliveries via subscription. If true, presence change events will be batched for subscribed users instead of delivered individually.","examples":[true,false],"title":"Batch Presence Aware","type":"boolean"},"include_locale":{"description":"Set to true to receive locale for users and channels. When enabled, the response will include locale information for users and channels.","examples":[true,false],"title":"Include Locale","type":"boolean"},"mpim_aware":{"description":"Returns MPIMs (multiparty instant messages / group DMs) in the API response when set to true. If false or omitted, MPIMs may not be included in the channels list.","examples":[true,false],"title":"Mpim Aware","type":"boolean"},"no_latest":{"description":"Exclude latest timestamps for channels, groups, and direct messages. When set to true, automatically sets no_unreads to true as well.","examples":[true,false],"title":"No Latest","type":"boolean"},"no_unreads":{"description":"Skip unread counts for each channel. When set to true, the response will not include unread message counts for channels, which can reduce payload size.","examples":[true,false],"title":"No Unreads","type":"boolean"},"presence_sub":{"description":"Only deliver presence events when requested by subscription. If true, presence change events will only be delivered for users explicitly subscribed to via the presence_query method.","examples":[true,false],"title":"Presence Sub","type":"boolean"},"simple_latest":{"description":"Return timestamp only for latest message in each channel. When true, only the message timestamp is returned instead of the full message object, reducing payload size.","examples":[true,false],"title":"Simple Latest","type":"boolean"}},"title":"RtmStartRequest","type":"object"}},"type":"function"},{"function":{"description":"Schedules a message to a Slack channel, DM, or private group for a future time (`post_at`), requiring `text`, `blocks`, or `attachments` for content; scheduling is limited to 120 days in advance.","name":"SLACK_SCHEDULE_MESSAGE","parameters":{"description":"Request schema for `ScheduleMessage`","properties":{"attachments":{"description":"This is Slack's legacy 'secondary attachments' field for adding rich formatting elements like colored sidebars, structured fields, and author info. Pass as a JSON string array. NOT for file/image uploads. To send files or images, use 'SLACK_UPLOAD_OR_CREATE_A_FILE_IN_SLACK' instead.","examples":["[{\"fallback\": \"Summary text\", \"color\": \"#36a64f\", \"title\": \"Title\", \"text\": \"Content\", \"fields\": [{\"title\": \"Field\", \"value\": \"Value\", \"short\": true}]}]"],"title":"Attachments","type":"string"},"blocks":{"description":"**DEPRECATED**: Use `markdown_text` field instead. JSON array of structured blocks as a URL-encoded string for message layout and design. Required if `text` and `attachments` are not provided.","examples":["[{\"type\": \"section\", \"text\": {\"type\": \"mrkdwn\", \"text\": \"New Paid Time Off request from \"}}]"],"title":"Blocks","type":"string"},"channel":{"description":"Channel, private group, or DM channel ID (e.g., C1234567890) or name (e.g., #general) to send the message to. Bot must be a member of the target channel; missing membership returns `not_in_channel` error.","examples":["C1234567890","#general","U1234567890"],"title":"Channel","type":"string"},"link_names":{"description":"Pass true to automatically link channel names (e.g., #general) and usernames (e.g., @user). NOTE: This parameter is deprecated by Slack; the linking behavior is primarily controlled by Slack's default message parsing. For explicit control, use the 'parse' parameter instead (set to 'full' to enable auto-linking).","title":"Link Names","type":"boolean"},"markdown_text":{"description":"**PREFERRED**: Write your scheduled message in markdown for nicely formatted display. Supports headers (#), bold (**text**), italic (*text*), strikethrough (~~text~~), code (```), links ([text](url)), quotes (>), and dividers (---). Your message will be posted with beautiful formatting.","examples":["# Scheduled Reminder\n\nDon't forget about the **team meeting** tomorrow at *2 PM*!\n\n```\nZoom: https://zoom.us/meeting-id\n```","## Weekly Report\n\n- **Tasks completed**: 12\n- *In progress*: 3\n- ~~Blocked~~: **Resolved**\n\n---\n\n**Due**: End of week"],"title":"Markdown Text","type":"string"},"parse":{"description":"Message text treatment: `full` for special formatting, `none` otherwise (default). See Slack's `chat.postMessage` docs for options.","examples":["none","full"],"title":"Parse","type":"string"},"post_at":{"description":"Unix EPOCH timestamp (integer seconds since 1970-01-01 00:00:00 UTC) for the future message send time. Must be strictly greater than current time (past values return `time_in_past` error). Always convert local times to UTC epoch seconds before use; Slack evaluates in UTC only.","examples":["1678886400"],"title":"Post At","type":"string"},"reply_broadcast":{"description":"With `thread_ts`, makes reply visible to all in channel, not just thread members. Defaults to `false`.","title":"Reply Broadcast","type":"boolean"},"team_id":{"description":"Team ID for Enterprise Grid workspaces. Required for orgs with multiple workspaces.","examples":["T1234567890"],"title":"Team Id","type":"string"},"text":{"description":"This sends raw text only, use markdown_text field for formatting. Primary text of the message; formatting with `mrkdwn` applies. Required if `blocks` and `attachments` are not provided.","examples":["Hello, world!"],"title":"Text","type":"string"},"thread_ts":{"description":"Timestamp of the parent message for the scheduled message to be a thread reply. Must be float seconds (e.g., `1234567890.123456`).","examples":["1405894322.002768"],"title":"Thread Ts","type":"string"},"unfurl_links":{"description":"Pass false to disable automatic link unfurling. Defaults to true. NOTE: Due to a known Slack API limitation, this parameter may not be respected for scheduled messages (works correctly for chat.postMessage but may be ignored by chat.scheduleMessage).","title":"Unfurl Links","type":"boolean"},"unfurl_media":{"description":"Pass false to disable automatic media unfurling. Defaults to true. NOTE: Due to a known Slack API limitation, this parameter may not be respected for scheduled messages (works correctly for chat.postMessage but may be ignored by chat.scheduleMessage).","title":"Unfurl Media","type":"boolean"}},"title":"ScheduleMessageRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to retrieve SCIM service provider configuration from Slack. Use when you need to discover Slack's SCIM API capabilities including supported authentication schemes, bulk operations, filtering, and other service provider features.","name":"SLACK_SCIM_GET_CONFIG","parameters":{"description":"Request schema for `SlackScimGetConfig`. No parameters required.","properties":{},"title":"SlackScimGetConfigRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to search all messages and files. Use when you need unified content search across channels and files in one call. Results are scoped to content visible to the authenticated token; missing hits in private or restricted channels reflect permission/membership gaps. Response separates messages and files into distinct sections — explicitly read the files section for document results. Results are index-based and may lag several minutes behind real-time; use SLACK_FETCH_CONVERSATION_HISTORY for near-real-time per-channel coverage. Paginated searches exceeding ~1 req/sec may return HTTP 429 too_many_requests; honor the Retry-After header and resume from the last page.","name":"SLACK_SEARCH_ALL","parameters":{"description":"Request schema for `SearchAll`","properties":{"count":{"description":"Number of results per page; default is 20; max is 100.","examples":[20,50,100],"title":"Count","type":"integer"},"highlight":{"description":"If true, search terms are wrapped with markers for client-side highlighting.","examples":[true,false],"title":"Highlight","type":"boolean"},"page":{"description":"Page number of results to return; default is 1. Iterate until total_count or page_count signals completion.","examples":[1,2,3],"title":"Page","type":"integer"},"query":{"description":"Search query supporting Slack search modifiers/booleans. Date modifiers after:, before:, on: are UTC day-based; after: is exclusive, so convert time ranges to explicit UTC dates to avoid boundary gaps — sub-day precision requires client-side filtering by numeric ts. Spaces act as logical AND; omitting in:#channel or date filters makes search workspace-wide and slow. Malformed modifiers (e.g., wrong from: format) silently return zero results.","examples":["error report","in:#channel from:@user has:file"],"title":"Query","type":"string"},"sort":{"description":"Sort by `score` (relevance) or `timestamp` (chronological).","examples":["score","timestamp"],"title":"Sort","type":"string"},"sort_dir":{"description":"Sort direction: `asc` or `desc`.","examples":["asc","desc"],"title":"Sort Dir","type":"string"},"team_id":{"description":"Encoded team ID to search in; required when using an org-level token.","title":"Team Id","type":"string"}},"required":["query"],"title":"SearchAllRequest","type":"object"}},"type":"function"},{"function":{"description":"Workspace‑wide Slack message search with date ranges and filters. Use `query` modifiers (e.g., in:#channel, from:@user, before/after:YYYY-MM-DD), sorting (score/timestamp), and pagination.","name":"SLACK_SEARCH_MESSAGES","parameters":{"description":"Request schema for `SearchMessages`","properties":{"auto_paginate":{"default":false,"description":"When enabled, 'count' becomes the total messages desired instead of per-page limit. System automatically handles pagination to collect the specified total. Cannot be used with 'page' parameter - choose either automatic collection or manual page control. Usage: If you fetched 100 messages but pagination shows 500 total available, set auto_paginate=true and count=500 to get all results at once.","examples":[true,false],"title":"Auto Paginate","type":"boolean"},"count":{"default":1,"description":"Without auto_paginate: Number of messages per page (max 100). With auto_paginate: Total messages desired. Set count=500 to get 500 messages with automatic pagination handling.","examples":[20,50,100,500,1000],"title":"Count","type":"integer"},"cursor":{"description":"Cursor for cursor-mark pagination. Use `*` for the first call, then use `next_cursor` from the previous response for subsequent calls. This is the modern pagination approach recommended by Slack. Cannot be used with `page` parameter - choose either cursor-based or page-based pagination.","examples":["*","dXNlcjpVMEc5V0ZYTlo="],"title":"Cursor","type":"string"},"highlight":{"description":"Enable highlighting of search terms in results.","examples":[true,false],"title":"Highlight","type":"boolean"},"page":{"description":"Page number for manual pagination control. Cannot be used with auto_paginate - choose either automatic collection OR manual page control, not both.","examples":[1,2,3],"title":"Page","type":"integer"},"query":{"description":"Search query supporting various modifiers for precise filtering:\n \n **Date Modifiers:**\n - `on:YYYY-MM-DD` - Messages on specific date (e.g., `on:2025-09-25`)\n - `before:YYYY-MM-DD` - Messages before date\n - `after:YYYY-MM-DD` - Messages after date \n - `during:YYYY-MM-DD` or `during:month` or `during:YYYY` - Messages during day/month/year\n\n **Location Modifiers:**\n - `in:#channel-name` - Messages in specific channel\n - `in:@username` - Direct messages with user\n\n **User Modifiers:**\n - `from:@username` - Messages from specific user\n - `from:botname` - Messages from bot\n\n **Content Modifiers:**\n - `has:link` - Messages with links\n - `has:file` - Messages with files\n - `has::star:` - Starred messages\n - `has::pin:` - Pinned messages\n\n **Special Characters:**\n - `\"exact phrase\"` - Search exact phrase\n - `*wildcard` - Wildcard matching\n - `-exclude` - Exclude words\n\n **Combinations:** Mix modifiers like `\"project update\" on:2025-09-25 in:#marketing from:@john`","examples":["on:2025-09-25","after:2025-01-01 before:2025-12-31","during:september","during:2025-09-25","product launch in:#marketing","bug report from:@jane has:file","\"meeting notes\" on:2024-07-20","urgent -resolved in:#support","\"project update\" on:2025-09-25 from:@john in:#team-updates","has:link during:august from:@bot","deployment after:2025-09-20 in:#engineering"],"title":"Query","type":"string"},"sort":{"description":"Sort results by `score` (relevance) or `timestamp` (chronological).","examples":["score","timestamp"],"title":"Sort","type":"string"},"sort_dir":{"description":"Sort direction: `asc` (ascending) or `desc` (descending).","examples":["asc","desc"],"title":"Sort Dir","type":"string"},"team_id":{"description":"The ID of the workspace to search in. Only relevant when using an org-level token. This field will be ignored if using a workspace-level token.","examples":["T1234567890"],"title":"Team Id","type":"string"}},"required":["query"],"title":"SearchMessagesRequest","type":"object"}},"type":"function"},{"function":{"description":"Sends an ephemeral message visible only to the specified `user` in a channel; other channel members cannot see it. Both the bot and the target user must be members of the specified channel.","name":"SLACK_SEND_EPHEMERAL_MESSAGE","parameters":{"description":"Request schema for `SendEphemeralMessage`","properties":{"as_user":{"description":"Legacy parameter for authenticated user authorship. Defaults to true without chat:write:bot scope, false otherwise. Setting to true requires chat:write:user scope for the authenticated user to author the message.","examples":[true,false],"title":"As User","type":"boolean"},"attachments":{"description":"This is Slack's legacy 'secondary attachments' field for adding rich formatting elements like colored sidebars, structured fields, and author info. Pass as a JSON string array. NOT for file/image uploads. To send files or images, use 'SLACK_UPLOAD_OR_CREATE_A_FILE_IN_SLACK' instead.","examples":["[{\"fallback\": \"Summary\", \"color\": \"#36a64f\", \"title\": \"Title\", \"text\": \"Content\"}]"],"title":"Attachments","type":"string"},"blocks":{"description":"A JSON-based array of structured blocks, presented as a URL-encoded string.","examples":["[{\"type\": \"section\", \"text\": {\"type\": \"plain_text\", \"text\": \"Hello world\"}}]"],"title":"Blocks","type":"string"},"channel":{"description":"Channel, private group, or DM channel to send message to. Can be an encoded ID, or a name.","examples":["C1234567890"],"title":"Channel","type":"string"},"icon_emoji":{"description":"Emoji to use as the icon for this message. Overrides icon_url. Must be used in conjunction with as_user set to false, otherwise ignored. See authorship below.","examples":[":chart_with_upwards_trend:"],"title":"Icon Emoji","type":"string"},"icon_url":{"description":"URL to an image to use as the icon for this message. Must be used in conjunction with as_user set to false, otherwise ignored. See authorship below.","examples":["http://lorempixel.com/48/48"],"title":"Icon Url","type":"string"},"link_names":{"description":"Find and link channel names and usernames.","examples":[true],"title":"Link Names","type":"boolean"},"markdown_text":{"description":"PREFERRED: Write your ephemeral message in markdown for nicely formatted display. Supports: headers (# ## ###), bold (**text** or __text__), italic (*text* or _text_), strikethrough (~~text~~), inline code (`code`), code blocks (```), links ([text](url)), block quotes (>), lists (- item, 1. item), dividers (--- or ***). IMPORTANT: Use \\n for line breaks (e.g., 'Line 1\\nLine 2'), not actual newlines. Incompatible with blocks or text parameters. Maximum 12,000 characters.","examples":["# Ephemeral Notice\n\nThis message is **only visible to you**.\n\n```\nStatus: Active\n```","## Private Update\n\n- Task 1: *Complete*\n- Task 2: **In Progress**\n\n---\n\n_This is confidential_"],"title":"Markdown Text","type":"string"},"parse":{"description":"Controls text parsing behavior. Use 'full' to enable automatic linking of @mentions, #channels, and URLs. Use 'none' to disable special parsing (URLs will still be clickable). Defaults to 'none'.","examples":["full","none"],"title":"Parse","type":"string"},"team_id":{"description":"Team ID for Enterprise Grid workspaces. Required when using an org-level token to specify which workspace the message should be sent to.","examples":["T1234567890"],"title":"Team Id","type":"string"},"text":{"description":"The message text to display. Required unless 'blocks' or 'attachments' is provided. When using blocks, this serves as fallback text for notifications. Supports markdown formatting.","examples":["Hello world","Check out this *important* update!"],"title":"Text","type":"string"},"thread_ts":{"description":"Provide another message's ts value to make this message a reply. Avoid using a reply's ts value; use its parent instead.","examples":["1234567890.123456"],"title":"Thread Ts","type":"string"},"user":{"description":"User ID of the user to send the ephemeral message to.","examples":["U0BPQUNTA"],"title":"User","type":"string"},"username":{"description":"Set your bot's user name. Must be used in conjunction with as_user set to false, otherwise ignored. See authorship below.","examples":["My Bot"],"title":"Username","type":"string"}},"required":["channel","user"],"title":"SendEphemeralMessageRequest","type":"object"}},"type":"function"},{"function":{"description":"Sends a 'me message' (e.g., '/me is typing') to a Slack channel, where it's displayed as a third-person user action; messages are plain text and the channel must exist and be accessible.","name":"SLACK_SEND_ME_MESSAGE","parameters":{"description":"Request schema for `SendMeMessage`","properties":{"channel":{"description":"Specifies the target channel by its public ID (e.g., 'C1234567890'), private group ID, IM channel ID, or name (e.g., '#general', '@username').","examples":["C1234567890","#random","D012345678"],"title":"Channel","type":"string"},"text":{"description":"Content of the 'me message', displayed as an action performed by the user (e.g., if text is 'is feeling happy', it appears as '*User is feeling happy*').","examples":["is preparing for a meeting.","updated the project status.","needs coffee."],"title":"Text","type":"string"}},"title":"SendMeMessageRequest","type":"object"}},"type":"function"},{"function":{"description":"Posts a message to a Slack channel, DM, or private group; requires at least one content field (`markdown_text`, `text`, `blocks`, or `attachments`) — omitting all causes a `no_text` error. Fails with `not_in_channel`, `channel_not_found`, or `channel_is_archived` if the bot lacks access. Body limit ~4000 characters. Rate-limited at ~1 req/sec (HTTP 429, honor `Retry-After`). Not idempotent — duplicate calls post duplicate messages.","name":"SLACK_SEND_MESSAGE","parameters":{"description":"Request schema for `SendMessage`","properties":{"attachments":{"description":"This is Slack's legacy 'secondary attachments' field for adding rich formatting elements like colored sidebars, structured fields, and author info to messages. Pass as a JSON string array. NOT for file/image uploads. To send a message with attachments of files or images, use the 'SLACK_UPLOAD_OR_CREATE_A_FILE_IN_SLACK' instead.","examples":["[{\"fallback\": \"Summary text\", \"color\": \"#36a64f\", \"title\": \"Title\", \"text\": \"Attachment content\", \"fields\": [{\"title\": \"Field\", \"value\": \"Value\", \"short\": true}]}]"],"title":"Attachments","type":"string"},"blocks":{"anyOf":[{"type":"string"},{"items":{"additionalProperties":true,"type":"object"},"type":"array"}],"description":"DEPRECATED: Use `markdown_text` field instead. Block Kit layout blocks for rich/interactive messages. Accepts either a URL-encoded JSON string or a list of block dictionaries. See Slack API Block Kit docs for structure.","examples":["%5B%7B%22type%22%3A%20%22section%22%2C%20%22text%22%3A%20%7B%22type%22%3A%20%22mrkdwn%22%2C%20%22text%22%3A%20%22Hello%2C%20world%21%22%7D%7D%5D",[{"text":{"text":"Hello, world!","type":"mrkdwn"},"type":"section"}]],"title":"Blocks"},"channel":{"description":"ID or name of the channel, private group, or IM channel to send the message to. Can be specified as either 'channel' or 'channel_id'. Do NOT include the '#' prefix (e.g., use 'general' not '#general') - any leading '#' will be automatically stripped. For DMs, use the channel ID returned by SLACK_OPEN_DM (starts with 'D'); usernames, emails, and user IDs are not valid DM targets.","examples":["C1234567890","general"],"title":"Channel","type":"string"},"link_names":{"description":"Automatically hyperlink channel names (e.g., #channel) and usernames (e.g., @user) in message text. Defaults to `false` for bot messages.","title":"Link Names","type":"boolean"},"markdown_text":{"description":"PREFERRED: Write your message in markdown for nicely formatted display. Supports: headers (# ## ###), bold (**text** or __text__), italic (*text* or _text_), strikethrough (~~text~~), inline code (`code`), code blocks (```), links ([text](url)), block quotes (>), lists (- item, 1. item), dividers (--- or ***), context blocks (:::context with images), and section buttons (:::section-button). IMPORTANT: Use \\n for line breaks (e.g., 'Line 1\\nLine 2'), not actual newlines. USER MENTIONS: To tag users, use their user ID with <@USER_ID> format (e.g., <@U1234567890>), not username. NOTE: Slack enforces a 50-block limit per message. Very long messages with extensive formatting may exceed this limit. If your message is very long, consider splitting it into multiple shorter messages or using simpler formatting.","examples":["# Status Update\n\nSystem is **running smoothly** with *excellent* performance.\n\n```bash\nkubectl get pods\n```\n\n> All services operational ✅","## Daily Report\n\n- **Deployments**: 5 successful\n- *Issues*: 0 critical\n- ~~Maintenance~~: **Completed**\n\n---\n\n**Next**: Monitor for 24h"],"title":"Markdown Text","type":"string"},"mrkdwn":{"description":"Controls Slack mrkdwn formatting for the top-level `text` field ONLY. Set to `false` to disable formatting (text appears as-is with literal asterisks, underscores, etc.). Default `true` enables mrkdwn formatting (*bold*, _italic_, etc.). NOTE: This parameter has NO effect on `blocks` or `markdown_text` - block content always uses its own formatting rules.","title":"Mrkdwn","type":"boolean"},"parse":{"const":"full","description":"Message text parsing behavior. Set to 'full' to parse as user-typed (auto-links @mentions, #channels). Omit for default behavior (no special parsing).","examples":["full"],"title":"Parse","type":"string"},"reply_broadcast":{"description":"If `true` for a threaded reply, also posts to main channel. Defaults to `false`.","title":"Reply Broadcast","type":"boolean"},"text":{"description":"DEPRECATED: This sends raw text only, use markdown_text field. Primary textual content. Recommended fallback if using `blocks` or `attachments`. Supports mrkdwn unless `mrkdwn` is `false`.","examples":["Hello from your friendly bot!","Reminder: Team meeting at 3 PM today."],"title":"Text","type":"string"},"thread_ts":{"description":"Timestamp (`ts`) of an existing message to make this a threaded reply. Use `ts` of the parent message, not another reply. Example: '1476746824.000004'.","examples":["1618033790.001500"],"title":"Thread Ts","type":"string"},"unfurl_links":{"description":"Enable unfurling of text-based URLs. Defaults `false` for bots, `true` if `as_user` is `true`.","title":"Unfurl Links","type":"boolean"},"unfurl_media":{"description":"Enable media previews (images, videos) from URLs. Set to `true` (default) to show media previews, `false` to hide them.","title":"Unfurl Media","type":"boolean"}},"required":["channel"],"title":"SendMessageRequest","type":"object"}},"type":"function"},{"function":{"description":"Promotes an existing workspace member (guest, regular user, or owner) to admin status. Use when you need to grant admin privileges to a user.","name":"SLACK_SET_ADMIN_USER","parameters":{"description":"Request schema for setting a user as admin in a Slack workspace.","properties":{"team_id":{"description":"The ID of the workspace (e.g., T1234567890) where the user will be set as admin. This uniquely identifies the Slack workspace.","examples":["T0984H91R2N","T1234567890"],"title":"Team Id","type":"string"},"user_id":{"description":"The ID of the user (e.g., U1234567890) to designate as an admin. This user must be an existing member of the workspace (guest, regular user, or owner).","examples":["U0AAXAXTMS5","U1234567890"],"title":"User Id","type":"string"}},"required":["team_id","user_id"],"title":"SetAdminUserRequest","type":"object"}},"type":"function"},{"function":{"description":"Sets the posting permissions for a public or private channel in Slack. Use this to control who can post messages, start threads, use @channel/@here mentions, and initiate huddles in a specific channel.","name":"SLACK_SET_CONVERSATION_PREFS","parameters":{"description":"Request schema for `SetConversationPrefs`","properties":{"channel_id":{"description":"The channel to set the prefs for.","examples":["C0984HA4318","C1234567890"],"title":"Channel Id","type":"string"},"prefs":{"description":"The prefs for this channel in a stringified JSON format. Example: '{\"who_can_post\":\"type:admin\"}' to restrict posting to admins only, or '{\"who_can_post\":{\"type\":[\"admin\",\"ra\"]}}' to allow admins and regular users. The prefs object can include: who_can_post (defines who can post messages), can_thread (defines who can respond in threads), can_huddle (boolean), enable_at_channel (object with 'enabled' boolean), enable_at_here (object with 'enabled' boolean).","examples":["{\"who_can_post\":\"type:admin\"}","{\"who_can_post\":{\"type\":[\"admin\",\"ra\"]}}","{\"can_huddle\":false,\"enable_at_channel\":{\"enabled\":false}}"],"title":"Prefs","type":"string"}},"required":["channel_id","prefs"],"title":"SetConversationPrefsRequest","type":"object"}},"type":"function"},{"function":{"description":"Sets the purpose (a short description of its topic/goal, displayed in the header) for a Slack conversation; the calling user must be a member.","name":"SLACK_SET_CONVERSATION_PURPOSE","parameters":{"description":"Request schema for `SetConversationPurpose`","properties":{"channel":{"description":"The ID of the conversation (channel, direct message, or group message) to set the purpose for.","examples":["C012AB3CD4E","D0G9ALE3P","G12345678"],"title":"Channel","type":"string"},"purpose":{"description":"The new purpose for the conversation. This text will be displayed as the channel description. The maximum length is 250 characters.","examples":["Discuss project milestones and deadlines.","Team updates and daily stand-ups."],"title":"Purpose","type":"string"}},"title":"SetConversationPurposeRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to set the default channels of a workspace. Use when you need to configure which channels new members automatically join.","name":"SLACK_SET_DEFAULT_CHANNELS","parameters":{"description":"Request schema for `SetDefaultChannels`","properties":{"channel_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"string"}],"description":"A list of channel IDs to set as default channels. Can also accept a comma-separated string for backwards compatibility.","examples":[["C0ACHDEQ3JP","C0A3KLXQ7J8"],"C0ACHDEQ3JP,C0A3KLXQ7J8"],"title":"Channel Ids"},"team_id":{"description":"ID for the workspace to set the default channel for.","examples":["T0AB0BSTDV5"],"title":"Team Id","type":"string"}},"required":["team_id","channel_ids"],"title":"SetDefaultChannelsRequest","type":"object"}},"type":"function"},{"function":{"description":"Turns on Do Not Disturb mode for the current user, or changes its duration.","name":"SLACK_SET_DND_DURATION","parameters":{"description":"Request schema for `SetDndDuration`","properties":{"num_minutes":{"description":"Number of minutes, from now, to snooze until.","examples":["60"],"title":"Num Minutes","type":"string"}},"required":["num_minutes"],"title":"SetDndDurationRequest","type":"object"}},"type":"function"},{"function":{"description":"This method allows the user to set their profile image.","name":"SLACK_SET_PROFILE_PHOTO","parameters":{"description":"Request schema for `SetProfilePhoto`","properties":{"crop_w":{"description":"Width/height of crop box (always square)","title":"Crop W","type":"integer"},"crop_x":{"description":"X coordinate of top-left corner of crop box","title":"Crop X","type":"integer"},"crop_y":{"description":"Y coordinate of top-left corner of crop box","title":"Crop Y","type":"integer"},"image":{"description":"Profile image file to upload. Maximum 1024x1024 pixels, minimum 512x512 pixels recommended.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"}},"required":["image"],"title":"SetProfilePhotoRequest","type":"object"}},"type":"function"},{"function":{"description":"Marks a message, specified by its timestamp (`ts`), as the most recently read for the authenticated user in the given `channel`, provided the user is a member of the channel and the message exists within it.","name":"SLACK_SET_READ_CURSOR_IN_A_CONVERSATION","parameters":{"description":"Request schema for `SetReadCursorInAConversation`","properties":{"channel":{"description":"The ID of the public channel, private channel, or direct message to set the read cursor for.","examples":["C012QRSTUW9","G012ABCDEFG","D012HIJKLMN"],"title":"Channel","type":"string"},"ts":{"description":"The timestamp of the message to mark as the most recently read. Must be a Slack timestamp string with microsecond precision in the format 'UNIX_TIMESTAMP.MICROSECONDS' (e.g., '1625800000.000200').","examples":["1678886400.000100","1702982400.123456"],"title":"Ts","type":"string"}},"title":"SetReadCursorInAConversationRequest","type":"object"}},"type":"function"},{"function":{"description":"Sets or updates the topic for a specified Slack conversation.","name":"SLACK_SET_THE_TOPIC_OF_A_CONVERSATION","parameters":{"description":"Request schema for `SetTheTopicOfAConversation`","properties":{"channel":{"description":"The ID of the public channel, private channel, direct message, or multi-person direct message conversation for which the topic will be set. Must be a channel ID (C/G/D prefix), not a human-readable name like '#general'.","examples":["C1234567890","G0123456789","D012345678"],"title":"Channel","type":"string"},"topic":{"description":"The new topic for the conversation. It must be a string up to 250 characters long. Text formatting and linkification are not supported.","examples":["Q4 Planning Discussion","Weekly Sync Updates"],"title":"Topic","type":"string"}},"title":"SetTheTopicOfAConversationRequest","type":"object"}},"type":"function"},{"function":{"description":"Tool to mark a user as active in Slack. Note: This endpoint is deprecated and non-functional - it exists for backwards compatibility but does not perform any action.","name":"SLACK_SET_USER_ACTIVE","parameters":{"description":"Request schema for users.setActive endpoint. This endpoint is deprecated and non-functional.","properties":{},"title":"SetUserActiveRequest","type":"object"}},"type":"function"},{"function":{"description":"Manually sets a user's Slack presence, overriding automatic detection; this setting persists across connections but can be overridden by user actions or Slack's auto-away (e.g., after 10 mins of inactivity).","name":"SLACK_SET_USER_PRESENCE","parameters":{"description":"Request schema for SetUserPresence, allowing manual setting of a user's presence.","properties":{"presence":{"description":"The presence state to set for the user.","enum":["auto","away"],"examples":["auto","away"],"title":"Presence","type":"string"}},"required":["presence"],"title":"SetUserPresenceRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates a Slack user's profile, setting either individual fields or multiple fields via a JSON object.","name":"SLACK_SET_USER_PROFILE","parameters":{"description":"Request schema for updating a Slack user's profile information.","properties":{"name":{"description":"Name of a single profile field to set. Use with `value` if `profile` is not provided.","examples":["first_name","status_text","custom_field_id_X123"],"title":"Name","type":"string"},"profile":{"description":"JSON string of key-value pairs for profile fields to update (max 50 fields, 255 chars per field name). Pass as a plain JSON string (not URL-encoded). If provided, `name` and `value` are ignored.","examples":["{\"first_name\": \"Alice\", \"last_name\": \"Wonderland\", \"status_text\": \"Exploring\", \"status_emoji\": \":rabbit:\"}"],"title":"Profile","type":"string"},"user":{"description":"ID of the user whose profile will be updated; defaults to authenticated user. Team admins on paid teams can specify another member's ID.","examples":["U012A3CDE"],"title":"User","type":"string"},"value":{"description":"Value for the single profile field specified by `name`. Use with `name` if `profile` is not provided.","examples":["John Doe","On a call","New custom value"],"title":"Value","type":"string"}},"title":"SetUserProfileRequest","type":"object"}},"type":"function"},{"function":{"description":"Set the description of a given workspace. Use when you need to update or change the description text displayed for a Slack workspace.","name":"SLACK_SET_WORKSPACE_DESCRIPTION","parameters":{"description":"Request schema for setting workspace description.","properties":{"description":{"description":"The new description for the workspace.","examples":["Test workspace for API testing and development","Engineering team workspace"],"title":"Description","type":"string"},"team_id":{"description":"ID for the workspace to set the description for.","examples":["T0AB0BSTDV5","T1234567890"],"title":"Team Id","type":"string"}},"required":["team_id","description"],"title":"SetWorkspaceDescriptionRequest","type":"object"}},"type":"function"},{"function":{"description":"Sets the icon of a workspace. Use when you need to update or change the workspace icon image. The image must be publicly accessible and in a supported format (GIF, PNG, JPG, JPEG, HEIC, or HEIF).","name":"SLACK_SET_WORKSPACE_ICON","parameters":{"description":"Request schema for `SetWorkspaceIcon`","properties":{"image_url":{"description":"Publicly accessible URL of the image to set as the workspace icon. Must be in GIF, PNG, JPG, JPEG, HEIC, or HEIF format. Ideally 512x512 pixels for best display quality.","examples":["https://example.com/workspace-icon.png","https://httpbin.org/image/png"],"title":"Image Url","type":"string"},"team_id":{"description":"ID of the workspace to set the icon for.","examples":["T1234567890"],"title":"Team Id","type":"string"}},"required":["team_id","image_url"],"title":"SetWorkspaceIconRequest","type":"object"}},"type":"function"},{"function":{"description":"Set the name of a given Slack workspace. Use when you need to update the display name for a workspace in an Enterprise Grid organization.","name":"SLACK_SET_WORKSPACE_NAME","parameters":{"description":"Request schema for `SetWorkspaceName`","properties":{"name":{"description":"The new name of the workspace.","examples":["Test Workspace Name Update","My Awesome Team"],"title":"Name","type":"string"},"team_id":{"description":"ID for the workspace to set the name for.","examples":["T0AB0BSTDV5","T12345ABCDE"],"title":"Team Id","type":"string"}},"required":["team_id","name"],"title":"SetWorkspaceNameRequest","type":"object"}},"type":"function"},{"function":{"description":"Set an existing guest, regular user, or admin user to be a workspace owner. Use when you need to promote a workspace member to owner status. Requires an Enterprise Grid workspace.","name":"SLACK_SET_WORKSPACE_OWNER","parameters":{"description":"Request schema for setting an existing user to be a workspace owner. Only available for Enterprise Grid workspaces.","properties":{"team_id":{"description":"The ID of the workspace or organization (e.g., T1234567890). This specifies which workspace the user should become an owner of. Must be an Enterprise Grid workspace.","examples":["T0984H91R2N","T1234567890"],"title":"Team Id","type":"string"},"user_id":{"description":"The ID of the user to promote to workspace owner (e.g., U1234567890). The user must already be a member, guest, or admin of the workspace.","examples":["U0984HARZHQ","U1234567890"],"title":"User Id","type":"string"}},"required":["team_id","user_id"],"title":"SetWorkspaceOwnerRequest","type":"object"}},"type":"function"},{"function":{"description":"Set the workspaces in an Enterprise grid org that connect to a channel. Use when you need to share a public or private channel with specific workspaces in an Enterprise Grid organization.","name":"SLACK_SET_WORKSPACES_FOR_CHANNEL","parameters":{"description":"Request schema for `SetWorkspacesForChannel`","properties":{"channel_id":{"description":"The encoded channel ID to add or remove to workspaces.","examples":["C0ACHDEQ3JP"],"title":"Channel Id","type":"string"},"org_channel":{"description":"True if channel has to be converted to an org channel.","title":"Org Channel","type":"boolean"},"target_team_ids":{"description":"A comma-separated list of workspaces to which the channel should be shared. Not required if the channel is being shared org-wide.","examples":["T0984H91R2N,T0AB0BSTDV5"],"title":"Target Team Ids","type":"string"},"team_id":{"description":"The workspace to which the channel belongs. Omit this argument if the channel is a cross-workspace shared channel.","examples":["T0984H91R2N"],"title":"Team Id","type":"string"}},"required":["channel_id"],"title":"SetWorkspacesForChannelRequest","type":"object"}},"type":"function"},{"function":{"description":"Shares a remote file, which must already be registered with Slack, into specified Slack channels or direct message conversations.","name":"SLACK_SHARE_REMOTE_FILE","parameters":{"description":"Request schema for `ShareRemoteFile`","properties":{"channels":{"description":"A comma-separated list of channel IDs where the remote file will be shared. These can include public channel IDs, private channel IDs, or direct message channel IDs.","examples":["C0123456789,D0987654321","C061MP4F097"],"title":"Channels","type":"string"},"external_id":{"description":"The globally unique identifier (GUID) for the remote file, as provided by the app that registered it with Slack. Either this `external_id` field or the `file` field (or both) is required to identify the file.","examples":["myapp-unique-file-id-007","external-doc-id-54321"],"title":"External Id","type":"string"},"file":{"description":"The unique ID of the remote file registered with Slack. Either this `file` field or the `external_id` field (or both) is required to identify the file.","examples":["F0123456789"],"title":"File","type":"string"}},"required":["channels"],"title":"ShareRemoteFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Registers a new call in Slack using `calls.add` for third-party call integration; `created_by` is required if not using a user-specific token.","name":"SLACK_START_CALL","parameters":{"description":"Request payload for registering a new call with participants in Slack.","properties":{"created_by":{"description":"Slack user ID of the creator; optional (defaults to authenticated user) if using a user token, otherwise required.","examples":["U012A3BCD4E","U061F7AUR"],"title":"Created By","type":"string"},"date_start":{"description":"The start time of the call, specified as a UTC UNIX timestamp in seconds. For example, `1678886400` corresponds to March 15, 2023, at 12:00 PM UTC.","examples":["1678886400","1700000000"],"title":"Date Start","type":"integer"},"desktop_app_join_url":{"description":"An optional URL that, when provided, allows Slack clients to attempt to directly launch the third-party call application. This is typically a deep link URI for the specific application.","examples":["your-app-protocol://call/12345","zoomus://zoom.us/join?confno=1234567890"],"title":"Desktop App Join Url","type":"string"},"external_display_id":{"description":"An optional, human-readable identifier for the call, supplied by the third-party call provider. If provided, this ID will be displayed in the Slack call object interface.","examples":["Meeting H.323","CONF-7890"],"title":"External Display Id","type":"string"},"external_unique_id":{"description":"A unique identifier for the call, supplied by the third-party call provider. This ID must be unique across all calls from that specific service. This field is required.","examples":["v=abcdef123456","call-ext-98765uuid-from-provider"],"title":"External Unique Id","type":"string"},"join_url":{"description":"The URL required for a client to join the call (e.g., a web join link). This field is mandatory. Must be a valid third-party call system URL (e.g., web join link), not a Slack channel or message URL.","examples":["https://thirdparty.call/join/meeting123","https://example.com/s/abc-123-def"],"title":"Join Url","type":"string"},"title":{"description":"The name or title for the call. This will be displayed in Slack to identify the call.","examples":["Project Alpha Sync","Q3 Planning Session"],"title":"Title","type":"string"},"users":{"description":"A JSON string representing an array of user objects to be registered as participants in the call. Each user object in the array should define a participant using their `slack_id` (Slack User ID) and/or an `external_id` (an identifier from the third-party application, unique to that user within that application). For instance: `'''[{\"slack_id\": \"U012A3BCD4E\"}, {\"external_id\": \"user-xyz@example.com\", \"slack_id\": \"U012A3BCD4F\"}]'''`.","examples":["'''[{\"slack_id\": \"U012A3BCD4E\"}, {\"external_id\": \"participant1@example.com\", \"slack_id\": \"U012A3BCD4F\"}]'''","'''[{\"slack_id\": \"W012A3CDE\"}]'''","'''[{\"external_id\": \"meeting-user-789\"}]'''"],"title":"Users","type":"string"}},"required":["external_unique_id","join_url"],"title":"StartCallRequest","type":"object"}},"type":"function"},{"function":{"description":"Checks authentication and tells you who you are. Use to verify Slack API authentication is functional and to retrieve identity information about the authenticated user or bot.","name":"SLACK_TEST_AUTH","parameters":{"description":"Request schema for SlackTestAuth. No parameters required - authentication is via Bearer token in headers.","properties":{},"title":"SlackTestAuthRequest","type":"object"}},"type":"function"},{"function":{"description":"Reverses conversation archival.","name":"SLACK_UNARCHIVE_CHANNEL","parameters":{"description":"Request schema for `UnarchiveChannel`","properties":{"channel":{"description":"ID of conversation to unarchive","examples":["C1234567890"],"title":"Channel","type":"string"}},"required":["channel"],"title":"UnarchiveChannelRequest","type":"object"}},"type":"function"},{"function":{"description":"Unpins a message, identified by its timestamp, from a specified channel if the message is currently pinned there; this operation is destructive.","name":"SLACK_UNPIN_ITEM","parameters":{"description":"Request schema for `UnpinItem`","properties":{"channel":{"description":"The ID of the channel where the message is pinned (e.g., a public channel, private channel, or direct message).","examples":["C1234567890","G0987654321"],"title":"Channel","type":"string"},"timestamp":{"description":"Timestamp of the message to unpin. This is required to identify the specific message to be removed from the channel's pinned items.","examples":["1625640000.000100","1700000000.123456"],"title":"Timestamp","type":"string"}},"required":["channel","timestamp"],"title":"UnpinItemRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates the title, join URL, or desktop app join URL for an existing Slack call identified by its ID.","name":"SLACK_UPDATE_CALL_INFO","parameters":{"description":"Request schema for `UpdateCallInfo`","properties":{"desktop_app_join_url":{"description":"URL to directly launch the third-party call application from Slack clients.","examples":["your-app-protocol://join?call_id=12345","slack://call?id=abcdefg"],"title":"Desktop App Join Url","type":"string"},"id":{"description":"Unique identifier of the call to update, obtained when a call is created (e.g., via `calls.add` Slack API method).","examples":["R0123ABCDEF","R9876ZYXWVU"],"title":"Id","type":"string"},"join_url":{"description":"New URL for clients to join the call.","examples":["https://example.com/join/meeting/12345","https://another-service.com/call/abc987"],"title":"Join Url","type":"string"},"title":{"description":"New title for the call.","examples":["Project Alpha Review","Q3 Planning Session"],"title":"Title","type":"string"}},"required":["id"],"title":"UpdateCallInfoRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates metadata or content details for an existing remote file in Slack; this action cannot upload new files or change the fundamental file type.","name":"SLACK_UPDATE_REMOTE_FILE","parameters":{"description":"Defines the parameters for updating an existing remote file in Slack. At least `file` or `external_id` must be provided to identify the file, along with at least one attribute to modify.","properties":{"external_id":{"description":"Creator-defined Globally Unique Identifier (GUID) for the remote file. Used to identify the file if `file` ID is not provided. One of `file` or `external_id` is required to specify the file to update.","examples":["item_12345_report_2024","guid-doc-xyz-final"],"title":"External Id","type":"string"},"external_url":{"description":"New publicly accessible URL for the remote file. If provided, this updates the link associated with the file in Slack.","examples":["https://example.com/updated_document.pdf","https://docs.google.com/spreadsheets/d/new_sheet_id_v2"],"title":"External Url","type":"string"},"file":{"description":"Slack's unique identifier for the remote file (e.g., `F12345678`). Used to identify the file if `external_id` is not provided. One of `file` or `external_id` is required to specify the file to update.","examples":["F0123ABC456","F7890XYZ123"],"title":"File","type":"string"},"filetype":{"description":"New filetype for the remote file. This typically describes the kind of file, e.g., `pdf`, `gdoc`, `image`, `text`. See Slack API documentation for specific supported `filetype` values. Providing an inaccurate filetype might affect how the file is handled or displayed.","examples":["pdf","jpg","gdoc","sketch","txt","mp4","zip"],"title":"Filetype","type":"string"},"indexable_file_contents":{"description":"Plain text content extracted from the remote file, used by Slack to improve searchability. This can be a summary or the full text. Maximum 1MB. If provided, updates the searchable content.","title":"Indexable File Contents","type":"string"},"preview_image":{"description":"A string that references the new preview image for the document. The referenced image data will be sent as `multipart/form-data`. This could be a local file path (if supported by the client), a public URL, or base64 encoded image data. Max 1MB. Updates the file's preview in Slack.","title":"Preview Image","type":"string"},"title":{"description":"New title for the remote file. If omitted, the current title remains unchanged.","examples":["Updated Project Proposal Q3","Final Presentation Draft"],"title":"Title","type":"string"},"token":{"description":"Authentication token for authorizing the API request to Slack.","title":"Token","type":"string"}},"title":"UpdateRemoteFileRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates a Slack message, identified by `channel` ID and `ts` timestamp, by modifying its `text`, `attachments`, or `blocks`; provide at least one content field, noting `attachments`/`blocks` are replaced if included (`[]` clears them).","name":"SLACK_UPDATES_A_SLACK_MESSAGE","parameters":{"description":"Request schema for `UpdatesASlackMessage` action.","properties":{"as_user":{"description":"Pass `true` to update the message as the authenticated user; applicable to bot users as well.","title":"As User","type":"boolean"},"attachments":{"anyOf":[{"type":"string"},{"items":{"additionalProperties":true,"type":"object"},"type":"array"}],"description":"This is Slack's legacy 'secondary attachments' field for adding rich formatting elements like colored sidebars, structured fields, and author info. Accepts either a JSON string array or a list of attachment dictionaries. Replaces existing attachments if provided; use `[]` to clear. NOT for file/image uploads. To send files or images, use 'SLACK_UPLOAD_OR_CREATE_A_FILE_IN_SLACK' instead.","examples":["[{\"fallback\": \"Summary text\", \"color\": \"#36a64f\", \"title\": \"Title\", \"text\": \"Content\", \"fields\": [{\"title\": \"Field\", \"value\": \"Value\", \"short\": true}]}]",[{"color":"#36a64f","fallback":"Summary text","text":"Content","title":"Title"}],"[]"],"title":"Attachments"},"blocks":{"anyOf":[{"type":"string"},{"items":{"additionalProperties":true,"type":"object"},"type":"array"}],"description":"**DEPRECATED**: Use `markdown_text` field instead. Block Kit layout blocks for rich/interactive messages. Accepts either a JSON string array or a list of block dictionaries. Replaces existing blocks if field is provided; use `[]` to clear. Omit field to leave blocks untouched. Required if `text` and `attachments` are absent. See Slack API for format.","examples":["[{\"type\": \"section\", \"text\": {\"type\": \"mrkdwn\", \"text\": \"This is an updated section block.\"}}]",[{"text":{"text":"This is an updated section block.","type":"mrkdwn"},"type":"section"}],"[]"],"title":"Blocks"},"channel":{"description":"The ID of the channel containing the message to be updated.","examples":["C1234567890","G0abcdefh"],"title":"Channel","type":"string"},"file_ids":{"description":"Array of file IDs to attach to the updated message. Files must already be uploaded to Slack.","examples":[["F1234567890","F0987654321"]],"items":{"type":"string"},"title":"File Ids","type":"array"},"link_names":{"description":"Set to `true` to link channel/user names in `text`. If not provided, Slack's default update behavior may override original message's linking settings.","title":"Link Names","type":"boolean"},"markdown_text":{"description":"**PREFERRED**: Write your updated message in markdown for nicely formatted display. Supports headers (#), bold (**text**), italic (*text*), strikethrough (~~text~~), code (```), links ([text](url)), quotes (>), and dividers (---). Your message will be posted with beautiful formatting.","examples":["# Updated Status\n\nThe issue has been **resolved** and systems are *fully operational*.\n\n```bash\n# All services running\nkubectl get services\n```","## Progress Update\n\n- **Phase 1**: ✅ Complete\n- *Phase 2*: In progress (80%)\n- ~~Phase 3~~: **Started early**\n\n---\n\n**ETA**: Tomorrow"],"title":"Markdown Text","type":"string"},"metadata":{"additionalProperties":true,"description":"JSON object containing `event_type` (string) and `event_payload` (dict) fields for adding custom metadata to the message.","examples":[{"event_payload":{"status":"completed"},"event_type":"task_update"}],"title":"Metadata","type":"object"},"parse":{"description":"Parse mode for `text`: `'full'` (auto-links @mentions and #channels) or `'none'` (literal text). If not provided, uses Slack's default behavior.","enum":["none","full"],"examples":["full","none"],"title":"Parse","type":"string"},"reply_broadcast":{"description":"If `true` and the message is a thread reply, broadcast the updated message to the channel. Defaults to `false`.","title":"Reply Broadcast","type":"boolean"},"text":{"description":"This sends raw text only, use markdown_text field for formatting. New message text (plain or mrkdwn). Not required if `blocks` or `attachments` are provided. See Slack formatting rules.","examples":["Hello world, this is an *updated* message.","Check out this link: "],"title":"Text","type":"string"},"ts":{"description":"Timestamp of the message to update (string, Unix time with microseconds, e.g., `'1234567890.123456'`).","examples":["1625247600.000200"],"title":"Ts","type":"string"}},"required":["channel","ts"],"title":"UpdatesASlackMessageRequest","type":"object"}},"type":"function"},{"function":{"description":"Updates an existing Slack User Group, which must be specified by an existing `usergroup` ID, with new optional details such as its name, description, handle, or default channels.","name":"SLACK_UPDATE_USER_GROUP","parameters":{"description":"Request schema for `UpdateUserGroup`","properties":{"additional_channels":{"description":"Comma-separated encoded channel IDs for which the User Group can custom add usergroup members to.","examples":["C1234567890,C2345678901"],"title":"Additional Channels","type":"string"},"channels":{"description":"Comma-separated encoded channel IDs to set as default channels.","examples":["C1234567890,C2345678901"],"title":"Channels","type":"string"},"description":{"description":"New short description for the User Group.","examples":["Team responsible for Q4 marketing campaigns."],"title":"Description","type":"string"},"enable_section":{"description":"Configure this user group to show as a sidebar section for all group members. Only relevant if group has 1 or more default channels added.","examples":[true,false],"title":"Enable Section","type":"boolean"},"handle":{"description":"New mention handle. Must be unique among channels, users, and User Groups.","examples":["marketing-team-alpha"],"title":"Handle","type":"string"},"include_count":{"description":"If true, include the number of users in the User Group in the response.","examples":[true,false],"title":"Include Count","type":"boolean"},"name":{"description":"New name for the User Group. Must be unique among User Groups.","examples":["Q4 Marketing"],"title":"Name","type":"string"},"team_id":{"description":"Encoded team (workspace) ID where the User Group exists. Required if using an org-level token. Will be ignored if the API call is sent using a workspace-level token.","examples":["T1234567890","T0HBCDEFG"],"title":"Team Id","type":"string"},"usergroup":{"description":"Encoded ID of the existing User Group to update.","examples":["S0615G0KT"],"title":"Usergroup","type":"string"}},"required":["usergroup"],"title":"UpdateUserGroupRequest","type":"object"}},"type":"function"},{"function":{"description":"Replaces all members of an existing Slack User Group with a new list of valid user IDs.","name":"SLACK_UPDATE_USER_GROUP_MEMBERS","parameters":{"description":"Request schema for `UpdateUserGroupMembers`","properties":{"include_count":{"description":"If true, the response `usergroup` object includes `user_count` and potentially `channel_count` fields, reflecting counts after the update.","examples":["true","false"],"title":"Include Count","type":"boolean"},"team_id":{"description":"Encoded team ID where the User Group exists. Required when using an org-level token (Enterprise Grid). Ignored for workspace-level tokens.","examples":["T1234567890"],"title":"Team Id","type":"string"},"usergroup":{"description":"The encoded ID of the User Group whose members are to be updated. This ID typically starts with 'S'.","examples":["S012AB34CD"],"title":"Usergroup","type":"string"},"users":{"description":"Comma-separated string of encoded user IDs for the new, complete member list, replacing all existing members. User IDs typically start with 'U' or 'W'.","examples":["U012AB34CD,W567EF89GH,U01234567"],"title":"Users","type":"string"}},"required":["usergroup","users"],"title":"UpdateUserGroupMembersRequest","type":"object"}},"type":"function"},{"function":{"description":"Upload files, images, screenshots, documents, or any media to Slack channels or threads. Supports all file types including images (PNG, JPG, JPEG, GIF), documents (PDF, DOCX, TXT), code files, and more. Can share files publicly in channels or as thread replies with optional comments. Large files may fail with `upload_too_large`; use SLACK_ADD_A_REMOTE_FILE_FROM_A_SERVICE for large uploads. If the API returns `ok=false` with `method_deprecated`, fall back to SLACK_ADD_A_REMOTE_FILE_FROM_A_SERVICE or SLACK_SEND_MESSAGE with a URL.","name":"SLACK_UPLOAD_OR_CREATE_A_FILE_IN_SLACK","parameters":{"description":"Request schema for `UploadOrCreateAFileInSlack`","properties":{"channels":{"description":"Channel ID where the file will be shared; if omitted, file is private to the uploader. Use channel ID (e.g., C1234567890) not channel name. Note: Due to API changes, only the first channel ID is used if multiple are provided. App must be a member of the target channel or the upload fails with `not_in_channel` or `channel_not_found`.","examples":["C1234567890"],"title":"Channels","type":"string"},"content":{"description":"Text content of the file; use for text-based files. At least one of 'content' or 'file' must be provided (but not both).","examples":["This is the content of my text file."],"title":"Content","type":"string"},"file":{"description":"File to upload. At least one of 'content' or 'file' must be provided (but not both). FileUploadable object where 'name' is the filename to use in Slack. The file must exist in accessible storage; expired or invalid s3keys will result in a storage error.","file_uploadable":true,"format":"path","title":"FileUploadable","type":"string"},"filename":{"description":"Filename to be displayed in Slack. Required when using 'content' parameter.","examples":["report.pdf","image.png"],"title":"Filename","type":"string"},"filetype":{"description":"Deprecated: File type detection is now automatic. This parameter is preserved for backward compatibility but no longer affects file uploads.","examples":["text","pdf","auto","python"],"title":"Filetype","type":"string"},"initial_comment":{"description":"Optional message to introduce the file in specified 'channels'.","examples":["Here is the Q3 financial report.","Check out this design mockup."],"title":"Initial Comment","type":"string"},"thread_ts":{"description":"Timestamp of a parent message to upload this file as a reply; use the original message's 'ts' value (e.g., '1234567890.123456').","examples":["1234567890.123456"],"title":"Thread Ts","type":"string"},"title":{"description":"Title of the file, displayed in Slack.","examples":["My Document","Team Meeting Notes Q3"],"title":"Title","type":"string"},"token":{"description":"Authentication token; requires 'files:write' scope.","title":"Token","type":"string"}},"title":"UploadOrCreateAFileInSlackRequest","type":"object"}},"type":"function"}]}}} \ No newline at end of file