{"name":"io.github.mindstone/mcp-server-salesforce","slug":"mindstone-mcp-server-salesforce","title":"Salesforce","description":"Salesforce CRM MCP server: accounts, contacts, opportunities, leads, tasks, and custom objects","url":"https://mcp.market/server/mindstone-mcp-server-salesforce","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"sales","tags":["sales"],"presence":{"score":34,"stars":12,"forks":4,"downloads_week":36,"last_push_at":"2026-09-13T00:54:57.000Z","license":"NOASSERTION"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/mindstone/mcp-servers","website":null,"version":"0.2.2","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@mindstone/mcp-server-salesforce","version":"0.2.2","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Salesforce Connected App client ID (recommended path)","isRequired":true,"format":"string","name":"SALESFORCE_CLIENT_ID"},{"description":"Salesforce Connected App client secret (recommended path)","isRequired":true,"format":"string","isSecret":true,"name":"SALESFORCE_CLIENT_SECRET"},{"description":"Set to true for sandbox environments","format":"string","name":"SALESFORCE_SANDBOX"},{"description":"Static access token (alternative to OAuth)","format":"string","isSecret":true,"name":"SALESFORCE_ACCESS_TOKEN"},{"description":"Salesforce instance URL (required for manual token mode)","format":"string","name":"SALESFORCE_INSTANCE_URL"},{"description":"Custom config directory","format":"filepath","default":"~/.mcp/salesforce","name":"SALESFORCE_CONFIG_DIR"},{"description":"OAuth callback port (0 = OS-assigned)","format":"number","default":"0","name":"SALESFORCE_OAUTH_PORT"},{"description":"Space-separated OAuth scopes","format":"string","name":"SALESFORCE_OAUTH_SCOPES"}]}],"tools":[{"name":"salesforce_connect_account","description":"Connect a Salesforce account via OAuth. Takes no parameters — call with {}. Initiates OAuth flow — in standalone mode, opens a browser URL for Salesforce sign-in. In bridge mode, delegates to the host app. WHEN TO USE: - No Salesforce account is connected - Authentication errors from other tools - User asks to connect Salesforce After connecting, verify with salesforce_list_connected_accounts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_convert_lead","description":"Convert a lead into Account + Contact, and optionally an Opportunity. Required: lead_id. Optional: create_opportunity, opportunity_name.","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_create_account","description":"Create a CRM account. Required: name. Optional: industry, type, phone, website, description, fields.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_create_case","description":"Create a support case. Required: subject. Optional: status, priority, origin, description, related_account_id, related_contact_id, fields.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_create_contact","description":"Create a contact. Required: last_name. Optional: first_name, email, phone, title, related_account_id, fields.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_create_event","description":"Create a calendar event. Required: subject, start_date_time, end_date_time. Optional: location, description, who_id, what_id, is_all_day_event, owner_id, fields. Datetimes must be ISO 8601 (e.g. \"2026-01-09T14:30:00Z\"); all-day events accept plain dates (YYYY-MM-DD).","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_create_lead","description":"Create a lead. Required: last_name, company. Optional: first_name, email, phone, title, status, fields.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_create_note","description":"Create a note (ContentNote). Required: title, body. Optional: parent_id — a record ID to attach the note to (Account, Contact, Opportunity, Case, Lead, etc.).","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_create_opportunity","description":"Create an opportunity. Required: name, stage_name, close_date (YYYY-MM-DD). Optional: amount, related_account_id, description, fields.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_create_record","description":"Generic record creation for any Salesforce object. For standard objects, prefer dedicated tools.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_create_task","description":"Create a task. Required: subject. Optional: status, priority, who_id, what_id, activity_date, description, owner_id, fields.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_describe_object","description":"Get object metadata and field definitions. Returns field names, types, and required flags. Common objects: Account, Contact, Opportunity, Lead, Case, Task.","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_disconnect_account","description":"Disconnect a Salesforce account. Example: { \"username\": \"user@company.com\" } Accepts the account `ref` from salesforce_list_connected_accounts as well as the raw username. Permanently removes stored credentials. Use when switching accounts or troubleshooting.","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_get_accounts","description":"Get CRM accounts. Filters: name_contains, industry, account_type. Returns: Id, Name, Industry, Type, Phone, Website, Description. Max 200 records (default: 50).","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_get_campaign_members","description":"Get campaign members (leads/contacts in a campaign). Filters: campaign_id, lead_id, contact_id, status. Returns: Id, CampaignId, LeadId, ContactId, Status, CreatedDate. Max 200 (default: 50).","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_get_campaigns","description":"Get marketing campaigns. Filters: name_contains, campaign_type, status, is_active, start_date_from, start_date_to. Returns: Id, Name, Type, Status, IsActive, StartDate, EndDate, Description. Max 200 (default: 50).","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_get_cases","description":"Get support cases. Filters: subject_contains, status, priority, related_account_id, related_contact_id, is_closed. Returns: Id, CaseNumber, Subject, Status, Priority, Origin, Description, AccountId, ContactId, OwnerId, CreatedDate, ClosedDate. Max 200 (default: 50).","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_get_contacts","description":"Get contacts. Filters: name_contains, email_contains, related_account_id. Returns: Id, FirstName, LastName, Email, Phone, Title, AccountId. Max 200 (default: 50).","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_get_events","description":"Get calendar events. Filters: subject_contains, who_id, what_id, start_from, start_to. Dates accept YYYY-MM-DD (midnight UTC) or ISO 8601 datetimes. Returns: Id, Subject, StartDateTime, EndDateTime, Location, Description, WhoId, WhatId, OwnerId, IsAllDayEvent. Max 200 (default: 50).","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_get_leads","description":"Get leads. Filters: name_contains, company_contains, email_contains, status. Max 200 (default: 50).","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_get_notes","description":"Get notes attached to a record (ContentNote linked via ContentDocumentLink). Required: parent_id (Account, Contact, Opportunity, Case, Lead, or any record ID). Returns note Id, Title, TextPreview, CreatedDate, OwnerId; set include_body=true to also return the full note text. Max 200 (default: 50).","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_get_opportunities","description":"Get opportunities. Filters: name_contains, stage, related_account_id, close_date_from, close_date_to. Dates must be YYYY-MM-DD. Max 200 (default: 50).","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_get_records","description":"Generic record query for any Salesforce object. For standard objects, prefer dedicated get tools.","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_get_tasks","description":"Get tasks. Filters: subject_contains, status, priority, who_id, what_id, activity_date_from, activity_date_to. Max 200 (default: 50).","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_get_users","description":"Get Salesforce users. Filters: name_contains, email_contains, role_contains, is_active. Max 200 (default: 50).","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_list_connected_accounts","description":"List connected Salesforce accounts. Takes no parameters — call with {}. Call this FIRST before any Salesforce CRM operations to verify authentication. This MCP instance operates on a single Salesforce account. If no account is connected, use salesforce_connect_account.","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_list_objects","description":"List available Salesforce sObjects. Default shows custom objects only. Set custom_only=false to include standard objects.","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_query","description":"Execute a raw SOQL query. For advanced queries only — prefer dedicated tools for standard operations. Max 200 records enforced.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_run_report","description":"Run an existing Salesforce report (Analytics REST API) and return its aggregated result. Required: report_id (the report's 15- or 18-character ID, visible in the report URL). Set include_details=true to include detail rows, not just groupings and aggregates.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_search","description":"Cross-object full-text search (SOSL). Use for \"find anything mentioning X\" requests — searches names, emails, and other indexed text fields at once. Defaults to Account, Contact, Lead, Opportunity; pass objects to widen or narrow. Max 200 results; the response's \"truncated\" flag is true when more matches exist beyond the limit.","write_action":false,"price_micros":0,"input_schema":null},{"name":"salesforce_update_account","description":"Update a CRM account. Required: id. Updatable: name, industry, type, phone, website, description, fields.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_update_case","description":"Update a support case. Required: id. Updatable: subject, status, priority, origin, description, related_account_id, related_contact_id, fields.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_update_contact","description":"Update a contact. Required: id. Updatable: first_name, last_name, email, phone, title, fields.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_update_lead","description":"Update a lead. Required: lead_id. Updatable: first_name, last_name, company, email, phone, title, status, fields.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_update_opportunity","description":"Update an opportunity. Required: id. Updatable: name, stage_name, close_date (YYYY-MM-DD), amount, description, fields.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_update_record","description":"Generic record update for any Salesforce object. For standard objects, prefer dedicated tools.","write_action":true,"price_micros":0,"input_schema":null},{"name":"salesforce_update_task","description":"Update a task. Required: id. Updatable: subject, status, priority, who_id, what_id, activity_date, description, owner_id, fields.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":85,"grade":"A","scanned_at":"2026-09-23T04:54:51.192Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-23T04:54:51.098Z","components":{"code":{"score":25,"max":25,"notes":["47 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 10 days ago"]},"identity":{"score":9,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@mindstone/mcp-server-salesforce","version":"0.2.2","found":true,"license":"FSL-1.1-MIT","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-08-18T11:38:15.483Z","repositoryUrl":"git+https://github.com/mindstone/mcp-servers.git","weeklyDownloads":36}],"repo":{"found":true,"owner":"mindstone","repo":"mcp-servers","archived":false,"pushedAt":"2026-09-13T00:54:57Z","stars":12,"forks":4,"openIssues":24,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/58389135?v=4","ownerCreatedAt":"2019-12-01T11:21:22Z","license":"NOASSERTION"},"icon":{"url":"https://avatars.githubusercontent.com/u/58389135?v=4&s=128","source":"github"},"presence":{"stars":12,"forks":4,"downloadsWeek":36,"license":"NOASSERTION","lastPushAt":"2026-09-13T00:54:57.000Z","score":34}}}},"grade_history":[],"reviews":[]}