Skip to content

Commit f3783cd

Browse files
bethh0rnsixhobbits
authored andcommitted
Edit: Account management with MCP
1 parent 9d45068 commit f3783cd

File tree

1 file changed

+96
-90
lines changed
  • mcp/using-mcp/use-cases/account-management

1 file changed

+96
-90
lines changed
Lines changed: 96 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,47 @@
11
---
2-
title: "Account management using MCP"
2+
title: "Account management with MCP"
33
description: Set up automated workflows between Slack and HubSpot using MCP servers in Claude Desktop. Turn emoji reactions into CRM updates with this step-by-step guide.
44
---
55

6+
# Account management with MCP
7+
68
import GramCallout from "../.partials/gram-callout.mdx";
79

810
<GramCallout />
911

1012
If your team lives in Slack, HubSpot, and an internal ops portal, every task turns into tool-switching: copy a link from Slack, search for the right record in HubSpot, then re-enter the same details into an internal system. It's slow, error-prone, and breaks the flow of work.
11-
The problem is that often you need both external systems (Slack and HubSpot) and internal tools (often bespoke and hard to change) to move deals forward. Connecting them reliably is a challenge, and getting dev time to polish internal workflows can be difficult.
13+
The problem is that often you need both external systems (Slack and HubSpot) and internal tools (likely bespoke and hard to change) to move deals forward. Connecting them reliably is a challenge, and getting dev time to polish internal workflows can be difficult.
1214

13-
There's a simpler solution however: use MCP servers to connect all your tools so you can handle everything through Claude conversations. With MCP in Claude Desktop, you connect Slack, HubSpot, and your internal tool in one place so Claude can orchestrate the steps for you. In this guide, you'll see how to turn a Slack signal (like a ‼️ reaction) into a HubSpot update, and optionally kick off a simple internal request, all without leaving Claude Desktop.
15+
There's a simpler solution: using MCP servers to connect all your tools so you can handle everything through Claude conversations. With MCP in Claude Desktop, you can connect Slack, HubSpot, and your internal tool in one place, so Claude can orchestrate the steps for you. In this guide, you'll learn how to turn a Slack signal (like a ‼️ reaction) into a HubSpot update, and optionally kick off a simple internal request, all without leaving Claude Desktop.
1416

1517
![A demo of the account management workflow in Claude Desktop](assets/mcp-account-management-demo.mp4)
1618

17-
1819
## What are we building?
1920

20-
We're building an account management workflow that connects Slack, HubSpot, and a simple internal SalesOps API through MCP servers. Reps can ask Claude to find signal in Slack, update HubSpot, and create a small internal request, all in one conversation.
21+
We're building an account management workflow that connects Slack, HubSpot, and a simple internal SalesOps API through MCP servers. Reps can ask Claude to find messages with a specific signal in Slack, update HubSpot, and create a small internal request, all in one conversation.
2122

2223
You'll set up three MCP servers:
2324

24-
- A Slack MCP server to find conversations
25-
- A HubSpot MCP server to update contacts and tasks
26-
- An internal API MCP server to create small, auditable SalesOps requests
25+
- A Slack MCP server for finding conversations
26+
- A HubSpot MCP server for updating contacts and tasks
27+
- An internal API MCP server for creating small, auditable SalesOps requests
2728

2829
![Before after diagram](assets/before-after-diagram.png)
2930

3031
## Prerequisites
3132

