@mcp-s/connectors 0.0.20261022190708 → 0.0.20261024071613

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"id":"salesforce","status":"active","internal_status":"tool-works","applications":["salesforce"],"definition":{"display":{"name":"Salesforce","description":"Salesforce is the world's leading CRM platform for managing customer relationships, sales, service, and marketing.","icon":"salesforce.svg","website":"https://www.salesforce.com","category":"crm-sales","docs_url":"https://docs.withwillow.ai/docs/mcp-servers/built-in/salesforce"},"api":{"base_url":""},"auth":{"methods":{"oauth":{"authUrl":"https://login.salesforce.com/services/oauth2/authorize","tokenUrl":"https://login.salesforce.com/services/oauth2/token","scopes":["id","profile","email","address","phone","api","web","full","chatter_api","visualforce","refresh_token","offline_access","openid","custom_permissions","wave_api","eclair_api","pardot_api","lightning","content","cdp_ingest_api","cdp_profile_api","cdp_query_api","chatbot_api","cdp_segment_api","cdp_identityresolution_api","cdp_calculated_insight_api","sfap_api","interaction_api","cdp_api","einstein_gpt_api","pwdless_login_api","forgot_password","user_registration_api"],"defaultScopes":["api","refresh_token"],"pkce":true,"codeExchangeConfig":{"isForm":true,"modelCredentialsMapping":"{\n \"access_token\": access_token, \n \"expires_at\": $fromMillis($millis() + ($type(expires_in) = \"string\" ? $number(expires_in) : expires_in) * 1000),\n \"refresh_token\": refresh_token,\n \"scope\": scope,\n \"token_type\": token_type\n }"}},"client-credentials":{}}},"configuration":{"type":"object","properties":{"instanceUrl":{"type":"string","title":"Salesforce Instance URL"}},"required":["instanceUrl"]},"tools":[{"name":"Run SOQL Query","description":"Execute a SOQL query against Salesforce to retrieve records. SOQL is similar to SQL but designed for Salesforce objects.","slug":"run_soql_query","ai_risk":{"level":"low","score":1,"reasoning":"This tool executes a read-only SOQL query to retrieve records, posing minimal risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"SOQL query to execute (e.g., SELECT Id, Name FROM Account WHERE Industry = 'Technology' LIMIT 10)"}},"required":["query"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{ \"q\": arguments.query }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Search Records","description":"Execute a SOSL (Salesforce Object Search Language) search query to find records across multiple objects.","slug":"search_records","ai_risk":{"level":"low","score":1,"reasoning":"This tool performs a read-only SOSL search across multiple objects, which is low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"SOSL search query (e.g., FIND {John} IN ALL FIELDS RETURNING Contact(Id, Name), Lead(Id, Name))"}},"required":["query"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/search","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{ \"q\": arguments.query }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"List Objects","description":"List all available Salesforce objects (sObjects) in the org.","slug":"list_objects","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists available Salesforce objects, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Describe Object","description":"Get detailed metadata about a Salesforce object including all fields, their types, picklist values, and relationships.","slug":"describe_object","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves metadata about a Salesforce object, making it a read-only operation with low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"sobject":{"type":"string","description":"Salesforce object API name (e.g., Account, Contact, Lead, Opportunity, Case, custom__c)"}},"required":["sobject"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/{sobject}/describe","method":"GET","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"sobject\": arguments.sobject\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get Record","description":"Get a specific Salesforce record by its ID.","slug":"get_record","ai_risk":{"level":"low","score":1,"reasoning":"This tool fetches a specific Salesforce record by ID, which is a read-only action and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"sobject":{"type":"string","description":"Salesforce object API name (e.g., Account, Contact, Lead)"},"recordId":{"type":"string","description":"The 15 or 18-character Salesforce record ID"},"fields":{"type":"array","items":{"type":"string"},"description":"Optional list of field API names to return. If not specified, all accessible fields are returned."}},"required":["sobject","recordId"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/{sobject}/{recordId}","method":"GET","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"sobject\": arguments.sobject,\n \"recordId\": arguments.recordId\n }","query":"arguments.fields ? { \"fields\": $join(arguments.fields, \",\") } : {}"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Record","description":"Create a new Salesforce record. Use 'Describe Object' first to understand required fields and field types.","slug":"create_record","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new Salesforce record, which is a standard write operation and carries medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"sobject":{"type":"string","description":"Salesforce object API name (e.g., Account, Contact, Lead)"},"fields":{"type":"object","description":"Field values for the new record. Use field API names as keys. Example: { \"Name\": \"Acme Corp\", \"Industry\": \"Technology\" }","additionalProperties":true}},"required":["sobject","fields"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/{sobject}","method":"POST","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"sobject\": arguments.sobject\n }","body":"arguments.fields"}},"annotations":{"destructiveHint":true}},{"name":"Update Record","description":"Update an existing Salesforce record. Only include fields you want to change.","slug":"update_record","ai_risk":{"level":"medium","score":5,"reasoning":"This tool updates an existing Salesforce record, representing a standard write operation with medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"sobject":{"type":"string","description":"Salesforce object API name"},"recordId":{"type":"string","description":"The record ID to update"},"fields":{"type":"object","description":"Field values to update. Only include fields you want to change. Example: { \"Name\": \"Updated Name\", \"Phone\": \"555-1234\" }","additionalProperties":true}},"required":["sobject","recordId","fields"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/{sobject}/{recordId}","method":"PATCH","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"sobject\": arguments.sobject,\n \"recordId\": arguments.recordId\n }","body":"arguments.fields"}},"annotations":{"destructiveHint":true,"idempotentHint":true}},{"name":"Delete Record","description":"Delete a Salesforce record permanently.","slug":"delete_record","ai_risk":{"level":"critical","score":9,"reasoning":"This tool permanently deletes a Salesforce record, which is a critical action that can cause irreversible data loss.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"sobject":{"type":"string","description":"Salesforce object API name"},"recordId":{"type":"string","description":"The record ID to delete"}},"required":["sobject","recordId"]},"enabled":false,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/{sobject}/{recordId}","method":"DELETE","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"sobject\": arguments.sobject,\n \"recordId\": arguments.recordId\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":true}},{"name":"List Accounts","description":"List Salesforce Account records with optional filtering. Returns key account information.","slug":"list_accounts","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists Salesforce Account records, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of records to return (default: 25, max: 200)","default":25},"industry":{"type":"string","description":"Optional: Filter by industry (e.g., Technology, Healthcare, Finance)"},"type":{"type":"string","description":"Optional: Filter by account type (e.g., Customer, Prospect, Partner)"}},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": \"SELECT Id, Name, Industry, Type, Phone, Website, BillingCity, BillingState, BillingCountry, AnnualRevenue, NumberOfEmployees, OwnerId, CreatedDate FROM Account\"\n & (arguments.industry ? \" WHERE Industry = '\" & arguments.industry & \"'\" : \"\")\n & (arguments.type ? (arguments.industry ? \" AND \" : \" WHERE \") & \"Type = '\" & arguments.type & \"'\" : \"\")\n & \" ORDER BY Name LIMIT \" & (arguments.limit ? $string(arguments.limit) : \"25\")\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Account","description":"Create a new Account record in Salesforce.","slug":"create_account","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new Account record in Salesforce, representing a standard write operation with medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"Name":{"type":"string","description":"Account name (required)"},"Industry":{"type":"string","description":"Industry (e.g., Technology, Healthcare, Finance)"},"Type":{"type":"string","description":"Account type (e.g., Customer, Prospect, Partner)"},"Phone":{"type":"string","description":"Primary phone number"},"Website":{"type":"string","description":"Company website URL"},"Description":{"type":"string","description":"Account description"},"BillingStreet":{"type":"string","description":"Billing street address"},"BillingCity":{"type":"string","description":"Billing city"},"BillingState":{"type":"string","description":"Billing state/province"},"BillingPostalCode":{"type":"string","description":"Billing postal/zip code"},"BillingCountry":{"type":"string","description":"Billing country"},"AnnualRevenue":{"type":"number","description":"Annual revenue"},"NumberOfEmployees":{"type":"integer","description":"Number of employees"}},"required":["Name"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/Account","method":"POST","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","body":"$sift(arguments, function($v) { $v != null })"}},"annotations":{"destructiveHint":true}},{"name":"List Contacts","description":"List Salesforce Contact records with optional filtering.","slug":"list_contacts","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists Salesforce Contact records, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of records to return (default: 25)","default":25},"accountId":{"type":"string","description":"Optional: Filter contacts by Account ID"}},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": \"SELECT Id, FirstName, LastName, Name, Email, Phone, MobilePhone, Title, Department, Account.Name, AccountId, MailingCity, MailingState, CreatedDate FROM Contact\"\n & (arguments.accountId ? \" WHERE AccountId = '\" & arguments.accountId & \"'\" : \"\")\n & \" ORDER BY LastName, FirstName LIMIT \" & (arguments.limit ? $string(arguments.limit) : \"25\")\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Contact","description":"Create a new Contact record in Salesforce.","slug":"create_contact","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new Contact record in Salesforce, which is a standard write operation and carries medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"FirstName":{"type":"string","description":"Contact first name"},"LastName":{"type":"string","description":"Contact last name (required)"},"Email":{"type":"string","description":"Email address"},"Phone":{"type":"string","description":"Phone number"},"MobilePhone":{"type":"string","description":"Mobile phone number"},"Title":{"type":"string","description":"Job title"},"Department":{"type":"string","description":"Department"},"AccountId":{"type":"string","description":"ID of the Account this contact belongs to"},"MailingStreet":{"type":"string","description":"Mailing street address"},"MailingCity":{"type":"string","description":"Mailing city"},"MailingState":{"type":"string","description":"Mailing state/province"},"MailingPostalCode":{"type":"string","description":"Mailing postal/zip code"},"MailingCountry":{"type":"string","description":"Mailing country"},"Description":{"type":"string","description":"Description"}},"required":["LastName"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/Contact","method":"POST","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","body":"$sift(arguments, function($v) { $v != null })"}},"annotations":{"destructiveHint":true}},{"name":"List Leads","description":"List Salesforce Lead records with optional filtering by status.","slug":"list_leads","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists Salesforce Lead records, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of records to return (default: 25)","default":25},"status":{"type":"string","description":"Optional: Filter by lead status (e.g., Open, Contacted, Qualified)"},"isConverted":{"type":"boolean","description":"Optional: Filter by conversion status (true/false)"}},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": \"SELECT Id, FirstName, LastName, Name, Email, Phone, Company, Title, Status, LeadSource, Industry, Rating, IsConverted, CreatedDate FROM Lead\"\n & (arguments.status ? \" WHERE Status = '\" & arguments.status & \"'\" : \"\")\n & (arguments.isConverted != null ? (arguments.status ? \" AND \" : \" WHERE \") & \"IsConverted = \" & (arguments.isConverted ? \"true\" : \"false\") : \"\")\n & \" ORDER BY CreatedDate DESC LIMIT \" & (arguments.limit ? $string(arguments.limit) : \"25\")\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Lead","description":"Create a new Lead record in Salesforce.","slug":"create_lead","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new Lead record in Salesforce, representing a standard write operation with medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"FirstName":{"type":"string","description":"Lead first name"},"LastName":{"type":"string","description":"Lead last name (required)"},"Company":{"type":"string","description":"Company name (required)"},"Email":{"type":"string","description":"Email address"},"Phone":{"type":"string","description":"Phone number"},"MobilePhone":{"type":"string","description":"Mobile phone number"},"Title":{"type":"string","description":"Job title"},"Status":{"type":"string","description":"Lead status (e.g., Open, Contacted, Qualified)"},"LeadSource":{"type":"string","description":"Lead source (e.g., Web, Phone, Referral)"},"Industry":{"type":"string","description":"Industry"},"Rating":{"type":"string","description":"Lead rating (Hot, Warm, Cold)"},"Street":{"type":"string","description":"Street address"},"City":{"type":"string","description":"City"},"State":{"type":"string","description":"State/Province"},"PostalCode":{"type":"string","description":"Postal/Zip code"},"Country":{"type":"string","description":"Country"},"Description":{"type":"string","description":"Description"}},"required":["LastName","Company"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/Lead","method":"POST","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","body":"$sift(arguments, function($v) { $v != null })"}},"annotations":{"destructiveHint":true}},{"name":"Convert Lead","description":"Convert a Lead to an Account, Contact, and optionally an Opportunity.","slug":"convert_lead","ai_risk":{"level":"medium","score":6,"reasoning":"This tool converts a Lead to an Account, Contact, and optionally an Opportunity, which modifies multiple records and carries higher risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"leadId":{"type":"string","description":"ID of the Lead to convert"},"accountId":{"type":"string","description":"Optional: Existing Account ID to associate with. If not provided, a new Account is created."},"contactId":{"type":"string","description":"Optional: Existing Contact ID to associate with. If not provided, a new Contact is created."},"opportunityName":{"type":"string","description":"Optional: Name for the new Opportunity. If not provided, no Opportunity is created."},"convertedStatus":{"type":"string","description":"The converted status value to use (e.g., 'Closed - Converted'). Required."},"ownerId":{"type":"string","description":"Optional: User ID to assign as owner of the new records."}},"required":["leadId","convertedStatus"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/actions/standard/convertLead","method":"POST","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl\n }","body":"{\n \"inputs\": [{\n \"leadId\": arguments.leadId,\n \"convertedStatus\": arguments.convertedStatus,\n \"accountId\": arguments.accountId,\n \"contactId\": arguments.contactId,\n \"opportunityName\": arguments.opportunityName,\n \"ownerId\": arguments.ownerId,\n \"doNotCreateOpportunity\": arguments.opportunityName ? false : true\n }]\n }"}},"annotations":{"destructiveHint":true}},{"name":"List Opportunities","description":"List Salesforce Opportunity records with optional filtering.","slug":"list_opportunities","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists Salesforce Opportunity records, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of records to return (default: 25)","default":25},"stageName":{"type":"string","description":"Optional: Filter by stage (e.g., Prospecting, Qualification, Closed Won)"},"accountId":{"type":"string","description":"Optional: Filter by Account ID"},"isClosed":{"type":"boolean","description":"Optional: Filter by closed status"},"isWon":{"type":"boolean","description":"Optional: Filter by won status"}},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": \"SELECT Id, Name, StageName, Amount, Probability, CloseDate, Account.Name, AccountId, Type, LeadSource, IsClosed, IsWon, CreatedDate FROM Opportunity\"\n & (arguments.stageName ? \" WHERE StageName = '\" & arguments.stageName & \"'\" : \"\")\n & (arguments.accountId ? (arguments.stageName ? \" AND \" : \" WHERE \") & \"AccountId = '\" & arguments.accountId & \"'\" : \"\")\n & (arguments.isClosed != null ? ((arguments.stageName or arguments.accountId) ? \" AND \" : \" WHERE \") & \"IsClosed = \" & (arguments.isClosed ? \"true\" : \"false\") : \"\")\n & (arguments.isWon != null ? ((arguments.stageName or arguments.accountId or arguments.isClosed != null) ? \" AND \" : \" WHERE \") & \"IsWon = \" & (arguments.isWon ? \"true\" : \"false\") : \"\")\n & \" ORDER BY CloseDate DESC LIMIT \" & (arguments.limit ? $string(arguments.limit) : \"25\")\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Opportunity","description":"Create a new Opportunity record in Salesforce.","slug":"create_opportunity","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new Opportunity record in Salesforce, representing a standard write operation with medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"Name":{"type":"string","description":"Opportunity name (required)"},"StageName":{"type":"string","description":"Stage name (required, e.g., Prospecting, Qualification, Proposal, Negotiation, Closed Won, Closed Lost)"},"CloseDate":{"type":"string","description":"Expected close date in YYYY-MM-DD format (required)"},"AccountId":{"type":"string","description":"ID of the Account this opportunity is associated with"},"Amount":{"type":"number","description":"Opportunity amount"},"Probability":{"type":"number","description":"Probability of closing (0-100)"},"Type":{"type":"string","description":"Opportunity type (e.g., New Business, Existing Business)"},"LeadSource":{"type":"string","description":"Lead source"},"NextStep":{"type":"string","description":"Next step"},"Description":{"type":"string","description":"Description"}},"required":["Name","StageName","CloseDate"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/Opportunity","method":"POST","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","body":"$sift(arguments, function($v) { $v != null })"}},"annotations":{"destructiveHint":true}},{"name":"Update Opportunity Stage","description":"Update the stage of an existing Opportunity.","slug":"update_opportunity_stage","ai_risk":{"level":"medium","score":5,"reasoning":"This tool updates the stage of an existing Opportunity, which is a standard write operation and carries medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"opportunityId":{"type":"string","description":"ID of the Opportunity to update"},"StageName":{"type":"string","description":"New stage name"},"Probability":{"type":"number","description":"Optional: Update probability (0-100)"},"Amount":{"type":"number","description":"Optional: Update amount"},"CloseDate":{"type":"string","description":"Optional: Update close date (YYYY-MM-DD)"}},"required":["opportunityId","StageName"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/Opportunity/{opportunityId}","method":"PATCH","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"opportunityId\": arguments.opportunityId\n }","body":"$sift({\n \"StageName\": arguments.StageName,\n \"Probability\": arguments.Probability,\n \"Amount\": arguments.Amount,\n \"CloseDate\": arguments.CloseDate\n }, function($v) { $v != null })"}},"annotations":{"destructiveHint":true,"idempotentHint":true}},{"name":"List Cases","description":"List Salesforce Case (support ticket) records.","slug":"list_cases","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists Salesforce Case records, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of records to return (default: 25)","default":25},"status":{"type":"string","description":"Optional: Filter by status (e.g., New, Working, Escalated, Closed)"},"priority":{"type":"string","description":"Optional: Filter by priority (e.g., High, Medium, Low)"},"accountId":{"type":"string","description":"Optional: Filter by Account ID"}},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": \"SELECT Id, CaseNumber, Subject, Status, Priority, Origin, Type, Account.Name, AccountId, Contact.Name, ContactId, IsClosed, CreatedDate FROM Case\"\n & (arguments.status ? \" WHERE Status = '\" & arguments.status & \"'\" : \"\")\n & (arguments.priority ? (arguments.status ? \" AND \" : \" WHERE \") & \"Priority = '\" & arguments.priority & \"'\" : \"\")\n & (arguments.accountId ? ((arguments.status or arguments.priority) ? \" AND \" : \" WHERE \") & \"AccountId = '\" & arguments.accountId & \"'\" : \"\")\n & \" ORDER BY CreatedDate DESC LIMIT \" & (arguments.limit ? $string(arguments.limit) : \"25\")\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Case","description":"Create a new Case (support ticket) in Salesforce.","slug":"create_case","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new Case in Salesforce, representing a standard write operation with medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"Subject":{"type":"string","description":"Case subject (required)"},"Description":{"type":"string","description":"Case description"},"Status":{"type":"string","description":"Case status (e.g., New, Working, Escalated)"},"Priority":{"type":"string","description":"Priority (High, Medium, Low)"},"Origin":{"type":"string","description":"Case origin (e.g., Phone, Email, Web)"},"Type":{"type":"string","description":"Case type"},"AccountId":{"type":"string","description":"Account ID associated with this case"},"ContactId":{"type":"string","description":"Contact ID associated with this case"}},"required":["Subject"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/Case","method":"POST","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","body":"$sift(arguments, function($v) { $v != null })"}},"annotations":{"destructiveHint":true}},{"name":"List Tasks","description":"List Salesforce Task records (activities).","slug":"list_tasks","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists Salesforce Task records, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of records to return (default: 25)","default":25},"status":{"type":"string","description":"Optional: Filter by status (e.g., Not Started, In Progress, Completed)"},"whatId":{"type":"string","description":"Optional: Filter by related record ID (Account, Opportunity, etc.)"},"whoId":{"type":"string","description":"Optional: Filter by related Contact or Lead ID"}},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": \"SELECT Id, Subject, Status, Priority, ActivityDate, WhatId, WhoId, Description, IsClosed, CreatedDate FROM Task\"\n & (arguments.status ? \" WHERE Status = '\" & arguments.status & \"'\" : \"\")\n & (arguments.whatId ? (arguments.status ? \" AND \" : \" WHERE \") & \"WhatId = '\" & arguments.whatId & \"'\" : \"\")\n & (arguments.whoId ? ((arguments.status or arguments.whatId) ? \" AND \" : \" WHERE \") & \"WhoId = '\" & arguments.whoId & \"'\" : \"\")\n & \" ORDER BY ActivityDate DESC LIMIT \" & (arguments.limit ? $string(arguments.limit) : \"25\")\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Task","description":"Create a new Task in Salesforce.","slug":"create_task","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new Task in Salesforce, which is a standard write operation and carries medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"Subject":{"type":"string","description":"Task subject (required)"},"Status":{"type":"string","description":"Task status (e.g., Not Started, In Progress, Completed)"},"Priority":{"type":"string","description":"Priority (High, Normal, Low)"},"ActivityDate":{"type":"string","description":"Due date in YYYY-MM-DD format"},"WhatId":{"type":"string","description":"Related record ID (Account, Opportunity, Case, etc.)"},"WhoId":{"type":"string","description":"Related Contact or Lead ID"},"Description":{"type":"string","description":"Task description"},"OwnerId":{"type":"string","description":"User ID to assign the task to"}},"required":["Subject"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/Task","method":"POST","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","body":"$sift(arguments, function($v) { $v != null })"}},"annotations":{"destructiveHint":true}},{"name":"Get Current User","description":"Get information about the currently authenticated user.","slug":"get_current_user","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves information about the currently authenticated user, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/chatter/users/me","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"List Users","description":"List Salesforce users in the org.","slug":"list_users","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists Salesforce users in the org, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of records to return (default: 25)","default":25},"isActive":{"type":"boolean","description":"Optional: Filter by active status"}},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": \"SELECT Id, Username, Name, Email, IsActive, Profile.Name, UserRole.Name, CreatedDate FROM User\"\n & (arguments.isActive != null ? \" WHERE IsActive = \" & (arguments.isActive ? \"true\" : \"false\") : \"\")\n & \" ORDER BY Name LIMIT \" & (arguments.limit ? $string(arguments.limit) : \"25\")\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get Org Limits","description":"Get the current API limits and usage for the Salesforce org.","slug":"get_org_limits","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves current API limits and usage for the Salesforce org, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/limits","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"List Reports","description":"List available Salesforce reports.","slug":"list_reports","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists available Salesforce reports, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/analytics/reports","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Run Report","description":"Execute a Salesforce report and get the results. Use 'List Reports' to find report IDs.","slug":"run_report","ai_risk":{"level":"low","score":1,"reasoning":"This tool executes a Salesforce report and retrieves results, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"reportId":{"type":"string","description":"ID of the report to execute"},"includeDetails":{"type":"boolean","description":"Include detailed rows in the response (default: false)","default":false}},"required":["reportId"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/analytics/reports/{reportId}","method":"GET","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"reportId\": arguments.reportId\n }","query":"{ \"includeDetails\": arguments.includeDetails ? \"true\" : \"false\" }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Bulk Query Job","description":"Create a Bulk API 2.0 query job to asynchronously extract large volumes of records via SOQL. Returns a job with an id and state (UploadComplete). Poll the job with 'Get Bulk Query Job' until state is JobComplete, then download results with 'Download Bulk Query Results'.","slug":"create_bulk_query_job","ai_risk":{"level":"low","score":2,"reasoning":"This tool creates an asynchronous, read-only SOQL extraction job. It does not modify business data, posing low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"SOQL query to run in the bulk job (e.g., SELECT Id, Name FROM Account). Aggregate functions like COUNT() are not supported by bulk query."},"operation":{"type":"string","enum":["query","queryAll"],"description":"'query' excludes deleted/archived records; 'queryAll' includes them. Defaults to 'query'.","default":"query"},"columnDelimiter":{"type":"string","enum":["BACKQUOTE","CARET","COMMA","PIPE","SEMICOLON","TAB"],"description":"Column delimiter for the CSV results. Defaults to COMMA.","default":"COMMA"},"lineEnding":{"type":"string","enum":["LF","CRLF"],"description":"Line ending for the CSV results. Defaults to LF.","default":"LF"}},"required":["query"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/jobs/query","method":"POST","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","body":"$sift({\n \"operation\": arguments.operation ? arguments.operation : \"query\",\n \"query\": arguments.query,\n \"contentType\": \"CSV\",\n \"columnDelimiter\": arguments.columnDelimiter,\n \"lineEnding\": arguments.lineEnding\n }, function($v) { $v != null })"}},"annotations":{"idempotentHint":false}},{"name":"Get Bulk Query Job","description":"Poll a Bulk API 2.0 query job by its id to check status. Returns job info including 'state' (UploadComplete, InProgress, JobComplete, Failed, Aborted), numberRecordsProcessed, and totalProcessingTime. Repeat until state is JobComplete before downloading results.","slug":"get_bulk_query_job","ai_risk":{"level":"low","score":1,"reasoning":"This tool reads the status of an existing bulk query job, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"jobId":{"type":"string","description":"The id of the bulk query job returned by 'Create Bulk Query Job'."}},"required":["jobId"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/jobs/query/{jobId}","method":"GET","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"jobId\": arguments.jobId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Download Bulk Query Results","description":"Download a page of CSV results from a completed Bulk API 2.0 query job. Returns raw CSV text. For paginated results, the response includes a 'Sforce-Locator' header; pass its value as 'locator' to 'Download Next Bulk Query Results' to fetch the next page. Only call once the job state is JobComplete.","slug":"download_bulk_query_results","ai_risk":{"level":"low","score":1,"reasoning":"This tool downloads the CSV results of a completed read-only query job, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"jobId":{"type":"string","description":"The id of the completed bulk query job."},"maxRecords":{"type":"integer","description":"Optional: maximum number of records to return in this page. If omitted, Salesforce determines the page size."}},"required":["jobId"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/jobs/query/{jobId}/results","method":"GET","responseType":"text","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"jobId\": arguments.jobId\n }","query":"arguments.maxRecords ? { \"maxRecords\": $string(arguments.maxRecords) } : {}"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Download Next Bulk Query Results","description":"Download a subsequent page of CSV results from a Bulk API 2.0 query job using a pagination locator. Provide the 'locator' value taken from the previous page's 'Sforce-Locator' response header. Returns raw CSV text.","slug":"download_next_bulk_query_results","ai_risk":{"level":"low","score":1,"reasoning":"This tool downloads a subsequent page of CSV results from a read-only query job, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"jobId":{"type":"string","description":"The id of the completed bulk query job."},"locator":{"type":"string","description":"The pagination locator from the previous page's 'Sforce-Locator' response header."},"maxRecords":{"type":"integer","description":"Optional: maximum number of records to return in this page."}},"required":["jobId","locator"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/jobs/query/{jobId}/results","method":"GET","responseType":"text","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"jobId\": arguments.jobId\n }","query":"$sift({\n \"locator\": arguments.locator,\n \"maxRecords\": arguments.maxRecords ? $string(arguments.maxRecords) : null\n }, function($v) { $v != null })"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Run Validation Query","description":"Execute a standard REST SOQL query for validation purposes (e.g., Salesforce DX MCP validation queries), including aggregate queries such as SELECT COUNT() FROM Account. Returns records plus totalSize, done, and (when paginated) nextRecordsUrl. Use 'Get Next Query Results' to page through large result sets.","slug":"run_validation_query","ai_risk":{"level":"low","score":1,"reasoning":"This tool executes a read-only SOQL validation query to retrieve records or counts, posing minimal risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"SOQL query to execute, including COUNT() aggregates (e.g., SELECT COUNT() FROM Account WHERE Industry = 'Technology')."}},"required":["query"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{ \"q\": arguments.query }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get Next Query Results","description":"Retrieve a subsequent page of results for a standard SOQL query. Provide the locator from the previous response's 'nextRecordsUrl' (the trailing identifier after /query/, e.g. '01g...-2000'). Returns the next batch of records.","slug":"get_next_query_results","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves a subsequent page of read-only SOQL query results, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"locator":{"type":"string","description":"The query locator identifier from the previous response's nextRecordsUrl (the value after '/query/')."}},"required":["locator"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query/{locator}","method":"GET","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"locator\": arguments.locator\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get Query Column Metadata","description":"Retrieve column metadata for a SOQL query without fetching all rows, using the columns=true parameter. Useful for the CLI fallback path to inspect the shape/columns a query would return. Returns column definitions for the query.","slug":"get_query_column_metadata","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves column metadata for a SOQL query, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"SOQL query whose column metadata should be described (e.g., SELECT Id, Name FROM Account)."}},"required":["query"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": arguments.query,\n \"columns\": \"true\"\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}}]}}
1
+ {"id":"salesforce","status":"active","internal_status":"tool-works","applications":["salesforce"],"definition":{"display":{"name":"Salesforce","description":"Salesforce is the world's leading CRM platform for managing customer relationships, sales, service, and marketing.","icon":"salesforce.svg","website":"https://www.salesforce.com","category":"crm-sales","docs_url":"https://docs.withwillow.ai/docs/mcp-servers/built-in/salesforce"},"api":{"base_url":""},"auth":{"methods":{"oauth":{"authUrl":"https://login.salesforce.com/services/oauth2/authorize","tokenUrl":"https://login.salesforce.com/services/oauth2/token","scopes":["id","profile","email","address","phone","api","web","full","chatter_api","visualforce","refresh_token","offline_access","openid","custom_permissions","wave_api","eclair_api","pardot_api","lightning","content","cdp_ingest_api","cdp_profile_api","cdp_query_api","chatbot_api","cdp_segment_api","cdp_identityresolution_api","cdp_calculated_insight_api","sfap_api","interaction_api","cdp_api","einstein_gpt_api","pwdless_login_api","forgot_password","user_registration_api"],"defaultScopes":["api","refresh_token"],"scopeTemplates":[{"id":"api","name":"API access","description":"Query, read and write records, reports and Bulk API jobs through the REST API, limited to what the user's profile allows.","scopes":["api","refresh_token"]},{"id":"full-access","name":"Full access","description":"Everything the user can access in Salesforce (the `full` scope), including Chatter, content and CRM Analytics.","scopes":["full","refresh_token"]}],"pkce":true,"codeExchangeConfig":{"isForm":true,"modelCredentialsMapping":"{\n \"access_token\": access_token, \n \"expires_at\": $fromMillis($millis() + ($type(expires_in) = \"string\" ? $number(expires_in) : expires_in) * 1000),\n \"refresh_token\": refresh_token,\n \"scope\": scope,\n \"token_type\": token_type\n }"}},"client-credentials":{}}},"configuration":{"type":"object","properties":{"instanceUrl":{"type":"string","title":"Salesforce Instance URL"}},"required":["instanceUrl"]},"tools":[{"name":"Run SOQL Query","description":"Execute a SOQL query against Salesforce to retrieve records. SOQL is similar to SQL but designed for Salesforce objects.","slug":"run_soql_query","ai_risk":{"level":"low","score":1,"reasoning":"This tool executes a read-only SOQL query to retrieve records, posing minimal risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"SOQL query to execute (e.g., SELECT Id, Name FROM Account WHERE Industry = 'Technology' LIMIT 10)"}},"required":["query"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{ \"q\": arguments.query }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Search Records","description":"Execute a SOSL (Salesforce Object Search Language) search query to find records across multiple objects.","slug":"search_records","ai_risk":{"level":"low","score":1,"reasoning":"This tool performs a read-only SOSL search across multiple objects, which is low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"SOSL search query (e.g., FIND {John} IN ALL FIELDS RETURNING Contact(Id, Name), Lead(Id, Name))"}},"required":["query"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/search","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{ \"q\": arguments.query }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"List Objects","description":"List all available Salesforce objects (sObjects) in the org.","slug":"list_objects","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists available Salesforce objects, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Describe Object","description":"Get detailed metadata about a Salesforce object including all fields, their types, picklist values, and relationships.","slug":"describe_object","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves metadata about a Salesforce object, making it a read-only operation with low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"sobject":{"type":"string","description":"Salesforce object API name (e.g., Account, Contact, Lead, Opportunity, Case, custom__c)"}},"required":["sobject"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/{sobject}/describe","method":"GET","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"sobject\": arguments.sobject\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get Record","description":"Get a specific Salesforce record by its ID.","slug":"get_record","ai_risk":{"level":"low","score":1,"reasoning":"This tool fetches a specific Salesforce record by ID, which is a read-only action and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"sobject":{"type":"string","description":"Salesforce object API name (e.g., Account, Contact, Lead)"},"recordId":{"type":"string","description":"The 15 or 18-character Salesforce record ID"},"fields":{"type":"array","items":{"type":"string"},"description":"Optional list of field API names to return. If not specified, all accessible fields are returned."}},"required":["sobject","recordId"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/{sobject}/{recordId}","method":"GET","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"sobject\": arguments.sobject,\n \"recordId\": arguments.recordId\n }","query":"arguments.fields ? { \"fields\": $join(arguments.fields, \",\") } : {}"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Record","description":"Create a new Salesforce record. Use 'Describe Object' first to understand required fields and field types.","slug":"create_record","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new Salesforce record, which is a standard write operation and carries medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"sobject":{"type":"string","description":"Salesforce object API name (e.g., Account, Contact, Lead)"},"fields":{"type":"object","description":"Field values for the new record. Use field API names as keys. Example: { \"Name\": \"Acme Corp\", \"Industry\": \"Technology\" }","additionalProperties":true}},"required":["sobject","fields"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/{sobject}","method":"POST","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"sobject\": arguments.sobject\n }","body":"arguments.fields"}},"annotations":{"destructiveHint":true}},{"name":"Update Record","description":"Update an existing Salesforce record. Only include fields you want to change.","slug":"update_record","ai_risk":{"level":"medium","score":5,"reasoning":"This tool updates an existing Salesforce record, representing a standard write operation with medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"sobject":{"type":"string","description":"Salesforce object API name"},"recordId":{"type":"string","description":"The record ID to update"},"fields":{"type":"object","description":"Field values to update. Only include fields you want to change. Example: { \"Name\": \"Updated Name\", \"Phone\": \"555-1234\" }","additionalProperties":true}},"required":["sobject","recordId","fields"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/{sobject}/{recordId}","method":"PATCH","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"sobject\": arguments.sobject,\n \"recordId\": arguments.recordId\n }","body":"arguments.fields"}},"annotations":{"destructiveHint":true,"idempotentHint":true}},{"name":"Delete Record","description":"Delete a Salesforce record permanently.","slug":"delete_record","ai_risk":{"level":"critical","score":9,"reasoning":"This tool permanently deletes a Salesforce record, which is a critical action that can cause irreversible data loss.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"sobject":{"type":"string","description":"Salesforce object API name"},"recordId":{"type":"string","description":"The record ID to delete"}},"required":["sobject","recordId"]},"enabled":false,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/{sobject}/{recordId}","method":"DELETE","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"sobject\": arguments.sobject,\n \"recordId\": arguments.recordId\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":true}},{"name":"List Accounts","description":"List Salesforce Account records with optional filtering. Returns key account information.","slug":"list_accounts","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists Salesforce Account records, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of records to return (default: 25, max: 200)","default":25},"industry":{"type":"string","description":"Optional: Filter by industry (e.g., Technology, Healthcare, Finance)"},"type":{"type":"string","description":"Optional: Filter by account type (e.g., Customer, Prospect, Partner)"}},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": \"SELECT Id, Name, Industry, Type, Phone, Website, BillingCity, BillingState, BillingCountry, AnnualRevenue, NumberOfEmployees, OwnerId, CreatedDate FROM Account\"\n & (arguments.industry ? \" WHERE Industry = '\" & arguments.industry & \"'\" : \"\")\n & (arguments.type ? (arguments.industry ? \" AND \" : \" WHERE \") & \"Type = '\" & arguments.type & \"'\" : \"\")\n & \" ORDER BY Name LIMIT \" & (arguments.limit ? $string(arguments.limit) : \"25\")\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Account","description":"Create a new Account record in Salesforce.","slug":"create_account","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new Account record in Salesforce, representing a standard write operation with medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"Name":{"type":"string","description":"Account name (required)"},"Industry":{"type":"string","description":"Industry (e.g., Technology, Healthcare, Finance)"},"Type":{"type":"string","description":"Account type (e.g., Customer, Prospect, Partner)"},"Phone":{"type":"string","description":"Primary phone number"},"Website":{"type":"string","description":"Company website URL"},"Description":{"type":"string","description":"Account description"},"BillingStreet":{"type":"string","description":"Billing street address"},"BillingCity":{"type":"string","description":"Billing city"},"BillingState":{"type":"string","description":"Billing state/province"},"BillingPostalCode":{"type":"string","description":"Billing postal/zip code"},"BillingCountry":{"type":"string","description":"Billing country"},"AnnualRevenue":{"type":"number","description":"Annual revenue"},"NumberOfEmployees":{"type":"integer","description":"Number of employees"}},"required":["Name"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/Account","method":"POST","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","body":"$sift(arguments, function($v) { $v != null })"}},"annotations":{"destructiveHint":true}},{"name":"List Contacts","description":"List Salesforce Contact records with optional filtering.","slug":"list_contacts","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists Salesforce Contact records, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of records to return (default: 25)","default":25},"accountId":{"type":"string","description":"Optional: Filter contacts by Account ID"}},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": \"SELECT Id, FirstName, LastName, Name, Email, Phone, MobilePhone, Title, Department, Account.Name, AccountId, MailingCity, MailingState, CreatedDate FROM Contact\"\n & (arguments.accountId ? \" WHERE AccountId = '\" & arguments.accountId & \"'\" : \"\")\n & \" ORDER BY LastName, FirstName LIMIT \" & (arguments.limit ? $string(arguments.limit) : \"25\")\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Contact","description":"Create a new Contact record in Salesforce.","slug":"create_contact","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new Contact record in Salesforce, which is a standard write operation and carries medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"FirstName":{"type":"string","description":"Contact first name"},"LastName":{"type":"string","description":"Contact last name (required)"},"Email":{"type":"string","description":"Email address"},"Phone":{"type":"string","description":"Phone number"},"MobilePhone":{"type":"string","description":"Mobile phone number"},"Title":{"type":"string","description":"Job title"},"Department":{"type":"string","description":"Department"},"AccountId":{"type":"string","description":"ID of the Account this contact belongs to"},"MailingStreet":{"type":"string","description":"Mailing street address"},"MailingCity":{"type":"string","description":"Mailing city"},"MailingState":{"type":"string","description":"Mailing state/province"},"MailingPostalCode":{"type":"string","description":"Mailing postal/zip code"},"MailingCountry":{"type":"string","description":"Mailing country"},"Description":{"type":"string","description":"Description"}},"required":["LastName"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/Contact","method":"POST","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","body":"$sift(arguments, function($v) { $v != null })"}},"annotations":{"destructiveHint":true}},{"name":"List Leads","description":"List Salesforce Lead records with optional filtering by status.","slug":"list_leads","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists Salesforce Lead records, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of records to return (default: 25)","default":25},"status":{"type":"string","description":"Optional: Filter by lead status (e.g., Open, Contacted, Qualified)"},"isConverted":{"type":"boolean","description":"Optional: Filter by conversion status (true/false)"}},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": \"SELECT Id, FirstName, LastName, Name, Email, Phone, Company, Title, Status, LeadSource, Industry, Rating, IsConverted, CreatedDate FROM Lead\"\n & (arguments.status ? \" WHERE Status = '\" & arguments.status & \"'\" : \"\")\n & (arguments.isConverted != null ? (arguments.status ? \" AND \" : \" WHERE \") & \"IsConverted = \" & (arguments.isConverted ? \"true\" : \"false\") : \"\")\n & \" ORDER BY CreatedDate DESC LIMIT \" & (arguments.limit ? $string(arguments.limit) : \"25\")\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Lead","description":"Create a new Lead record in Salesforce.","slug":"create_lead","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new Lead record in Salesforce, representing a standard write operation with medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"FirstName":{"type":"string","description":"Lead first name"},"LastName":{"type":"string","description":"Lead last name (required)"},"Company":{"type":"string","description":"Company name (required)"},"Email":{"type":"string","description":"Email address"},"Phone":{"type":"string","description":"Phone number"},"MobilePhone":{"type":"string","description":"Mobile phone number"},"Title":{"type":"string","description":"Job title"},"Status":{"type":"string","description":"Lead status (e.g., Open, Contacted, Qualified)"},"LeadSource":{"type":"string","description":"Lead source (e.g., Web, Phone, Referral)"},"Industry":{"type":"string","description":"Industry"},"Rating":{"type":"string","description":"Lead rating (Hot, Warm, Cold)"},"Street":{"type":"string","description":"Street address"},"City":{"type":"string","description":"City"},"State":{"type":"string","description":"State/Province"},"PostalCode":{"type":"string","description":"Postal/Zip code"},"Country":{"type":"string","description":"Country"},"Description":{"type":"string","description":"Description"}},"required":["LastName","Company"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/Lead","method":"POST","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","body":"$sift(arguments, function($v) { $v != null })"}},"annotations":{"destructiveHint":true}},{"name":"Convert Lead","description":"Convert a Lead to an Account, Contact, and optionally an Opportunity.","slug":"convert_lead","ai_risk":{"level":"medium","score":6,"reasoning":"This tool converts a Lead to an Account, Contact, and optionally an Opportunity, which modifies multiple records and carries higher risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"leadId":{"type":"string","description":"ID of the Lead to convert"},"accountId":{"type":"string","description":"Optional: Existing Account ID to associate with. If not provided, a new Account is created."},"contactId":{"type":"string","description":"Optional: Existing Contact ID to associate with. If not provided, a new Contact is created."},"opportunityName":{"type":"string","description":"Optional: Name for the new Opportunity. If not provided, no Opportunity is created."},"convertedStatus":{"type":"string","description":"The converted status value to use (e.g., 'Closed - Converted'). Required."},"ownerId":{"type":"string","description":"Optional: User ID to assign as owner of the new records."}},"required":["leadId","convertedStatus"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/actions/standard/convertLead","method":"POST","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl\n }","body":"{\n \"inputs\": [{\n \"leadId\": arguments.leadId,\n \"convertedStatus\": arguments.convertedStatus,\n \"accountId\": arguments.accountId,\n \"contactId\": arguments.contactId,\n \"opportunityName\": arguments.opportunityName,\n \"ownerId\": arguments.ownerId,\n \"doNotCreateOpportunity\": arguments.opportunityName ? false : true\n }]\n }"}},"annotations":{"destructiveHint":true}},{"name":"List Opportunities","description":"List Salesforce Opportunity records with optional filtering.","slug":"list_opportunities","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists Salesforce Opportunity records, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of records to return (default: 25)","default":25},"stageName":{"type":"string","description":"Optional: Filter by stage (e.g., Prospecting, Qualification, Closed Won)"},"accountId":{"type":"string","description":"Optional: Filter by Account ID"},"isClosed":{"type":"boolean","description":"Optional: Filter by closed status"},"isWon":{"type":"boolean","description":"Optional: Filter by won status"}},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": \"SELECT Id, Name, StageName, Amount, Probability, CloseDate, Account.Name, AccountId, Type, LeadSource, IsClosed, IsWon, CreatedDate FROM Opportunity\"\n & (arguments.stageName ? \" WHERE StageName = '\" & arguments.stageName & \"'\" : \"\")\n & (arguments.accountId ? (arguments.stageName ? \" AND \" : \" WHERE \") & \"AccountId = '\" & arguments.accountId & \"'\" : \"\")\n & (arguments.isClosed != null ? ((arguments.stageName or arguments.accountId) ? \" AND \" : \" WHERE \") & \"IsClosed = \" & (arguments.isClosed ? \"true\" : \"false\") : \"\")\n & (arguments.isWon != null ? ((arguments.stageName or arguments.accountId or arguments.isClosed != null) ? \" AND \" : \" WHERE \") & \"IsWon = \" & (arguments.isWon ? \"true\" : \"false\") : \"\")\n & \" ORDER BY CloseDate DESC LIMIT \" & (arguments.limit ? $string(arguments.limit) : \"25\")\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Opportunity","description":"Create a new Opportunity record in Salesforce.","slug":"create_opportunity","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new Opportunity record in Salesforce, representing a standard write operation with medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"Name":{"type":"string","description":"Opportunity name (required)"},"StageName":{"type":"string","description":"Stage name (required, e.g., Prospecting, Qualification, Proposal, Negotiation, Closed Won, Closed Lost)"},"CloseDate":{"type":"string","description":"Expected close date in YYYY-MM-DD format (required)"},"AccountId":{"type":"string","description":"ID of the Account this opportunity is associated with"},"Amount":{"type":"number","description":"Opportunity amount"},"Probability":{"type":"number","description":"Probability of closing (0-100)"},"Type":{"type":"string","description":"Opportunity type (e.g., New Business, Existing Business)"},"LeadSource":{"type":"string","description":"Lead source"},"NextStep":{"type":"string","description":"Next step"},"Description":{"type":"string","description":"Description"}},"required":["Name","StageName","CloseDate"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/Opportunity","method":"POST","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","body":"$sift(arguments, function($v) { $v != null })"}},"annotations":{"destructiveHint":true}},{"name":"Update Opportunity Stage","description":"Update the stage of an existing Opportunity.","slug":"update_opportunity_stage","ai_risk":{"level":"medium","score":5,"reasoning":"This tool updates the stage of an existing Opportunity, which is a standard write operation and carries medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"opportunityId":{"type":"string","description":"ID of the Opportunity to update"},"StageName":{"type":"string","description":"New stage name"},"Probability":{"type":"number","description":"Optional: Update probability (0-100)"},"Amount":{"type":"number","description":"Optional: Update amount"},"CloseDate":{"type":"string","description":"Optional: Update close date (YYYY-MM-DD)"}},"required":["opportunityId","StageName"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/Opportunity/{opportunityId}","method":"PATCH","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"opportunityId\": arguments.opportunityId\n }","body":"$sift({\n \"StageName\": arguments.StageName,\n \"Probability\": arguments.Probability,\n \"Amount\": arguments.Amount,\n \"CloseDate\": arguments.CloseDate\n }, function($v) { $v != null })"}},"annotations":{"destructiveHint":true,"idempotentHint":true}},{"name":"List Cases","description":"List Salesforce Case (support ticket) records.","slug":"list_cases","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists Salesforce Case records, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of records to return (default: 25)","default":25},"status":{"type":"string","description":"Optional: Filter by status (e.g., New, Working, Escalated, Closed)"},"priority":{"type":"string","description":"Optional: Filter by priority (e.g., High, Medium, Low)"},"accountId":{"type":"string","description":"Optional: Filter by Account ID"}},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": \"SELECT Id, CaseNumber, Subject, Status, Priority, Origin, Type, Account.Name, AccountId, Contact.Name, ContactId, IsClosed, CreatedDate FROM Case\"\n & (arguments.status ? \" WHERE Status = '\" & arguments.status & \"'\" : \"\")\n & (arguments.priority ? (arguments.status ? \" AND \" : \" WHERE \") & \"Priority = '\" & arguments.priority & \"'\" : \"\")\n & (arguments.accountId ? ((arguments.status or arguments.priority) ? \" AND \" : \" WHERE \") & \"AccountId = '\" & arguments.accountId & \"'\" : \"\")\n & \" ORDER BY CreatedDate DESC LIMIT \" & (arguments.limit ? $string(arguments.limit) : \"25\")\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Case","description":"Create a new Case (support ticket) in Salesforce.","slug":"create_case","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new Case in Salesforce, representing a standard write operation with medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"Subject":{"type":"string","description":"Case subject (required)"},"Description":{"type":"string","description":"Case description"},"Status":{"type":"string","description":"Case status (e.g., New, Working, Escalated)"},"Priority":{"type":"string","description":"Priority (High, Medium, Low)"},"Origin":{"type":"string","description":"Case origin (e.g., Phone, Email, Web)"},"Type":{"type":"string","description":"Case type"},"AccountId":{"type":"string","description":"Account ID associated with this case"},"ContactId":{"type":"string","description":"Contact ID associated with this case"}},"required":["Subject"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/Case","method":"POST","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","body":"$sift(arguments, function($v) { $v != null })"}},"annotations":{"destructiveHint":true}},{"name":"List Tasks","description":"List Salesforce Task records (activities).","slug":"list_tasks","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists Salesforce Task records, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of records to return (default: 25)","default":25},"status":{"type":"string","description":"Optional: Filter by status (e.g., Not Started, In Progress, Completed)"},"whatId":{"type":"string","description":"Optional: Filter by related record ID (Account, Opportunity, etc.)"},"whoId":{"type":"string","description":"Optional: Filter by related Contact or Lead ID"}},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": \"SELECT Id, Subject, Status, Priority, ActivityDate, WhatId, WhoId, Description, IsClosed, CreatedDate FROM Task\"\n & (arguments.status ? \" WHERE Status = '\" & arguments.status & \"'\" : \"\")\n & (arguments.whatId ? (arguments.status ? \" AND \" : \" WHERE \") & \"WhatId = '\" & arguments.whatId & \"'\" : \"\")\n & (arguments.whoId ? ((arguments.status or arguments.whatId) ? \" AND \" : \" WHERE \") & \"WhoId = '\" & arguments.whoId & \"'\" : \"\")\n & \" ORDER BY ActivityDate DESC LIMIT \" & (arguments.limit ? $string(arguments.limit) : \"25\")\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Task","description":"Create a new Task in Salesforce.","slug":"create_task","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new Task in Salesforce, which is a standard write operation and carries medium risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"Subject":{"type":"string","description":"Task subject (required)"},"Status":{"type":"string","description":"Task status (e.g., Not Started, In Progress, Completed)"},"Priority":{"type":"string","description":"Priority (High, Normal, Low)"},"ActivityDate":{"type":"string","description":"Due date in YYYY-MM-DD format"},"WhatId":{"type":"string","description":"Related record ID (Account, Opportunity, Case, etc.)"},"WhoId":{"type":"string","description":"Related Contact or Lead ID"},"Description":{"type":"string","description":"Task description"},"OwnerId":{"type":"string","description":"User ID to assign the task to"}},"required":["Subject"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/sobjects/Task","method":"POST","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","body":"$sift(arguments, function($v) { $v != null })"}},"annotations":{"destructiveHint":true}},{"name":"Get Current User","description":"Get information about the currently authenticated user.","slug":"get_current_user","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves information about the currently authenticated user, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/chatter/users/me","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"List Users","description":"List Salesforce users in the org.","slug":"list_users","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists Salesforce users in the org, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of records to return (default: 25)","default":25},"isActive":{"type":"boolean","description":"Optional: Filter by active status"}},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": \"SELECT Id, Username, Name, Email, IsActive, Profile.Name, UserRole.Name, CreatedDate FROM User\"\n & (arguments.isActive != null ? \" WHERE IsActive = \" & (arguments.isActive ? \"true\" : \"false\") : \"\")\n & \" ORDER BY Name LIMIT \" & (arguments.limit ? $string(arguments.limit) : \"25\")\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get Org Limits","description":"Get the current API limits and usage for the Salesforce org.","slug":"get_org_limits","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves current API limits and usage for the Salesforce org, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/limits","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"List Reports","description":"List available Salesforce reports.","slug":"list_reports","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists available Salesforce reports, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{},"required":[]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/analytics/reports","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Run Report","description":"Execute a Salesforce report and get the results. Use 'List Reports' to find report IDs.","slug":"run_report","ai_risk":{"level":"low","score":1,"reasoning":"This tool executes a Salesforce report and retrieves results, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"reportId":{"type":"string","description":"ID of the report to execute"},"includeDetails":{"type":"boolean","description":"Include detailed rows in the response (default: false)","default":false}},"required":["reportId"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/analytics/reports/{reportId}","method":"GET","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"reportId\": arguments.reportId\n }","query":"{ \"includeDetails\": arguments.includeDetails ? \"true\" : \"false\" }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Bulk Query Job","description":"Create a Bulk API 2.0 query job to asynchronously extract large volumes of records via SOQL. Returns a job with an id and state (UploadComplete). Poll the job with 'Get Bulk Query Job' until state is JobComplete, then download results with 'Download Bulk Query Results'.","slug":"create_bulk_query_job","ai_risk":{"level":"low","score":2,"reasoning":"This tool creates an asynchronous, read-only SOQL extraction job. It does not modify business data, posing low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"SOQL query to run in the bulk job (e.g., SELECT Id, Name FROM Account). Aggregate functions like COUNT() are not supported by bulk query."},"operation":{"type":"string","enum":["query","queryAll"],"description":"'query' excludes deleted/archived records; 'queryAll' includes them. Defaults to 'query'.","default":"query"},"columnDelimiter":{"type":"string","enum":["BACKQUOTE","CARET","COMMA","PIPE","SEMICOLON","TAB"],"description":"Column delimiter for the CSV results. Defaults to COMMA.","default":"COMMA"},"lineEnding":{"type":"string","enum":["LF","CRLF"],"description":"Line ending for the CSV results. Defaults to LF.","default":"LF"}},"required":["query"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/jobs/query","method":"POST","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","body":"$sift({\n \"operation\": arguments.operation ? arguments.operation : \"query\",\n \"query\": arguments.query,\n \"contentType\": \"CSV\",\n \"columnDelimiter\": arguments.columnDelimiter,\n \"lineEnding\": arguments.lineEnding\n }, function($v) { $v != null })"}},"annotations":{"idempotentHint":false}},{"name":"Get Bulk Query Job","description":"Poll a Bulk API 2.0 query job by its id to check status. Returns job info including 'state' (UploadComplete, InProgress, JobComplete, Failed, Aborted), numberRecordsProcessed, and totalProcessingTime. Repeat until state is JobComplete before downloading results.","slug":"get_bulk_query_job","ai_risk":{"level":"low","score":1,"reasoning":"This tool reads the status of an existing bulk query job, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"jobId":{"type":"string","description":"The id of the bulk query job returned by 'Create Bulk Query Job'."}},"required":["jobId"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/jobs/query/{jobId}","method":"GET","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"jobId\": arguments.jobId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Download Bulk Query Results","description":"Download a page of CSV results from a completed Bulk API 2.0 query job. Returns raw CSV text. For paginated results, the response includes a 'Sforce-Locator' header; pass its value as 'locator' to 'Download Next Bulk Query Results' to fetch the next page. Only call once the job state is JobComplete.","slug":"download_bulk_query_results","ai_risk":{"level":"low","score":1,"reasoning":"This tool downloads the CSV results of a completed read-only query job, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"jobId":{"type":"string","description":"The id of the completed bulk query job."},"maxRecords":{"type":"integer","description":"Optional: maximum number of records to return in this page. If omitted, Salesforce determines the page size."}},"required":["jobId"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/jobs/query/{jobId}/results","method":"GET","responseType":"text","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"jobId\": arguments.jobId\n }","query":"arguments.maxRecords ? { \"maxRecords\": $string(arguments.maxRecords) } : {}"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Download Next Bulk Query Results","description":"Download a subsequent page of CSV results from a Bulk API 2.0 query job using a pagination locator. Provide the 'locator' value taken from the previous page's 'Sforce-Locator' response header. Returns raw CSV text.","slug":"download_next_bulk_query_results","ai_risk":{"level":"low","score":1,"reasoning":"This tool downloads a subsequent page of CSV results from a read-only query job, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"jobId":{"type":"string","description":"The id of the completed bulk query job."},"locator":{"type":"string","description":"The pagination locator from the previous page's 'Sforce-Locator' response header."},"maxRecords":{"type":"integer","description":"Optional: maximum number of records to return in this page."}},"required":["jobId","locator"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/jobs/query/{jobId}/results","method":"GET","responseType":"text","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"jobId\": arguments.jobId\n }","query":"$sift({\n \"locator\": arguments.locator,\n \"maxRecords\": arguments.maxRecords ? $string(arguments.maxRecords) : null\n }, function($v) { $v != null })"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Run Validation Query","description":"Execute a standard REST SOQL query for validation purposes (e.g., Salesforce DX MCP validation queries), including aggregate queries such as SELECT COUNT() FROM Account. Returns records plus totalSize, done, and (when paginated) nextRecordsUrl. Use 'Get Next Query Results' to page through large result sets.","slug":"run_validation_query","ai_risk":{"level":"low","score":1,"reasoning":"This tool executes a read-only SOQL validation query to retrieve records or counts, posing minimal risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"SOQL query to execute, including COUNT() aggregates (e.g., SELECT COUNT() FROM Account WHERE Industry = 'Technology')."}},"required":["query"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{ \"q\": arguments.query }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get Next Query Results","description":"Retrieve a subsequent page of results for a standard SOQL query. Provide the locator from the previous response's 'nextRecordsUrl' (the trailing identifier after /query/, e.g. '01g...-2000'). Returns the next batch of records.","slug":"get_next_query_results","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves a subsequent page of read-only SOQL query results, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"locator":{"type":"string","description":"The query locator identifier from the previous response's nextRecordsUrl (the value after '/query/')."}},"required":["locator"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query/{locator}","method":"GET","mapping":{"params":"{\n \"instanceUrl\": settings.instanceUrl,\n \"locator\": arguments.locator\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get Query Column Metadata","description":"Retrieve column metadata for a SOQL query without fetching all rows, using the columns=true parameter. Useful for the CLI fallback path to inspect the shape/columns a query would return. Returns column definitions for the query.","slug":"get_query_column_metadata","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves column metadata for a SOQL query, which is a read-only operation and low risk.","calculated_at":"2026-05-22T20:38:01.882Z"},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"SOQL query whose column metadata should be described (e.g., SELECT Id, Name FROM Account)."}},"required":["query"]},"enabled":true,"action":{"path":"{instanceUrl}/services/data/v62.0/query","method":"GET","mapping":{"params":"{ \"instanceUrl\": settings.instanceUrl }","query":"{\n \"q\": arguments.query,\n \"columns\": \"true\"\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}}]}}
@@ -1 +1 @@
1
- {"id":"sharepoint","status":"active","internal_status":"tool-works","applications":["sharepoint"],"definition":{"display":{"name":"Microsoft SharePoint","description":"Microsoft SharePoint is a web-based collaboration platform that integrates with Microsoft 365, providing document management, storage, intranet, and team collaboration capabilities.","icon":"sharepoint.svg","website":"https://www.microsoft.com/en-us/microsoft-365/sharepoint/collaboration","category":"file-storage-document-management","docs_url":"https://docs.withwillow.ai/docs/mcp-servers/built-in/sharepoint"},"api":{"base_url":"https://graph.microsoft.com/v1.0"},"auth":{"methods":{"oauth":{"authUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","User.Read","Sites.Read.All","Sites.ReadWrite.All","Sites.Manage.All","Sites.FullControl.All","Sites.Selected","Files.Read.All","Files.ReadWrite.All","SensitivityLabel.Read"],"defaultScopes":["offline_access","Sites.ReadWrite.All","Sites.FullControl.All"],"pkce":true,"codeExchangeConfig":{"modelCredentialsMapping":"{\n \"access_token\": access_token,\n \"expires_at\": $fromMillis($millis() + expires_in * 1000),\n \"refresh_token\": refresh_token,\n \"scope\": scope,\n \"token_type\": token_type\n}","isForm":true}}}},"conditions":[{"id":"block-sites","name":"Block sensitive sites","description":"Block access to the SharePoint sites you select, including their subsites, document libraries, lists, and pages. Useful for keeping HR, legal, finance, or executive sites out of reach of the model.","action":{"path":"/sites/{site}","method":"GET","mapping":{"params":"{ \"site\": $exists(arguments.siteId)\n ? arguments.siteId\n : arguments.hostname & \":/\" & arguments.serverRelativePath }","query":"{ \"$select\": \"id,displayName,name,webUrl\" }"}},"mapping":"(\n $urls := variables.blockedSiteUrls.$trimTrailingSlash($);\n $matchesAnyGlob(response.webUrl, $append($urls, $urls.($ & \"/*\")))\n )","message":"Access to this SharePoint site is restricted by an organization condition.","variables":[{"key":"blockedSiteUrls","label":"Sensitive sites","description":"This tool won't be able to access the sites you select or any of their subsites.","type":"string[]","required":true,"placeholder":"https://contoso.sharepoint.com/sites/hr","options":{"action":{"path":"/sites","method":"GET","mapping":{"query":"{ \"search\": \"*\", \"$top\": \"100\" }"}},"mapping":"response.value.{ \"value\": webUrl, \"label\": (displayName ? displayName : name) & \" — \" & webUrl }","searchable":true,"searchParam":"search"}}],"appliesTo":["get-site","get-site-by-path","list-subsites","list-documents","get-document","search-documents","upload-document","update-document","delete-document","create-folder","list-site-lists","get-list","list-items","create-list-item","update-list-item","delete-list-item","list-pages","get-page","create-page","list-permissions","create-sharing-link","grant-access","remove-permission"]},{"id":"block-sites-by-name","name":"Block sites by name or URL","description":"Block access to sites whose name or URL matches a pattern. Patterns support the `*` wildcard, so `*confidential*` blocks any site with \"confidential\" in its name or URL, and `*/sites/hr*` blocks every site under an HR prefix. Matching is case-insensitive, and new sites that follow the naming convention are blocked automatically.","action":{"path":"/sites/{site}","method":"GET","mapping":{"params":"{ \"site\": $exists(arguments.siteId)\n ? arguments.siteId\n : arguments.hostname & \":/\" & arguments.serverRelativePath }","query":"{ \"$select\": \"id,displayName,name,webUrl\" }"}},"mapping":"($matchesAnyGlob(response.displayName, variables.blockedPatterns) or $matchesAnyGlob(response.webUrl, variables.blockedPatterns))","message":"Access to this SharePoint site is restricted by an organization condition.","variables":[{"key":"blockedPatterns","label":"Blocked site patterns","description":"Sites whose name or URL matches any of these patterns won't be accessible. Use `*` as a wildcard, e.g. `*confidential*`, `*/sites/hr*`, `Legal *`.","type":"string[]","required":true,"placeholder":"*confidential*, */sites/hr*, */sites/legal*"}],"appliesTo":["get-site","get-site-by-path","list-subsites","list-documents","get-document","search-documents","upload-document","update-document","delete-document","create-folder","list-site-lists","get-list","list-items","create-list-item","update-list-item","delete-list-item","list-pages","get-page","create-page","list-permissions","create-sharing-link","grant-access","remove-permission"]},{"id":"only-sites-by-name","name":"Only allow sites by name or URL","description":"Only allow access to sites whose name or URL matches a pattern; every other site is blocked. Patterns support the `*` wildcard (e.g. `*/sites/team-*`, `*public*`). Matching is case-insensitive, and new sites default to blocked.","action":{"path":"/sites/{site}","method":"GET","mapping":{"params":"{ \"site\": $exists(arguments.siteId)\n ? arguments.siteId\n : arguments.hostname & \":/\" & arguments.serverRelativePath }","query":"{ \"$select\": \"id,displayName,name,webUrl\" }"}},"mapping":"$not(($matchesAnyGlob(response.displayName, variables.allowedPatterns) or $matchesAnyGlob(response.webUrl, variables.allowedPatterns)))","message":"This SharePoint site is not in the list of sites allowed by an organization condition.","variables":[{"key":"allowedPatterns","label":"Allowed site patterns","description":"Only sites whose name or URL matches one of these patterns will be accessible. Use `*` as a wildcard, e.g. `*/sites/team-*`, `*public*`.","type":"string[]","required":true,"placeholder":"*/sites/team-*, *public*"}],"appliesTo":["get-site","get-site-by-path","list-subsites","list-documents","get-document","search-documents","upload-document","update-document","delete-document","create-folder","list-site-lists","get-list","list-items","create-list-item","update-list-item","delete-list-item","list-pages","get-page","create-page","list-permissions","create-sharing-link","grant-access","remove-permission"]},{"id":"block-files-by-sensitivity-label","name":"Block files by sensitivity label","description":"Before accessing a document, read the Microsoft Purview sensitivity label applied to it and block the call when it carries one of the labels you select (e.g. Confidential or Highly Confidential). Requires sensitivity labels to be enabled for SharePoint and OneDrive.","action":{"path":"/sites/{siteId}/drive/items/{itemId}/listItem","method":"GET","mapping":{"params":"{ \"siteId\": arguments.siteId, \"itemId\": arguments.itemId }","query":"{ \"$expand\": \"fields($select=_IpLabelId,_DisplayName)\" }"}},"mapping":"$lowercase(response.fields._IpLabelId) in variables.blockedLabelIds.$lowercase($)","message":"This file carries a sensitivity label that is restricted for this tool.","variables":[{"key":"blockedLabelIds","label":"Sensitive labels","description":"Files labeled with any of the labels you select are blocked from this tool. Select each sublabel you want to block — files carry the sublabel, not its parent.","type":"string[]","required":true,"placeholder":"8faca7b8-8d20-48a3-8ea2-0f96310a848e","options":{"action":{"path":"/security/dataSecurityAndGovernance/sensitivityLabels","method":"GET","mapping":{}},"mapping":"response.value.(\n $parent := name;\n $append(\n { \"value\": id, \"label\": name },\n sublabels.{ \"value\": id, \"label\": $parent & \" › \" & name }\n )\n )","searchable":true}}],"appliesTo":["get-document","update-document","delete-document","create-sharing-link","grant-access","remove-permission"]},{"id":"block-files-by-sensitivity-label-name","name":"Block files by sensitivity label name","description":"Before accessing a document, read the name of the Microsoft Purview sensitivity label applied to it and block the call when it matches a pattern. Patterns support the `*` wildcard, so `*Confidential*` blocks both \"Confidential\" and \"Highly Confidential\" along with their sublabels. Matching is case-insensitive.","action":{"path":"/sites/{siteId}/drive/items/{itemId}/listItem","method":"GET","mapping":{"params":"{ \"siteId\": arguments.siteId, \"itemId\": arguments.itemId }","query":"{ \"$expand\": \"fields($select=_IpLabelId,_DisplayName)\" }"}},"mapping":"$matchesAnyGlob(response.fields._DisplayName, variables.blockedLabelPatterns)","message":"This file carries a sensitivity label that is restricted for this tool.","variables":[{"key":"blockedLabelPatterns","label":"Blocked label name patterns","description":"Files whose sensitivity label name matches any of these patterns are blocked from this tool. Use `*` as a wildcard, e.g. `*Confidential*`, `Restricted*`.","type":"string[]","required":true,"placeholder":"*Confidential*, Restricted*"}],"appliesTo":["get-document","update-document","delete-document","create-sharing-link","grant-access","remove-permission"]}],"tools":[{"name":"List Sites","description":"List all SharePoint sites that the authenticated user has access to. This returns a comprehensive list of sites across the organization, making it ideal for discovering available SharePoint sites. Use this when you need to see all accessible sites or when you're not sure which site contains the information you're looking for.","slug":"list-sites","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all SharePoint sites accessible to the user, making it read-only and low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"search":{"type":"string","description":"Optional search query to filter sites. If not provided, all sites are returned. Use '*' to explicitly search all sites.","default":"*"},"top":{"type":"number","description":"Number of sites to return per page. Default is 25, maximum is 100.","default":25}},"additionalProperties":false},"action":{"path":"/sites","method":"GET","mapping":{"query":"{\n \"search\": $exists(arguments.search) ? arguments.search : \"*\",\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"Get Site","description":"Get detailed information about a specific SharePoint site by its ID. This retrieves site metadata including display name, description, web URL, creation date, and other properties. Use this when you have a site ID and need to get its details or verify site information.","slug":"get-site","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves metadata about a specific SharePoint site, which is read-only and poses low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The unique identifier of the SharePoint site. Format: {hostname},{spSiteId},{spWebId}"}},"required":["siteId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Search Sites","description":"Search for SharePoint sites by keyword or phrase. This performs a full-text search across site names, descriptions, and other metadata. Use this when you're looking for sites related to a specific topic, project, or team but don't know the exact site name or ID.","slug":"search-sites","ai_risk":{"level":"low","score":1,"reasoning":"This tool performs a read-only search for SharePoint sites, making it low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string. Can include keywords, phrases, or site names. For example: 'marketing', 'project alpha', or 'HR team'"},"top":{"type":"number","description":"Number of results to return. Default is 25, maximum is 100.","default":25}},"required":["query"],"additionalProperties":false},"action":{"path":"/sites","method":"GET","mapping":{"query":"{\n \"search\": arguments.query,\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"Get Site by Path","description":"Get a SharePoint site by its hostname and server-relative path. This is useful when you know the site's URL structure. For example, to access a site at 'https://contoso.sharepoint.com/sites/marketing', you would use hostname 'contoso.sharepoint.com' and path '/sites/marketing'.","slug":"get-site-by-path","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves a SharePoint site based on its path, functioning in a read-only manner and thus low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"hostname":{"type":"string","description":"The hostname of the SharePoint site (e.g., 'contoso.sharepoint.com')"},"serverRelativePath":{"type":"string","description":"The server-relative path to the site (e.g., '/sites/marketing')"}},"required":["hostname","serverRelativePath"],"additionalProperties":false},"action":{"path":"/sites/{hostname}:/{serverRelativePath}","method":"GET","mapping":{"params":"{\n \"hostname\": arguments.hostname,\n \"serverRelativePath\": arguments.serverRelativePath\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"List Subsites","description":"List all subsites (child sites) of a parent SharePoint site. Subsites are sites that exist within the hierarchy of a parent site. Use this to explore the site structure and discover nested sites within a site collection.","slug":"list-subsites","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all subsites of a parent site, operating in a read-only capacity and posing low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the parent SharePoint site"},"top":{"type":"number","description":"Number of subsites to return. Default is 25, maximum is 100.","default":25}},"required":["siteId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/sites","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId\n }","query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"List Documents","description":"List all documents and folders in a SharePoint document library. By default, this lists items in the root folder of the default document library. You can optionally specify a folder path to list contents of a specific folder. Returns file metadata including name, size, creation date, modification date, and web URLs.","slug":"list-documents","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists documents in a SharePoint library, making it read-only and low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"folderPath":{"type":"string","description":"Optional: Server-relative path to a specific folder (e.g., '/Marketing Materials'). If not provided, lists items in the root folder."},"top":{"type":"number","description":"Number of items to return. Default is 100, maximum is 999.","default":100}},"required":["siteId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/root{folderPath}/children","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"folderPath\": $exists(arguments.folderPath) ? \":\" & arguments.folderPath & \":\" : \"\"\n }","query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 100\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get Document","description":"Get detailed metadata and download information for a specific document. Returns comprehensive information including file name, size, MIME type, creation/modification dates, download URL, web view link, and sharing information. Use this to retrieve a file's properties or to get a download link.","slug":"get-document","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed metadata for a specific document, functioning in a read-only manner and thus low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"itemId":{"type":"string","description":"The unique identifier of the document or file"}},"required":["siteId","itemId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/items/{itemId}","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"itemId\": arguments.itemId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Search Documents","description":"Search for documents and files within a SharePoint site's document library. Performs full-text search across file names, content, and metadata. This is useful when you need to find specific files but don't know their exact location or when searching for files containing specific keywords.","slug":"search-documents","ai_risk":{"level":"low","score":1,"reasoning":"This tool performs a read-only search for documents, making it low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site to search within"},"query":{"type":"string","description":"Search query string. Can include file names, content keywords, or metadata. For example: 'budget', 'Q4 report', or '.pdf'"},"top":{"type":"number","description":"Number of results to return. Default is 25, maximum is 100.","default":25}},"required":["siteId","query"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/root/search(q='{query}')","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"query\": arguments.query\n }","query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"Upload Document","description":"Upload a new file to a SharePoint document library. You can upload to the root folder or specify a folder path. The file content should be provided as base64-encoded data. For files larger than 4MB, consider using upload sessions (not currently supported). Returns the newly created file's metadata including its ID.","slug":"upload-document","ai_risk":{"level":"medium","score":6,"reasoning":"This tool uploads files to SharePoint, which is destructive and could overwrite existing data, posing medium to high risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"filename":{"type":"string","description":"Name of the file including extension (e.g., 'report.pdf', 'data.xlsx')"},"folderPath":{"type":"string","description":"Optional: Server-relative path to the destination folder (e.g., '/Documents/Projects'). If not provided, uploads to the root folder."},"content":{"type":"string","description":"The file content as a base64-encoded string. For small files only (under 4MB)."}},"required":["siteId","filename","content"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/root:{folderPath}/{filename}:/content","method":"PUT","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"folderPath\": $exists(arguments.folderPath) ? arguments.folderPath : \"\",\n \"filename\": arguments.filename\n }","body":"arguments.content"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"Update Document","description":"Update the content of an existing document in SharePoint. This replaces the entire file content. The new content should be provided as base64-encoded data. This operation preserves the file's ID and metadata while updating only the content. For files larger than 4MB, consider using upload sessions (not currently supported).","slug":"update-document","ai_risk":{"level":"medium","score":5,"reasoning":"This tool updates existing document content, which is destructive and poses medium risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"itemId":{"type":"string","description":"The unique identifier of the document to update"},"content":{"type":"string","description":"The new file content as a base64-encoded string. For small files only (under 4MB)."}},"required":["siteId","itemId","content"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/items/{itemId}/content","method":"PUT","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"itemId\": arguments.itemId\n }","body":"arguments.content"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"Delete Document","description":"Permanently delete a document or file from SharePoint. This operation cannot be easily undone (the file may be in the recycle bin for a period). Use with caution. This works for both files and folders - deleting a folder will delete all its contents.","slug":"delete-document","ai_risk":{"level":"high","score":8,"reasoning":"This tool permanently deletes documents, which is irreversible and poses critical risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"itemId":{"type":"string","description":"The unique identifier of the document or folder to delete"}},"required":["siteId","itemId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/items/{itemId}","method":"DELETE","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"itemId\": arguments.itemId\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"Create Folder","description":"Create a new folder in a SharePoint document library. You can create folders in the root of the library or within existing folders. This is useful for organizing documents into a hierarchical structure. Returns the newly created folder's metadata including its ID.","slug":"create-folder","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new folders in a document library, which is a standard write operation and poses medium risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"folderName":{"type":"string","description":"Name of the new folder (e.g., 'Q1 Reports', 'Marketing Materials')"},"parentPath":{"type":"string","description":"Optional: Server-relative path to the parent folder (e.g., '/Documents/Projects'). If not provided, creates the folder in the root."}},"required":["siteId","folderName"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/root{parentPath}/children","method":"POST","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"parentPath\": $exists(arguments.parentPath) ? \":\" & arguments.parentPath & \":\" : \"\"\n }","body":"{\n \"name\": arguments.folderName,\n \"folder\": {},\n \"@microsoft.graph.conflictBehavior\": \"rename\"\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"List Site Lists","description":"Get all SharePoint lists in a site. This includes custom lists, task lists, calendar lists, and other list types but excludes document libraries. Returns basic information about each list including name, description, list template type, and item count. Use this to discover what lists are available in a site.","slug":"list-site-lists","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all SharePoint lists in a site, functioning in a read-only manner and thus low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"top":{"type":"number","description":"Number of lists to return. Default is 25, maximum is 100.","default":25}},"required":["siteId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/lists","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId\n }","query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get List","description":"Get detailed information about a specific SharePoint list including its display name, description, list template, column definitions, content types, and configuration settings. Use this when you need to understand a list's structure before querying or modifying its items.","slug":"get-list","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific SharePoint list, making it read-only and low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"listId":{"type":"string","description":"The unique identifier of the list. Can also use the list's display name."}},"required":["siteId","listId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/lists/{listId}","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"listId\": arguments.listId\n }","query":"{\n \"$expand\": \"columns\"\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"List Items","description":"Get all items from a SharePoint list. Returns the items with their field values expanded. You can optionally filter and sort the results using OData query parameters. This is useful for retrieving data from custom lists, task lists, or any other SharePoint list type.","slug":"list-items","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all items from a SharePoint list, operating in a read-only capacity and posing low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"listId":{"type":"string","description":"The unique identifier of the list. Can also use the list's display name."},"top":{"type":"number","description":"Number of items to return. Default is 100, maximum is 5000.","default":100},"filter":{"type":"string","description":"Optional OData filter expression to filter items (e.g., 'fields/Status eq ''Active''')"},"orderBy":{"type":"string","description":"Optional OData orderby expression (e.g., 'fields/Title' or 'fields/Created desc')"}},"required":["siteId","listId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/lists/{listId}/items","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"listId\": arguments.listId\n }","query":"$sift({\n \"$expand\": \"fields\",\n \"$top\": $exists(arguments.top) ? arguments.top : 100,\n \"$filter\": arguments.filter,\n \"$orderby\": arguments.orderBy\n }, function($v) { $v != null })"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create List Item","description":"Create a new item in a SharePoint list. Provide the field values as a JSON object where keys are the internal field names and values are the field values. For example: {'Title': 'New Task', 'Status': 'Not Started', 'Priority': 'High'}. Returns the newly created item with its ID.","slug":"create-list-item","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new items in a SharePoint list, which is a standard write operation and poses medium risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"listId":{"type":"string","description":"The unique identifier of the list. Can also use the list's display name."},"fields":{"type":"object","description":"An object containing the field values for the new item. Keys should be internal field names (e.g., 'Title', 'Status', 'DueDate'). Example: {'Title': 'New Task', 'Status': 'In Progress'}"}},"required":["siteId","listId","fields"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/lists/{listId}/items","method":"POST","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"listId\": arguments.listId\n }","body":"{\n \"fields\": arguments.fields\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Sites.ReadWrite.All"]},{"name":"Update List Item","description":"Update an existing item in a SharePoint list. Provide the field values to update as a JSON object. Only the fields you specify will be updated; other fields remain unchanged. For example: {'Status': 'Completed', 'CompletedDate': '2024-03-15'}. Returns the updated item.","slug":"update-list-item","ai_risk":{"level":"low","score":4,"reasoning":"This tool updates existing list items, which is a standard write operation and poses medium risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"listId":{"type":"string","description":"The unique identifier of the list. Can also use the list's display name."},"itemId":{"type":"string","description":"The ID of the list item to update"},"fields":{"type":"object","description":"An object containing the field values to update. Only include fields you want to change. Example: {'Status': 'Completed', 'Priority': 'Low'}"}},"required":["siteId","listId","itemId","fields"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/lists/{listId}/items/{itemId}/fields","method":"PATCH","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"listId\": arguments.listId,\n \"itemId\": arguments.itemId\n }","body":"arguments.fields"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["Sites.ReadWrite.All"]},{"name":"Delete List Item","description":"Delete an item from a SharePoint list. This permanently removes the item from the list. Use with caution as this operation cannot be easily undone. The item may be recoverable from the site's recycle bin for a period of time.","slug":"delete-list-item","ai_risk":{"level":"high","score":8,"reasoning":"This tool permanently deletes items from a list, which is irreversible and poses critical risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"listId":{"type":"string","description":"The unique identifier of the list. Can also use the list's display name."},"itemId":{"type":"string","description":"The ID of the list item to delete"}},"required":["siteId","listId","itemId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/lists/{listId}/items/{itemId}","method":"DELETE","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"listId\": arguments.listId,\n \"itemId\": arguments.itemId\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Sites.ReadWrite.All"]},{"name":"List Pages","description":"List all site pages in a SharePoint site. Site pages are the modern pages used to create content in SharePoint. This returns information about each page including its name, title, web URL, creation date, and publication status. Use this to discover what pages exist in a site.","slug":"list-pages","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all site pages in a SharePoint site, functioning in a read-only manner and thus low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"top":{"type":"number","description":"Number of pages to return. Default is 50, maximum is 100.","default":50}},"required":["siteId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/pages","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId\n }","query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 50\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get Page","description":"Get the content and metadata of a specific SharePoint site page. This returns the page's title, description, web parts, layout information, and full content. Use this to read the content of a page or to understand its structure before making updates.","slug":"get-page","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves content and metadata of a specific site page, making it read-only and low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"pageId":{"type":"string","description":"The unique identifier of the page. This is typically a GUID."}},"required":["siteId","pageId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/pages/{pageId}","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"pageId\": arguments.pageId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Page","description":"Create a new site page in SharePoint. You can specify the page name, title, and page layout type. The page is created as a draft and can be published later. This creates a modern SharePoint page with a blank layout that you can populate with content.","slug":"create-page","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new site pages, which is a standard write operation and poses medium risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"name":{"type":"string","description":"The file name for the page (e.g., 'mypage.aspx'). Must end with .aspx"},"title":{"type":"string","description":"The display title of the page"},"pageLayout":{"type":"string","description":"The layout type for the page. Options: 'article' (default), 'home', or 'repost'","enum":["article","home","repost"],"default":"article"}},"required":["siteId","name","title"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/pages","method":"POST","mapping":{"params":"{\n \"siteId\": arguments.siteId\n }","body":"{\n \"name\": arguments.name,\n \"title\": arguments.title,\n \"pageLayout\": $exists(arguments.pageLayout) ? arguments.pageLayout : \"article\"\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Sites.ReadWrite.All"]},{"name":"List Permissions","description":"List all permissions on a SharePoint site or item. This returns information about who has access to the site/item, their permission levels (roles), and whether permissions are inherited or directly assigned. Use this to audit access or understand the current permission structure.","slug":"list-permissions","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all permissions on a site or item, functioning in a read-only capacity and posing low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"itemId":{"type":"string","description":"Optional: The ID of a specific document or folder. If not provided, returns site-level permissions."}},"required":["siteId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}{itemPath}/permissions","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"itemPath\": $exists(arguments.itemId) ? \"/drive/items/\" & arguments.itemId : \"\"\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["Sites.FullControl.All"]},{"name":"Create Sharing Link","description":"Create a sharing link for a file or folder in SharePoint. This generates a URL that can be shared with others to provide access to the item. You can specify the link type (view, edit, or embed) and scope (anonymous, organization, or specific users). Returns the sharing link URL and other details.","slug":"create-sharing-link","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates sharing links for files or folders, which can expose data and poses medium risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"itemId":{"type":"string","description":"The ID of the file or folder to share"},"type":{"type":"string","description":"The type of sharing link to create. Options: 'view' (read-only), 'edit' (read-write), or 'embed' (embeddable)","enum":["view","edit","embed"],"default":"view"},"scope":{"type":"string","description":"The scope of the link. Options: 'anonymous' (anyone with the link), 'organization' (anyone in the organization), or 'users' (specific users)","enum":["anonymous","organization","users"],"default":"anonymous"}},"required":["siteId","itemId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/items/{itemId}/createLink","method":"POST","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"itemId\": arguments.itemId\n }","body":"{\n \"type\": $exists(arguments.type) ? arguments.type : \"view\",\n \"scope\": $exists(arguments.scope) ? arguments.scope : \"anonymous\"\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"Grant Access","description":"Grant access to a file or folder by sending an invitation to specific users or groups. This sends an email invitation with a link to the item and assigns the specified permission level. Use this when you need to give specific people access to a file or folder with notification.","slug":"grant-access","ai_risk":{"level":"medium","score":6,"reasoning":"This tool grants access to files or folders, which can modify permissions and poses medium to high risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"itemId":{"type":"string","description":"The ID of the file or folder to share"},"recipients":{"type":"array","description":"List of email addresses of users to grant access to. Example: ['user1@contoso.com', 'user2@contoso.com']","items":{"type":"string"}},"roles":{"type":"array","description":"Roles to grant. Options: ['read'] for view-only access, ['write'] for edit access, or ['owner'] for full control","items":{"type":"string","enum":["read","write","owner"]},"default":["read"]},"sendInvitation":{"type":"boolean","description":"Whether to send an email invitation to the recipients. Default is true.","default":true},"message":{"type":"string","description":"Optional personal message to include in the invitation"}},"required":["siteId","itemId","recipients"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/items/{itemId}/invite","method":"POST","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"itemId\": arguments.itemId\n }","body":"$sift({\n \"recipients\": $map(arguments.recipients, function($email) {\n {\"email\": $email}\n })[],\n \"roles\": $exists(arguments.roles) ? arguments.roles : [\"read\"],\n \"sendInvitation\": $exists(arguments.sendInvitation) ? arguments.sendInvitation : true,\n \"message\": arguments.message\n }, function($v) { $v != null })"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"Remove Permission","description":"Remove a specific permission from a file or folder. This revokes access that was previously granted to a user, group, or sharing link. You need the permission ID, which can be obtained from the 'List Permissions' tool. Use this to revoke access when it's no longer needed.","slug":"remove-permission","ai_risk":{"level":"medium","score":6,"reasoning":"This tool removes permissions from files or folders, which can significantly alter access and poses medium to high risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"itemId":{"type":"string","description":"The ID of the file or folder"},"permissionId":{"type":"string","description":"The ID of the permission to remove. Obtain this from the 'List Permissions' tool."}},"required":["siteId","itemId","permissionId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/items/{itemId}/permissions/{permissionId}","method":"DELETE","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"itemId\": arguments.itemId,\n \"permissionId\": arguments.permissionId\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]}]}}
1
+ {"id":"sharepoint","status":"active","internal_status":"tool-works","applications":["sharepoint"],"definition":{"display":{"name":"Microsoft SharePoint","description":"Microsoft SharePoint is a web-based collaboration platform that integrates with Microsoft 365, providing document management, storage, intranet, and team collaboration capabilities.","icon":"sharepoint.svg","website":"https://www.microsoft.com/en-us/microsoft-365/sharepoint/collaboration","category":"file-storage-document-management","docs_url":"https://docs.withwillow.ai/docs/mcp-servers/built-in/sharepoint"},"api":{"base_url":"https://graph.microsoft.com/v1.0"},"auth":{"methods":{"oauth":{"authUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","scopes":["offline_access","User.Read","Sites.Read.All","Sites.ReadWrite.All","Sites.Manage.All","Sites.FullControl.All","Sites.Selected","Files.Read.All","Files.ReadWrite.All","SensitivityLabel.Read"],"defaultScopes":["offline_access","Sites.ReadWrite.All","Sites.FullControl.All"],"scopeTemplates":[{"id":"read-only","name":"Read-only","description":"Browse and search sites, documents, lists and pages. Can't upload, edit or share, and can't list permissions, which needs full control.","scopes":["offline_access","Sites.Read.All","Files.Read.All"]},{"id":"read-write","name":"Read and write","description":"Edit documents, list items and pages and create sharing links, without full control of site collections. Listing permissions stays off.","scopes":["offline_access","Sites.ReadWrite.All","Files.ReadWrite.All"]},{"id":"selected-sites","name":"Selected sites only","description":"Only the site collections an admin grants to the app through Microsoft Graph. Every other site stays invisible.","scopes":["offline_access","Sites.Selected"]},{"id":"full-access","name":"Full access","description":"Full control of every site collection: documents, lists, pages, sharing and permissions, plus sensitivity labels.","scopes":["offline_access","User.Read","Sites.FullControl.All","Sites.Manage.All","Sites.ReadWrite.All","Files.ReadWrite.All","SensitivityLabel.Read"]}],"pkce":true,"codeExchangeConfig":{"modelCredentialsMapping":"{\n \"access_token\": access_token,\n \"expires_at\": $fromMillis($millis() + expires_in * 1000),\n \"refresh_token\": refresh_token,\n \"scope\": scope,\n \"token_type\": token_type\n}","isForm":true}}}},"conditions":[{"id":"block-sites","name":"Block sensitive sites","description":"Block access to the SharePoint sites you select, including their subsites, document libraries, lists, and pages. Useful for keeping HR, legal, finance, or executive sites out of reach of the model.","action":{"path":"/sites/{site}","method":"GET","mapping":{"params":"{ \"site\": $exists(arguments.siteId)\n ? arguments.siteId\n : arguments.hostname & \":/\" & arguments.serverRelativePath }","query":"{ \"$select\": \"id,displayName,name,webUrl\" }"}},"mapping":"(\n $urls := variables.blockedSiteUrls.$trimTrailingSlash($);\n $matchesAnyGlob(response.webUrl, $append($urls, $urls.($ & \"/*\")))\n )","message":"Access to this SharePoint site is restricted by an organization condition.","variables":[{"key":"blockedSiteUrls","label":"Sensitive sites","description":"This tool won't be able to access the sites you select or any of their subsites.","type":"string[]","required":true,"placeholder":"https://contoso.sharepoint.com/sites/hr","options":{"action":{"path":"/sites","method":"GET","mapping":{"query":"{ \"search\": \"*\", \"$top\": \"100\" }"}},"mapping":"response.value.{ \"value\": webUrl, \"label\": (displayName ? displayName : name) & \" — \" & webUrl }","searchable":true,"searchParam":"search"}}],"appliesTo":["get-site","get-site-by-path","list-subsites","list-documents","get-document","search-documents","upload-document","update-document","delete-document","create-folder","list-site-lists","get-list","list-items","create-list-item","update-list-item","delete-list-item","list-pages","get-page","create-page","list-permissions","create-sharing-link","grant-access","remove-permission"]},{"id":"block-sites-by-name","name":"Block sites by name or URL","description":"Block access to sites whose name or URL matches a pattern. Patterns support the `*` wildcard, so `*confidential*` blocks any site with \"confidential\" in its name or URL, and `*/sites/hr*` blocks every site under an HR prefix. Matching is case-insensitive, and new sites that follow the naming convention are blocked automatically.","action":{"path":"/sites/{site}","method":"GET","mapping":{"params":"{ \"site\": $exists(arguments.siteId)\n ? arguments.siteId\n : arguments.hostname & \":/\" & arguments.serverRelativePath }","query":"{ \"$select\": \"id,displayName,name,webUrl\" }"}},"mapping":"($matchesAnyGlob(response.displayName, variables.blockedPatterns) or $matchesAnyGlob(response.webUrl, variables.blockedPatterns))","message":"Access to this SharePoint site is restricted by an organization condition.","variables":[{"key":"blockedPatterns","label":"Blocked site patterns","description":"Sites whose name or URL matches any of these patterns won't be accessible. Use `*` as a wildcard, e.g. `*confidential*`, `*/sites/hr*`, `Legal *`.","type":"string[]","required":true,"placeholder":"*confidential*, */sites/hr*, */sites/legal*"}],"appliesTo":["get-site","get-site-by-path","list-subsites","list-documents","get-document","search-documents","upload-document","update-document","delete-document","create-folder","list-site-lists","get-list","list-items","create-list-item","update-list-item","delete-list-item","list-pages","get-page","create-page","list-permissions","create-sharing-link","grant-access","remove-permission"]},{"id":"only-sites-by-name","name":"Only allow sites by name or URL","description":"Only allow access to sites whose name or URL matches a pattern; every other site is blocked. Patterns support the `*` wildcard (e.g. `*/sites/team-*`, `*public*`). Matching is case-insensitive, and new sites default to blocked.","action":{"path":"/sites/{site}","method":"GET","mapping":{"params":"{ \"site\": $exists(arguments.siteId)\n ? arguments.siteId\n : arguments.hostname & \":/\" & arguments.serverRelativePath }","query":"{ \"$select\": \"id,displayName,name,webUrl\" }"}},"mapping":"$not(($matchesAnyGlob(response.displayName, variables.allowedPatterns) or $matchesAnyGlob(response.webUrl, variables.allowedPatterns)))","message":"This SharePoint site is not in the list of sites allowed by an organization condition.","variables":[{"key":"allowedPatterns","label":"Allowed site patterns","description":"Only sites whose name or URL matches one of these patterns will be accessible. Use `*` as a wildcard, e.g. `*/sites/team-*`, `*public*`.","type":"string[]","required":true,"placeholder":"*/sites/team-*, *public*"}],"appliesTo":["get-site","get-site-by-path","list-subsites","list-documents","get-document","search-documents","upload-document","update-document","delete-document","create-folder","list-site-lists","get-list","list-items","create-list-item","update-list-item","delete-list-item","list-pages","get-page","create-page","list-permissions","create-sharing-link","grant-access","remove-permission"]},{"id":"block-files-by-sensitivity-label","name":"Block files by sensitivity label","description":"Before accessing a document, read the Microsoft Purview sensitivity label applied to it and block the call when it carries one of the labels you select (e.g. Confidential or Highly Confidential). Requires sensitivity labels to be enabled for SharePoint and OneDrive.","action":{"path":"/sites/{siteId}/drive/items/{itemId}/listItem","method":"GET","mapping":{"params":"{ \"siteId\": arguments.siteId, \"itemId\": arguments.itemId }","query":"{ \"$expand\": \"fields($select=_IpLabelId,_DisplayName)\" }"}},"mapping":"$lowercase(response.fields._IpLabelId) in variables.blockedLabelIds.$lowercase($)","message":"This file carries a sensitivity label that is restricted for this tool.","variables":[{"key":"blockedLabelIds","label":"Sensitive labels","description":"Files labeled with any of the labels you select are blocked from this tool. Select each sublabel you want to block — files carry the sublabel, not its parent.","type":"string[]","required":true,"placeholder":"8faca7b8-8d20-48a3-8ea2-0f96310a848e","options":{"action":{"path":"/security/dataSecurityAndGovernance/sensitivityLabels","method":"GET","mapping":{}},"mapping":"response.value.(\n $parent := name;\n $append(\n { \"value\": id, \"label\": name },\n sublabels.{ \"value\": id, \"label\": $parent & \" › \" & name }\n )\n )","searchable":true}}],"appliesTo":["get-document","update-document","delete-document","create-sharing-link","grant-access","remove-permission"]},{"id":"block-files-by-sensitivity-label-name","name":"Block files by sensitivity label name","description":"Before accessing a document, read the name of the Microsoft Purview sensitivity label applied to it and block the call when it matches a pattern. Patterns support the `*` wildcard, so `*Confidential*` blocks both \"Confidential\" and \"Highly Confidential\" along with their sublabels. Matching is case-insensitive.","action":{"path":"/sites/{siteId}/drive/items/{itemId}/listItem","method":"GET","mapping":{"params":"{ \"siteId\": arguments.siteId, \"itemId\": arguments.itemId }","query":"{ \"$expand\": \"fields($select=_IpLabelId,_DisplayName)\" }"}},"mapping":"$matchesAnyGlob(response.fields._DisplayName, variables.blockedLabelPatterns)","message":"This file carries a sensitivity label that is restricted for this tool.","variables":[{"key":"blockedLabelPatterns","label":"Blocked label name patterns","description":"Files whose sensitivity label name matches any of these patterns are blocked from this tool. Use `*` as a wildcard, e.g. `*Confidential*`, `Restricted*`.","type":"string[]","required":true,"placeholder":"*Confidential*, Restricted*"}],"appliesTo":["get-document","update-document","delete-document","create-sharing-link","grant-access","remove-permission"]}],"tools":[{"name":"List Sites","description":"List all SharePoint sites that the authenticated user has access to. This returns a comprehensive list of sites across the organization, making it ideal for discovering available SharePoint sites. Use this when you need to see all accessible sites or when you're not sure which site contains the information you're looking for.","slug":"list-sites","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all SharePoint sites accessible to the user, making it read-only and low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"search":{"type":"string","description":"Optional search query to filter sites. If not provided, all sites are returned. Use '*' to explicitly search all sites.","default":"*"},"top":{"type":"number","description":"Number of sites to return per page. Default is 25, maximum is 100.","default":25}},"additionalProperties":false},"action":{"path":"/sites","method":"GET","mapping":{"query":"{\n \"search\": $exists(arguments.search) ? arguments.search : \"*\",\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"Get Site","description":"Get detailed information about a specific SharePoint site by its ID. This retrieves site metadata including display name, description, web URL, creation date, and other properties. Use this when you have a site ID and need to get its details or verify site information.","slug":"get-site","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves metadata about a specific SharePoint site, which is read-only and poses low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The unique identifier of the SharePoint site. Format: {hostname},{spSiteId},{spWebId}"}},"required":["siteId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Search Sites","description":"Search for SharePoint sites by keyword or phrase. This performs a full-text search across site names, descriptions, and other metadata. Use this when you're looking for sites related to a specific topic, project, or team but don't know the exact site name or ID.","slug":"search-sites","ai_risk":{"level":"low","score":1,"reasoning":"This tool performs a read-only search for SharePoint sites, making it low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string. Can include keywords, phrases, or site names. For example: 'marketing', 'project alpha', or 'HR team'"},"top":{"type":"number","description":"Number of results to return. Default is 25, maximum is 100.","default":25}},"required":["query"],"additionalProperties":false},"action":{"path":"/sites","method":"GET","mapping":{"query":"{\n \"search\": arguments.query,\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"Get Site by Path","description":"Get a SharePoint site by its hostname and server-relative path. This is useful when you know the site's URL structure. For example, to access a site at 'https://contoso.sharepoint.com/sites/marketing', you would use hostname 'contoso.sharepoint.com' and path '/sites/marketing'.","slug":"get-site-by-path","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves a SharePoint site based on its path, functioning in a read-only manner and thus low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"hostname":{"type":"string","description":"The hostname of the SharePoint site (e.g., 'contoso.sharepoint.com')"},"serverRelativePath":{"type":"string","description":"The server-relative path to the site (e.g., '/sites/marketing')"}},"required":["hostname","serverRelativePath"],"additionalProperties":false},"action":{"path":"/sites/{hostname}:/{serverRelativePath}","method":"GET","mapping":{"params":"{\n \"hostname\": arguments.hostname,\n \"serverRelativePath\": arguments.serverRelativePath\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"List Subsites","description":"List all subsites (child sites) of a parent SharePoint site. Subsites are sites that exist within the hierarchy of a parent site. Use this to explore the site structure and discover nested sites within a site collection.","slug":"list-subsites","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all subsites of a parent site, operating in a read-only capacity and posing low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the parent SharePoint site"},"top":{"type":"number","description":"Number of subsites to return. Default is 25, maximum is 100.","default":25}},"required":["siteId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/sites","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId\n }","query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"List Documents","description":"List all documents and folders in a SharePoint document library. By default, this lists items in the root folder of the default document library. You can optionally specify a folder path to list contents of a specific folder. Returns file metadata including name, size, creation date, modification date, and web URLs.","slug":"list-documents","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists documents in a SharePoint library, making it read-only and low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"folderPath":{"type":"string","description":"Optional: Server-relative path to a specific folder (e.g., '/Marketing Materials'). If not provided, lists items in the root folder."},"top":{"type":"number","description":"Number of items to return. Default is 100, maximum is 999.","default":100}},"required":["siteId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/root{folderPath}/children","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"folderPath\": $exists(arguments.folderPath) ? \":\" & arguments.folderPath & \":\" : \"\"\n }","query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 100\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get Document","description":"Get detailed metadata and download information for a specific document. Returns comprehensive information including file name, size, MIME type, creation/modification dates, download URL, web view link, and sharing information. Use this to retrieve a file's properties or to get a download link.","slug":"get-document","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed metadata for a specific document, functioning in a read-only manner and thus low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"itemId":{"type":"string","description":"The unique identifier of the document or file"}},"required":["siteId","itemId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/items/{itemId}","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"itemId\": arguments.itemId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Search Documents","description":"Search for documents and files within a SharePoint site's document library. Performs full-text search across file names, content, and metadata. This is useful when you need to find specific files but don't know their exact location or when searching for files containing specific keywords.","slug":"search-documents","ai_risk":{"level":"low","score":1,"reasoning":"This tool performs a read-only search for documents, making it low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site to search within"},"query":{"type":"string","description":"Search query string. Can include file names, content keywords, or metadata. For example: 'budget', 'Q4 report', or '.pdf'"},"top":{"type":"number","description":"Number of results to return. Default is 25, maximum is 100.","default":25}},"required":["siteId","query"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/root/search(q='{query}')","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"query\": arguments.query\n }","query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"Upload Document","description":"Upload a new file to a SharePoint document library. You can upload to the root folder or specify a folder path. The file content should be provided as base64-encoded data. For files larger than 4MB, consider using upload sessions (not currently supported). Returns the newly created file's metadata including its ID.","slug":"upload-document","ai_risk":{"level":"medium","score":6,"reasoning":"This tool uploads files to SharePoint, which is destructive and could overwrite existing data, posing medium to high risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"filename":{"type":"string","description":"Name of the file including extension (e.g., 'report.pdf', 'data.xlsx')"},"folderPath":{"type":"string","description":"Optional: Server-relative path to the destination folder (e.g., '/Documents/Projects'). If not provided, uploads to the root folder."},"content":{"type":"string","description":"The file content as a base64-encoded string. For small files only (under 4MB)."}},"required":["siteId","filename","content"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/root:{folderPath}/{filename}:/content","method":"PUT","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"folderPath\": $exists(arguments.folderPath) ? arguments.folderPath : \"\",\n \"filename\": arguments.filename\n }","body":"arguments.content"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"Update Document","description":"Update the content of an existing document in SharePoint. This replaces the entire file content. The new content should be provided as base64-encoded data. This operation preserves the file's ID and metadata while updating only the content. For files larger than 4MB, consider using upload sessions (not currently supported).","slug":"update-document","ai_risk":{"level":"medium","score":5,"reasoning":"This tool updates existing document content, which is destructive and poses medium risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"itemId":{"type":"string","description":"The unique identifier of the document to update"},"content":{"type":"string","description":"The new file content as a base64-encoded string. For small files only (under 4MB)."}},"required":["siteId","itemId","content"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/items/{itemId}/content","method":"PUT","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"itemId\": arguments.itemId\n }","body":"arguments.content"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"Delete Document","description":"Permanently delete a document or file from SharePoint. This operation cannot be easily undone (the file may be in the recycle bin for a period). Use with caution. This works for both files and folders - deleting a folder will delete all its contents.","slug":"delete-document","ai_risk":{"level":"high","score":8,"reasoning":"This tool permanently deletes documents, which is irreversible and poses critical risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"itemId":{"type":"string","description":"The unique identifier of the document or folder to delete"}},"required":["siteId","itemId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/items/{itemId}","method":"DELETE","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"itemId\": arguments.itemId\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"Create Folder","description":"Create a new folder in a SharePoint document library. You can create folders in the root of the library or within existing folders. This is useful for organizing documents into a hierarchical structure. Returns the newly created folder's metadata including its ID.","slug":"create-folder","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new folders in a document library, which is a standard write operation and poses medium risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"folderName":{"type":"string","description":"Name of the new folder (e.g., 'Q1 Reports', 'Marketing Materials')"},"parentPath":{"type":"string","description":"Optional: Server-relative path to the parent folder (e.g., '/Documents/Projects'). If not provided, creates the folder in the root."}},"required":["siteId","folderName"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/root{parentPath}/children","method":"POST","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"parentPath\": $exists(arguments.parentPath) ? \":\" & arguments.parentPath & \":\" : \"\"\n }","body":"{\n \"name\": arguments.folderName,\n \"folder\": {},\n \"@microsoft.graph.conflictBehavior\": \"rename\"\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"List Site Lists","description":"Get all SharePoint lists in a site. This includes custom lists, task lists, calendar lists, and other list types but excludes document libraries. Returns basic information about each list including name, description, list template type, and item count. Use this to discover what lists are available in a site.","slug":"list-site-lists","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all SharePoint lists in a site, functioning in a read-only manner and thus low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"top":{"type":"number","description":"Number of lists to return. Default is 25, maximum is 100.","default":25}},"required":["siteId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/lists","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId\n }","query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get List","description":"Get detailed information about a specific SharePoint list including its display name, description, list template, column definitions, content types, and configuration settings. Use this when you need to understand a list's structure before querying or modifying its items.","slug":"get-list","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific SharePoint list, making it read-only and low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"listId":{"type":"string","description":"The unique identifier of the list. Can also use the list's display name."}},"required":["siteId","listId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/lists/{listId}","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"listId\": arguments.listId\n }","query":"{\n \"$expand\": \"columns\"\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"List Items","description":"Get all items from a SharePoint list. Returns the items with their field values expanded. You can optionally filter and sort the results using OData query parameters. This is useful for retrieving data from custom lists, task lists, or any other SharePoint list type.","slug":"list-items","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all items from a SharePoint list, operating in a read-only capacity and posing low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"listId":{"type":"string","description":"The unique identifier of the list. Can also use the list's display name."},"top":{"type":"number","description":"Number of items to return. Default is 100, maximum is 5000.","default":100},"filter":{"type":"string","description":"Optional OData filter expression to filter items (e.g., 'fields/Status eq ''Active''')"},"orderBy":{"type":"string","description":"Optional OData orderby expression (e.g., 'fields/Title' or 'fields/Created desc')"}},"required":["siteId","listId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/lists/{listId}/items","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"listId\": arguments.listId\n }","query":"$sift({\n \"$expand\": \"fields\",\n \"$top\": $exists(arguments.top) ? arguments.top : 100,\n \"$filter\": arguments.filter,\n \"$orderby\": arguments.orderBy\n }, function($v) { $v != null })"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create List Item","description":"Create a new item in a SharePoint list. Provide the field values as a JSON object where keys are the internal field names and values are the field values. For example: {'Title': 'New Task', 'Status': 'Not Started', 'Priority': 'High'}. Returns the newly created item with its ID.","slug":"create-list-item","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new items in a SharePoint list, which is a standard write operation and poses medium risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"listId":{"type":"string","description":"The unique identifier of the list. Can also use the list's display name."},"fields":{"type":"object","description":"An object containing the field values for the new item. Keys should be internal field names (e.g., 'Title', 'Status', 'DueDate'). Example: {'Title': 'New Task', 'Status': 'In Progress'}"}},"required":["siteId","listId","fields"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/lists/{listId}/items","method":"POST","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"listId\": arguments.listId\n }","body":"{\n \"fields\": arguments.fields\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Sites.ReadWrite.All"]},{"name":"Update List Item","description":"Update an existing item in a SharePoint list. Provide the field values to update as a JSON object. Only the fields you specify will be updated; other fields remain unchanged. For example: {'Status': 'Completed', 'CompletedDate': '2024-03-15'}. Returns the updated item.","slug":"update-list-item","ai_risk":{"level":"low","score":4,"reasoning":"This tool updates existing list items, which is a standard write operation and poses medium risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"listId":{"type":"string","description":"The unique identifier of the list. Can also use the list's display name."},"itemId":{"type":"string","description":"The ID of the list item to update"},"fields":{"type":"object","description":"An object containing the field values to update. Only include fields you want to change. Example: {'Status': 'Completed', 'Priority': 'Low'}"}},"required":["siteId","listId","itemId","fields"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/lists/{listId}/items/{itemId}/fields","method":"PATCH","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"listId\": arguments.listId,\n \"itemId\": arguments.itemId\n }","body":"arguments.fields"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["Sites.ReadWrite.All"]},{"name":"Delete List Item","description":"Delete an item from a SharePoint list. This permanently removes the item from the list. Use with caution as this operation cannot be easily undone. The item may be recoverable from the site's recycle bin for a period of time.","slug":"delete-list-item","ai_risk":{"level":"high","score":8,"reasoning":"This tool permanently deletes items from a list, which is irreversible and poses critical risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"listId":{"type":"string","description":"The unique identifier of the list. Can also use the list's display name."},"itemId":{"type":"string","description":"The ID of the list item to delete"}},"required":["siteId","listId","itemId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/lists/{listId}/items/{itemId}","method":"DELETE","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"listId\": arguments.listId,\n \"itemId\": arguments.itemId\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Sites.ReadWrite.All"]},{"name":"List Pages","description":"List all site pages in a SharePoint site. Site pages are the modern pages used to create content in SharePoint. This returns information about each page including its name, title, web URL, creation date, and publication status. Use this to discover what pages exist in a site.","slug":"list-pages","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all site pages in a SharePoint site, functioning in a read-only manner and thus low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"top":{"type":"number","description":"Number of pages to return. Default is 50, maximum is 100.","default":50}},"required":["siteId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/pages","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId\n }","query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 50\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get Page","description":"Get the content and metadata of a specific SharePoint site page. This returns the page's title, description, web parts, layout information, and full content. Use this to read the content of a page or to understand its structure before making updates.","slug":"get-page","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves content and metadata of a specific site page, making it read-only and low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"pageId":{"type":"string","description":"The unique identifier of the page. This is typically a GUID."}},"required":["siteId","pageId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/pages/{pageId}","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"pageId\": arguments.pageId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Create Page","description":"Create a new site page in SharePoint. You can specify the page name, title, and page layout type. The page is created as a draft and can be published later. This creates a modern SharePoint page with a blank layout that you can populate with content.","slug":"create-page","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new site pages, which is a standard write operation and poses medium risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"name":{"type":"string","description":"The file name for the page (e.g., 'mypage.aspx'). Must end with .aspx"},"title":{"type":"string","description":"The display title of the page"},"pageLayout":{"type":"string","description":"The layout type for the page. Options: 'article' (default), 'home', or 'repost'","enum":["article","home","repost"],"default":"article"}},"required":["siteId","name","title"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/pages","method":"POST","mapping":{"params":"{\n \"siteId\": arguments.siteId\n }","body":"{\n \"name\": arguments.name,\n \"title\": arguments.title,\n \"pageLayout\": $exists(arguments.pageLayout) ? arguments.pageLayout : \"article\"\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Sites.ReadWrite.All"]},{"name":"List Permissions","description":"List all permissions on a SharePoint site or item. This returns information about who has access to the site/item, their permission levels (roles), and whether permissions are inherited or directly assigned. Use this to audit access or understand the current permission structure.","slug":"list-permissions","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all permissions on a site or item, functioning in a read-only capacity and posing low risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"itemId":{"type":"string","description":"Optional: The ID of a specific document or folder. If not provided, returns site-level permissions."}},"required":["siteId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}{itemPath}/permissions","method":"GET","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"itemPath\": $exists(arguments.itemId) ? \"/drive/items/\" & arguments.itemId : \"\"\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["Sites.FullControl.All"]},{"name":"Create Sharing Link","description":"Create a sharing link for a file or folder in SharePoint. This generates a URL that can be shared with others to provide access to the item. You can specify the link type (view, edit, or embed) and scope (anonymous, organization, or specific users). Returns the sharing link URL and other details.","slug":"create-sharing-link","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates sharing links for files or folders, which can expose data and poses medium risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"itemId":{"type":"string","description":"The ID of the file or folder to share"},"type":{"type":"string","description":"The type of sharing link to create. Options: 'view' (read-only), 'edit' (read-write), or 'embed' (embeddable)","enum":["view","edit","embed"],"default":"view"},"scope":{"type":"string","description":"The scope of the link. Options: 'anonymous' (anyone with the link), 'organization' (anyone in the organization), or 'users' (specific users)","enum":["anonymous","organization","users"],"default":"anonymous"}},"required":["siteId","itemId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/items/{itemId}/createLink","method":"POST","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"itemId\": arguments.itemId\n }","body":"{\n \"type\": $exists(arguments.type) ? arguments.type : \"view\",\n \"scope\": $exists(arguments.scope) ? arguments.scope : \"anonymous\"\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"Grant Access","description":"Grant access to a file or folder by sending an invitation to specific users or groups. This sends an email invitation with a link to the item and assigns the specified permission level. Use this when you need to give specific people access to a file or folder with notification.","slug":"grant-access","ai_risk":{"level":"medium","score":6,"reasoning":"This tool grants access to files or folders, which can modify permissions and poses medium to high risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"itemId":{"type":"string","description":"The ID of the file or folder to share"},"recipients":{"type":"array","description":"List of email addresses of users to grant access to. Example: ['user1@contoso.com', 'user2@contoso.com']","items":{"type":"string"}},"roles":{"type":"array","description":"Roles to grant. Options: ['read'] for view-only access, ['write'] for edit access, or ['owner'] for full control","items":{"type":"string","enum":["read","write","owner"]},"default":["read"]},"sendInvitation":{"type":"boolean","description":"Whether to send an email invitation to the recipients. Default is true.","default":true},"message":{"type":"string","description":"Optional personal message to include in the invitation"}},"required":["siteId","itemId","recipients"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/items/{itemId}/invite","method":"POST","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"itemId\": arguments.itemId\n }","body":"$sift({\n \"recipients\": $map(arguments.recipients, function($email) {\n {\"email\": $email}\n })[],\n \"roles\": $exists(arguments.roles) ? arguments.roles : [\"read\"],\n \"sendInvitation\": $exists(arguments.sendInvitation) ? arguments.sendInvitation : true,\n \"message\": arguments.message\n }, function($v) { $v != null })"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"Remove Permission","description":"Remove a specific permission from a file or folder. This revokes access that was previously granted to a user, group, or sharing link. You need the permission ID, which can be obtained from the 'List Permissions' tool. Use this to revoke access when it's no longer needed.","slug":"remove-permission","ai_risk":{"level":"medium","score":6,"reasoning":"This tool removes permissions from files or folders, which can significantly alter access and poses medium to high risk.","calculated_at":"2026-05-22T20:39:11.433Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"siteId":{"type":"string","description":"The ID of the SharePoint site"},"itemId":{"type":"string","description":"The ID of the file or folder"},"permissionId":{"type":"string","description":"The ID of the permission to remove. Obtain this from the 'List Permissions' tool."}},"required":["siteId","itemId","permissionId"],"additionalProperties":false},"action":{"path":"/sites/{siteId}/drive/items/{itemId}/permissions/{permissionId}","method":"DELETE","mapping":{"params":"{\n \"siteId\": arguments.siteId,\n \"itemId\": arguments.itemId,\n \"permissionId\": arguments.permissionId\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]}]}}