agentforce-mcp-server

pkurimella/agentforce-mcp-server

3.3

If you are the rightful owner of agentforce-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

The Agentforce MCP Server is designed to facilitate communication between Salesforce's Agentforce Service Agent and MCP-compatible clients using the Model Context Protocol.

MCP Architecture with Agentforce

Agentforce MCP Server

This is an MCP (Model Context Protocol) server for Salesforce's Agentforce Service Agent. THe MCP Server uses Agentforce Agent API to communicate with the Agent while exposing the main API interfaces as Tools based on the MCP Protocol.

🧩 MCP Tools Exposed

Tool NameDescription
start-sessionInitializes a new Agentforce chat session
send-messageSends a message to the active session
end-sessionEnds the active session

🛠️ Requirements

  • Node.js 18+
  • Salesforce Org with Agentforce and an active Agentforce Service Agent
  • Connected App with Client Credentials OAuth2 flow
  • MCP-compatible client (e.g. ChatGPT, Open Interpreter, or custom)

📦 Installation

npm install

Or if you're setting up from scratch:

npm install @modelcontextprotocol/sdk axios zod

🔧 Build

npm run build

🔍 Testing

Use an MCP-compatible client (like MCP Inspector) to call tools and verify responses https://modelcontextprotocol.io/docs/tools/inspector.

🛡️ Error Handling

All errors are standardized using a centralized error handler. If something goes wrong (e.g., authentication failure), meaningful messages will be shown.

Claude Desktop Config

The following uses stdio so the mcp server is running locally.

{
  "mcpServers": {
    "agentforce" : {
            "command": "node",
            "args": [
                "/path/to/directory/build/server.js",
                "SALESFORCE_ORG_DOMAIN_URL",
                "CONNECTEDAPP_CLIENT_ID",
                "CONNECTEDAPP_CLIENT_SECRET",
                "AGENT_ID"
            ]
        }
  }
}

##💡 Notes

This server uses STDIO transport. If you want to use SSEServerTransport use the sample below

import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
import express from "express";

const app = express();
var transport: SSEServerTransport ;

app.get("/sse", async (req, res) => {
  transport = new SSEServerTransport("/messages", res);
  await server.connect(transport);
});

app.post("/messages", async (req, res) => {
  // Note: to support multiple simultaneous connections, these messages will
  // need to be routed to a specific matching transport. (This logic isn't
  // implemented here, for simplicity.)
  await transport.handlePostMessage(req, res);
});

app.listen(PORT);