JobNimbus MCP server for AI agents

Live

BEARER TOKEN

JOB MANAGEMENT

CRM & Sales

JobNimbus gives your agent job management in your JobNimbus account: track contacts and jobs through their workflows, schedule tasks and appointments, log notes, and create and update invoices and products.

  • Per-user credentials: each call uses the actual user's access token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
JobNimbus
agent · Acme Q3
Run
Which jobs are in the Estimating status?
S
jobnimbus_list_jobs
99ms
Job management agent
12 jobs are in Estimating, and 5 of them are assigned to Marcus as sales rep.
Sources: JobNimbus, 12 jobs
jobnimbus
12 jobs
18:29
Message Claude...

Tools your job management agent reaches for on JobNimbus, scoped per user.

CALL ANY TOOL
34 tools for job management in JobNimbus: list, create, and update contacts and jobs, schedule tasks and appointments, log notes, create invoices, and read estimates, work orders, material orders, payments, and files.
jobnimbus_create_activity
Create activity
Add a note activity to a JobNimbus contact or job. Returns the created activity record including its jnid. Use to log a note against a contact or job. Use list_activities to read existing notes.
Parameters
Name
Type
Required
Description
note
string
Required
Text of the note.
primary_id
string
Required
The jnid of the contact or job the note is attached to. Sent as primary.id.
record_type_name
string
Required
Activity type name, usually Note.
date_created
integer
Optional
Optional creation time as a Unix timestamp in seconds. Defaults to the current time.
jobnimbus_create_contact
Create contact
jobnimbus_create_invoice
Create invoice
jobnimbus_create_job
Create job
jobnimbus_create_product
Create product
jobnimbus_get_account_settings
Get account settings
jobnimbus_get_activity
Get activity
jobnimbus_get_contact
Get contact
jobnimbus_get_estimate
Get estimate
jobnimbus_get_invoice
Get invoice
jobnimbus_get_job
Get job
jobnimbus_get_material_order
Get material order
jobnimbus_get_product
Get product
jobnimbus_get_task
Get task
jobnimbus_list_activities
List activities
jobnimbus_list_contacts
List contacts
jobnimbus_list_estimates
List estimates
jobnimbus_list_files
List files
jobnimbus_list_invoices
List invoices
jobnimbus_list_jobs
List jobs
jobnimbus_list_payments
List payments
jobnimbus_list_products
List products
jobnimbus_list_tasks
List tasks
jobnimbus_list_uoms
List uoms
jobnimbus_list_users
List users
jobnimbus_update_contact
Update contact
jobnimbus_update_invoice
Update invoice
jobnimbus_update_job
Update job
jobnimbus_update_product
Update product
jobnimbus_update_task
Update task

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// JobNimbus tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["jobnimbus"], toolNames: [
    "jobnimbus_list_jobs",
    "jobnimbus_create_task",
    "jobnimbus_create_activity"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Schedule an inspection for the Patel job and log a note" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["jobnimbus"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Schedule an inspection for the Patel job and log a note" }],
  tools,
});

// Execute the tool call with the user's vaulted JobNimbus access token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["jobnimbus"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Schedule an inspection for the Patel job and log a note" }],
  tools,
});

// Tool call runs with the user's vaulted JobNimbus access token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["jobnimbus"] }, pageSize: 100,
});

const agent = new Agent({
  name: "job_management_agent",
  model: "gemini-2.5-pro",
  instruction: "JobNimbus tools scoped to this user",
  tools,
});

await agent.run("Schedule an inspection for the Patel job and log a note");
Try these prompts
Copy any prompt into your agent. Each maps directly to a JobNimbus tool. Click to copy, paste into your agent, done.
Contacts and jobs
Copy the prompt
Copied
Create a contact for Sam Patel at 220 Birch Road.
Copy the prompt
Copied
Which jobs are in the Estimating status?
Copy the prompt
Copied
Create a roof replacement job for the Patel contact.
Tasks and notes
Copy the prompt
Copied
Schedule an inspection appointment for the Patel job on Tuesday at 10am.
Copy the prompt
Copied
Add a note to the Patel job that the homeowner approved the estimate.
Copy the prompt
Copied
List my open tasks for this week.
Billing and orders
Copy the prompt
Copied
Create an invoice on the Patel job.
Copy the prompt
Copied
List payments recorded this month.
Copy the prompt
Copied
Show the material orders for the Patel job.
SEE HOW AUTH WORKS
Each user connects their own JobNimbus access token once, and Scalekit sends it with every call. Tokens stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
JobNimbus
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
JobNimbus
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
JobNimbus
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
JobNimbus
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other CRM and sales connectors.
GTM and RevOps Teams
CRM AI agent
Reads the Granola transcript after every call, extracts next steps and updates the HubSpot record, drafts the follow-up in Gmail, and confirms in Slack, all on the rep's own delegated OAuth.
Engineering Teams
Slack triage
Polls Slack for new messages, classifies bugs and support requests with a LangGraph router, files GitHub issues or Zendesk tickets, and confirms in the thread.
Test other agents
See the same per-user auth pattern across other CRM and sales connectors.
GTM
CRM AI agent
Turn each Granola call transcript into a HubSpot record update, a drafted Gmail follow-up, and a Slack recap.
ENGINEERING
Slack triage agent
Classify new Slack messages as bugs or support requests, file the GitHub issue or Zendesk ticket, and reply in the thread.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared JobNimbus access token looks fine in a demo. In production every job update and invoice looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
JobNimbus today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access JobNimbus as the user or through a shared access token?
As the user. Each user connects their own JobNimbus access token once, and Scalekit sends it with every call. Audit logs attribute every job update, note, and invoice to that user, not a shared service account.
Where is the JobNimbus access token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. To rotate it, the user reconnects with a new access token. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in JobNimbus?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the list and get tools without jobnimbus_update_contact and jobnimbus_update_job, which can also archive records. JobNimbus has no delete tools. Scalekit also enforces scope checks before every API call.
What happens when a user revokes JobNimbus access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Can the agent schedule appointments in JobNimbus?
Yes. jobnimbus_create_task creates a task or calendar appointment, and jobnimbus_update_task reschedules, reassigns, completes, or archives one. jobnimbus_list_tasks lists tasks and appointments with filters.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""jobnimbus"": {
""url"": ""https://mcp.scalekit.com/jobnimbus"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.jobnimbus]
url = ""https://mcp.scalekit.com/jobnimbus""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""jobnimbus"": {
""url"": ""https://mcp.scalekit.com/jobnimbus"",
""type"": ""http""
}
}
}