32-
- Slack and HubSpot MCP servers installed. Follow these guides to connect each service individually.
33-
- [MCP Use Case: Connect Slack](/mcp/using-mcp/mcp-server-providers/slack)
34-
- [MCP Use Case: Connect HubSpot](/mcp/using-mcp/mcp-server-providers/hubspot)
35-
- An MCP client like [Claude Desktop](https://claude.ai/download)
33+
Before you begin, you need to install the Slack and HubSpot MCP servers in an MCP client like [Claude Desktop](https://claude.ai/download).
3634

37-
## Setting up HubSpot and Slack
35+
### Set up the HubSpot and Slack integrations
3836

3937
Follow these guides to add both servers to Claude Desktop:
4038

4139
- [MCP Use Case: Connect Slack](/mcp/using-mcp/mcp-server-providers/slack)
4240
- [MCP Use Case: Connect HubSpot](/mcp/using-mcp/mcp-server-providers/hubspot)
4341

44-
### Testing the flow
42+
### Test the flow
4543

46-
Let's imagine that your team shares lead updates in a Slack channel called `#leads` and marks urgent ones with the ‼️ emoji. You want Claude to add a "Schedule call ASAP" note to those contacts in HubSpot.
44+
Let's imagine that your team shares lead updates in a Slack channel called `#leads` and marks urgent messages with the ‼️ emoji. You want Claude to add a "Schedule call ASAP" note to the corresponding lead contacts in HubSpot.
4745

4846
![A screenshot of the Slack channel with the ‼️ emoji reaction](assets/leads-bang-bang.png)
4947

@@ -55,118 +53,126 @@ In the #leads Slack channel, find the messages marked with :bangbang: emoji reac
5553

5654
Claude will:
5755

58-
1. Search the #leads channel for messages with ‼️ reactions.
59-
2. Parse contact information from those messages.
60-
3. Look up matching contacts in HubSpot.
61-
4. Add a priority note to each contact record.
56+
- Search the `#leads` channel for messages with ‼️ reactions.
57+
- Parse contact information from those messages.
58+
- Look up matching contacts in HubSpot.
59+
- Add a priority note to each contact record.
6260

6361
![A screenshot of the Claude Desktop conversation with the HubSpot tool](assets/claude-slack+hubspot.png)
6462

65-
The contacts in HubSpot will now have a "schedule call ASAP" note added to their records.
63+
Once Claude has performed those actions, the contacts in HubSpot will have a "Schedule call ASAP" note added to their records.
6664

6765
![A screenshot of the HubSpot contact record with the "URGENT: Call ASAP" note](assets/hubspot-note-urgent.png)
6866

69-
Now at this point, you could stop here and manually make account changes for each customer. However, we can take this a step further and use [Gram](https://getgram.ai) to create a SalesOps MCP server that can be used to let Claude interact with our internal account management system.
67+
At this point, you could stop and manually make account changes for each customer, or you could take the integration a step further and use [Gram](https://getgram.ai) to create a SalesOps MCP server that lets Claude interact with your internal account management system.
7068

7169
## Creating the SalesOps MCP server
7270

73-
Once Slack and HubSpot are working smoothly, you can bring your internal tool into the same flow. For this guide, our internal tool is a lightweight service called "SalesOps Bridge" that accepts simple requests like upgrade changes, trial extensions, or temporary feature grants. The service persists requests in SQLite, exposes a read-only `GET /requests` endpoint for dashboards, and ships with a small UI at `http://localhost:3080/` so you can inspect new requests as Claude creates them.
71+
Once the Slack and HubSpot integration is working smoothly, you can add your internal tool to the same account management flow.
72+
73+
For this guide, we'll use a lightweight service called SalesOps Bridge as our internal tool. SalesOps Bridge accepts simple requests (like upgrade changes, trial extensions, and temporary feature grants), persists the requests in SQLite, and exposes a read-only `GET /requests` endpoint for dashboards. It ships with a small UI at `http://localhost:3080/`, so we can inspect new requests as Claude creates them.
7474

7575
### Install and run SalesOps Bridge (locally)
7676

77-
You can run the example service included in our example repository. You can find it at `https://github.com/ritza-co/salesops-taskmaster-tool`.
77+
- Clone the [SalesOps Bridge repo](https://github.com/ritza-co/salesops-taskmaster-tool).
7878

79-
After cloning the repo, navigate to the `salesops-taskmaster-tool` directory and run the following commands:
79+
- Navigate to the `salesops-taskmaster-tool` directory and run the following commands:
8080

81-
```bash
82-
cp .env.template .env
83-
# Edit .env to set AUTH_TOKEN, this can be any string if you're using it for demo purposes
84-
npm install
85-
npm run start
86-
```
81+
```bash
82+
cp .env.template .env
83+
# Edit .env to set AUTH_TOKEN, this can be any string if you're using it for demo purposes
84+
npm install
85+
npm run start
86+
```
8787

88-
You can now check the health of the service by running a curl request to the health endpoint.
88+
- Check the health of the service by running a curl request to the health endpoint:
8989

90-
```bash
91-
curl http://localhost:3080/health
92-
```
90+
```bash
91+
curl http://localhost:3080/health
92+
```
9393

94-
The API exposes an OpenAPI document at `openapi.yaml` within the repository which we'll use to generate an MCP server on Gram.
94+
The API exposes an OpenAPI document at `openapi.yaml` within the repository. We'll use this OpenAPI document to generate an MCP server on Gram.
9595

9696
### Expose your local service with ngrok
9797

98-
If you want to test in the Gram playground, you'll need to expose your local service using ngrok.
98+
If you want to test in the Gram playground, you need to expose your local service using ngrok.
9999

100-
1. Install ngrok:
100+
- Install ngrok:
101101

102-
```bash
103-
brew install ngrok
104-
```
102+
```bash
103+
brew install ngrok
104+
```
105105

106-
Or download from [ngrok.com](https://ngrok.com/download).
106+
Alternatively, download it from [ngrok.com](https://ngrok.com/download).
107107

108-
2. In a new terminal window, start ngrok to expose port 3080:
108+
- In a new terminal window, start ngrok to expose port 3080:
109109

110-
```bash
111-
ngrok http 3080
112-
```
110+
```bash
111+
ngrok http 3080
112+
```
113113

114-
3. Copy the HTTPS forwarding URL from the ngrok output (it will look like `https://abcd1234.ngrok.app`).
114+
- Copy the HTTPS forwarding URL from the ngrok output (it will look like `https://abcd1234.ngrok.app`).
115115

116-
4. Update the server URL in `openapi.yaml`. Open the file and replace the placeholder on line 9 with your ngrok URL:
116+
- Update the server URL in `openapi.yaml`. Open the file and replace the placeholder on line 9 with your ngrok URL:
117117

118-
```yaml
119-
servers:
120-
- url: https://YOUR-NGROK-URL.ngrok.app
121-
```
118+
```yaml
119+
servers:
120+
- url: https://YOUR-NGROK-URL.ngrok.app
121+
```
122122
123123
Keep the ngrok terminal running while you test with Gram.
124124
125125
### Create the MCP server on Gram
126126
127-
Let's walk through the process of creating an MCP server on Gram. You can watch the video below for a quick walkthrough. Alternatively, for a more detailed walkthrough, see the [Gram docs](https://docs.getgram.ai/gram-quickstart).
127+
The following video walks you through the process of creating an MCP server on Gram. Follow each of the steps, referring to the [Gram quickstart guide](https://docs.getgram.ai/gram-quickstart) as necessary, to create a SalesOps MCP server:
128128
129-
![A video walkthrough of creating an MCP server on Gram using the SalesOps API](assets/gram-salesops-internal.mp4)
129+
![A video walkthrough of creating an MCP server on Gram using the SalesOps OpenAPI document](assets/gram-salesops-internal.mp4)
130130
131-
132-
1. Import your OpenAPI spec into Gram and generate a toolset.
133-
2. Fill in your environment variables in the toolset.
134-
3. You can test the toolset within the Gram Playground.
131+
- Import the SalesOps OpenAPI document into Gram and generate a toolset.
132+
- Fill in your environment variables in the toolset.
133+
- Test the toolset in the Gram Playground.
135134
136135
### Install the MCP server in Claude Desktop
137136
138-
First, create a Gram API key. In Gram, navigate to **Settings** in the sidebar, click **NEW API KEY**, select the consumer option, then click **CREATE**. Copy the API key.
137+
First, create a Gram API key:
139138
140-
Next, get your MCP configuration. Navigate to **Toolsets** in the sidebar, select your SalesOps toolset, then go to the **MCP** tab. Click the **ENABLE** button, scroll down to the managed authentication section, and copy that configuration.
139+
- In Gram, navigate to **Settings** in the sidebar, click **New API Key**, select the consumer option, and click **Create**. Copy the API key.
141140
142-
![Screenshot of Gram interface showing MCP installation configurations for pass-through and managed authentication options](assets/copy-managed-auth.png)
141+
Next, you need to get your MCP configuration and add it to Claude Desktop.
143142
144-
In Claude Desktop, go to **Settings → Developer → Edit Config** and add an entry. Replace placeholders with your Gram server slug and API key. (`GET /requests` does not require auth, so Claude can read the dashboard without prompting for approval, while write actions will still require the bearer token you provide.)
143+
- Navigate to **Toolsets** in the Gram sidebar, select your SalesOps toolset, and open the **MCP** tab.
144+
- Click the **Enable** button, scroll down to the **Managed Authentication** section, and copy the configuration code.
145145
146-
```json
147-
{
148-
"mcpServers": {
149-
"SalesOpsBridge": {
150-
"command": "npx",
151-
"args": [
152-
"mcp-remote",
153-
"https://app.getgram.ai/mcp/<your-mcp-server-slug>",
154-
"--header",
155-
"Gram-Environment:default",
156-
"--header",
157-
"Authorization:${GRAM_KEY}"
158-
],
159-
"env": {
160-
"GRAM_KEY": "Bearer <your-gram-api-key>"
146+
![Screenshot of Gram interface showing MCP installation configurations for pass-through and managed authentication options](assets/copy-managed-auth.png)
147+
148+
- In Claude Desktop, go to **Settings → Developer → Edit Config** and add the following entry, replacing the placeholder values with your Gram server slug and API key:
149+
150+
```json
151+
{
152+
"mcpServers": {
153+
"SalesOpsBridge": {
154+
"command": "npx",
155+
"args": [
156+
"mcp-remote",
157+
"https://app.getgram.ai/mcp/<your-mcp-server-slug>",
158+
"--header",
159+
"Gram-Environment:default",
160+
"--header",
161+
"Authorization:${GRAM_KEY}"
162+
],
163+
"env": {
164+
"GRAM_KEY": "Bearer <your-gram-api-key>"
165+
}
161166
}
162167
}
163168
}
164-
}
165-
```
169+
```
170+
171+
**Note:** `GET /requests` does not require auth, so Claude can read the dashboard without prompting for approval but still requires your bearer token to perform write actions.
166172

167173
## The complete account management workflow
168174

169-
Your `claude_desktop_config.json` might look like this:
175+
Your `claude_desktop_config.json` should look something like this:
170176

171177
```json
172178
{
@@ -206,28 +212,28 @@ Your `claude_desktop_config.json` might look like this:
206212
}
207213
```
208214

209-
To test the complete workflow, open Claude Desktop and send an example prompt like:
215+
- To test the complete workflow, open Claude Desktop and send an example prompt similar to the following:
210216

211-
```txt
212-
Find the :bangbang: thread in #leads about Acme. Summarize who asked, what's needed, and timing with the Slack link. Then use HubSpot to add a note and a task due tomorrow at 10:00. Finally, create an internal upgrade request via SalesOps Bridge for +10 seats effective the first of next month, including the Slack thread URL and HubSpot ID.
213-
```
217+
```txt
218+
Find the :bangbang: thread in #leads about Acme. Summarize who asked, what's needed, and timing with the Slack link. Then use HubSpot to add a note and a task due tomorrow at 10:00. Finally, create an internal upgrade request via SalesOps Bridge for +10 seats effective the first of next month, including the Slack thread URL and HubSpot ID.
219+
```
214220

215-
![A demo of the complete account management workflow in Claude Desktop](assets/mcp-account-management-demo.mp4)
221+
![A demo of the complete account management workflow in Claude Desktop](assets/mcp-account-management-demo.mp4)
216222

217-
After Claude confirms the request ID, you can verify it by visiting the SalesOps Bridge dashboard at `http://localhost:3080/`.
223+
- When Claude confirms the request ID, you can verify it by visiting the SalesOps Bridge dashboard at `http://localhost:3080/`.
218224

219-
![A screenshot of the SalesOps Bridge dashboard](assets/taskmaster-salesops.png)
225+
![A screenshot of the SalesOps Bridge dashboard](assets/taskmaster-salesops.png)
220226

221227
## Final thoughts
222228

223-
You've built an account management workflow that connects Slack, HubSpot, and a simple internal API through MCP servers. Gram hosted the internal API integration without custom server code or infrastructure.
229+
You've built an account management workflow that connects Slack, HubSpot, and a simple internal API through MCP servers.
224230

225-
The internal API can represent any system with an OpenAPI document. You can adapt this for:
231+
Because Gram allows you to host API integrations (like the SalesOps Bridge service) without custom server code or infrastructure, you can easily substitute the internal service for any system with an OpenAPI document. Consider how you could adapt this guide for different use cases, such as:
226232

227233
- **Discount approvals:** Capture context from Slack and add CRM notes, then create an approval request internally.
228234
- **Trial extensions:** Log the request in HubSpot and create a short extension via the internal tool.
229235
- **Feature flags:** Record the change in HubSpot and file a time-boxed feature grant internally.
230236

231-
For sensitive actions, prefer propose-then-confirm flows so you can review tool calls before execution.
237+
For sensitive actions, we recommend using propose-then-confirm flows so that you can review tool calls before execution.
232238

233-
For more information on MCP servers and how to host them blazingly fast, check out our [guide on deploying remote MCP servers](/mcp/using-mcp/remote-servers).
239+
To learn more about MCP servers and how to host them blazingly fast, visit our guide to [deploying remote MCP servers](/mcp/using-mcp/remote-servers).

0 commit comments

Comments
 (0)