Era Context MCP

Live

OAUTH 2.1

FINANCE

Accounting & Finance

Every transaction, account, and spending category your finance agent needs to manage lives in Era Context. Era Context MCP gives your agent per-user OAuth access to financial data scoped to the authorizing account.

  • Acts as the user: Transaction edits and tag changes stay tied to the Era Context user who authorized the agent.
  • Credentials stay vaulted: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: User permissions enforced. 90-day audit trail.
Era Context MCP
agent · Acme Q3
Run
Recategorize last month's Amazon transactions as Office Supplies.
S
eracontextmcp_transactions_update
112ms
Finance agent
42 Amazon transactions recategorized to Office Supplies. Total reclassified: $3,847.21 across operating and reserve accounts.
Sources: Era Context, last 30 days
eracontextmcp
42
18:29
Message Claude...

Tools your agent reaches for on Era Context MCP, scoped per user.

CALL ANY TOOL
List accounts, search and bulk-update transactions, manage tags, transfers, and spending categories. Same toolkit, every framework, no auth plumbing.
eracontextmcp_accounts__check_account_balance
Accounts check account balance
Get the current and available balance for a specific account, including credit limit if applicable. Requires an account_group_key from List Financial Accounts.
Parameters
Name
Type
Required
Description
account_group_key
string
Required
The account group projection key. Obtain from accounts__list_financial_accounts (the account_group_key field).
eracontextmcp_accounts__list_financial_accounts
Accounts list financial accounts
eracontextmcp_accounts__manage_account
Accounts manage account
eracontextmcp_accounts__set_account_visibility
Accounts set account visibility
eracontextmcp_billing__cancel_subscription
Billing cancel subscription
eracontextmcp_billing__get_current_plan
Billing get current plan
eracontextmcp_billing__list_payments
Billing list payments
eracontextmcp_billing__list_subscriptions
Billing list subscriptions
eracontextmcp_billing__uncancel_subscription
Billing uncancel subscription
eracontextmcp_connections__connect_bank_account
Connections connect bank account
eracontextmcp_connections__list_connections
Connections list connections
eracontextmcp_connections__set_proactive_sync_mode
Connections set proactive sync mode
eracontextmcp_connections__trigger_connection_resync
Connections trigger connection resync
eracontextmcp_help__get_help
Help get help
eracontextmcp_insights__analyze_spending
Insights analyze spending
eracontextmcp_insights__forecast_spending
Insights forecast spending
eracontextmcp_insights__get_daily_category_spending
Insights get daily category spending
eracontextmcp_knowledge__defer_question
Knowledge defer question
eracontextmcp_knowledge__get_financial_context_and_overview
Knowledge get financial context and overview
eracontextmcp_knowledge__recall_history
Knowledge recall history
eracontextmcp_knowledge__reset_pack_questions
Knowledge reset pack questions
eracontextmcp_nurture__get_my_status
Nurture get my status
eracontextmcp_referral__get_referral_link
Referral get referral link
eracontextmcp_referral__join_referral_program
Referral join referral program
eracontextmcp_transactions__import_csv_transactions
Transactions import csv transactions
eracontextmcp_transactions__list_spending_categories
Transactions list spending categories
eracontextmcp_transactions__manage_categories
Transactions manage categories
eracontextmcp_transactions__manage_transaction_tags
Transactions manage transaction tags
eracontextmcp_transactions__search_transactions
Transactions search transactions
eracontextmcp_transactions__update_transactions
Transactions update transactions

For more tools, view docs.

Build your Agent
Drop the toolkit in, point it at the user, and your agent can query and edit Era Context transactions from the first run.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { DynamicStructuredTool } from "@langchain/core/tools";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
import { z } from "zod";

const sk = new ScalekitClient(envUrl, clientId, clientSecret);

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["eracontextmcp"], toolNames: ["eracontextmcp_accounts_list", "eracontextmcp_transactions_search", "eracontextmcp_transactions_update"] },
pageSize: 100,
});

const lcTools = tools.map((t) => new DynamicStructuredTool({
name: t.tool.definition.name,
description: t.tool.definition.description,
schema: z.object({}).passthrough(),
func: async (args) => {
const { data } = await sk.tools.executeTool({
toolName: t.tool.definition.name,
identifier: "user_123",
params: args,
});
return JSON.stringify(data);
},
}));

const agent = createReactAgent({ llm, tools: lcTools });
import { ScalekitClient } from "@scalekit-sdk/node";
import OpenAI from "openai";

const sk = new ScalekitClient(envUrl, clientId, clientSecret);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["eracontextmcp"], toolNames: ["eracontextmcp_accounts_list", "eracontextmcp_transactions_search", "eracontextmcp_transactions_update"] },
pageSize: 100,
});

const llmTools = tools.map((t) => ({
type: "function",
function: {
name: t.tool.definition.name,
description: t.tool.definition.description,
parameters: t.tool.definition.input_schema,
},
}));

const resp = await openai.responses.create({
model: "gpt-4o", input: prompt, tools: llmTools,
});
import { ScalekitClient } from "@scalekit-sdk/node";
import Anthropic from "@anthropic-ai/sdk";

const sk = new ScalekitClient(envUrl, clientId, clientSecret);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["eracontextmcp"], toolNames: ["eracontextmcp_accounts_list", "eracontextmcp_transactions_search", "eracontextmcp_transactions_update"] },
pageSize: 100,
});

const llmTools = tools.map((t) => ({
name: t.tool.definition.name,
description: t.tool.definition.description,
input_schema: t.tool.definition.input_schema,
}));

const msg = await anthropic.messages.create({
model: "claude-sonnet-4-6", max_tokens: 1024,
tools: llmTools,
messages: [{ role: "user", content: prompt }],
});
import { Agent } from "@google/adk/agents";
import {
MCPToolset, StreamableHTTPConnectionParams,
} from "@google/adk/tools/mcp";

const toolset = new MCPToolset({
connectionParams: new StreamableHTTPConnectionParams({
url: "https://mcp.scalekit.com/eracontextmcp",
headers: { Authorization: `Bearer ${userScopedToken}` },
}),
});

const agent = new Agent({
name: "agent", model: "gemini-2.0-flash",
tools: await toolset.getTools(),
});
Try these prompts
Paste any prompt into your agent to start managing Era Context finances from your workflows.
Search & recall
Copy the prompt
Copied
Find all uncategorized transactions from last month.
Copy the prompt
Copied
Show transactions over $[amount] tagged as [tag].
Copy the prompt
Copied
List all spending categories and their total spend YTD.
Bulk actions
Copy the prompt
Copied
Recategorize all [merchant] transactions as [category].
Copy the prompt
Copied
Mark all transactions from [date] as reviewed.
Copy the prompt
Copied
Merge duplicate [category A] and [category B] categories.
SEE HOW AUTH WORKS
Users authorize Era Context once. Their credentials stay vaulted, every call is checked, and every action is logged.
1
Authorize
Your user connects
Era Context MCP
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
Era Context MCP
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
Era Context MCP
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
Era Context MCP
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
Same per-user auth pattern across other finance and accounting connectors.
GTM and RevOps Teams
Competitive intelligence briefing agent
Scans Gong calls for competitor mentions, matches each one to its Notion battlecard, and DMs every affected rep a single Slack digest per cycle. Every call runs as the PMM who owns the briefing, never a shared bot.
GTM and RevOps Teams
Outbound prospecting agent
Searches Apollo for prospects matching your ICP, scores and ranks them, drafts personalized outreach in Gmail, and logs every send to Google Sheets. Mail goes out as the rep, not from a shared inbox.
GTM and RevOps Teams
Deal intelligence agent
Pulls recent Gong calls, scores deal risk with an LLM, cross-references the record in Attio, and DMs each owner their at-risk deals in Slack. Every read is scoped to that rep's own access.
Support and Ops Teams
Support triage agent
Fetches new Zendesk tickets, classifies them by type and urgency, searches the Notion knowledge base for an answer, and routes what it cannot resolve to Slack. Every call runs on the support agent's own delegated OAuth.
Test other agents
Same per-user auth pattern across other finance and accounting connectors.
SALES
Deal intelligence agent
Score Gong call risk with an LLM, cross-reference the Attio record, and DM each owner their at-risk deals in Slack.
GTM
Competitive intelligence briefing agent
Scan Gong calls for competitor mentions, match each one to its Notion battlecard, and DM every affected rep a single Slack digest.
SALES
Outbound prospecting agent
Search Apollo for ICP matches, rank them, draft personalised Gmail outreach, and log every send to Google Sheets.
SUPPORT
Support triage agent
Classify new Zendesk tickets, search the Notion knowledge base for an answer, and route what it cannot resolve to Slack.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared token looks fine in a demo. In production every call looks like a service account. Scalekit resolves the real user credential so attribution, audit, and scope stay accurate.
// shared token
 audit → bot_service_account
 user_filter → broken

 // scalekit
 audit → user_abc
 scope → enforced ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Era Context MCP today. Others 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 Era Context as the user or a shared account?
As the user. Each account authorizes once and Scalekit resolves their credential at request time. All edits are attributed to that user.
Where is the Era Context OAuth token stored?
In Scalekit's AES-256 vault, namespaced per tenant. Refresh is automatic. Tokens never appear in prompts or LLM context.
Can I prevent the agent from bulk-updating transactions?
Yes. Use listScopedTools to allow read-only operations — search and list — without granting the transactions_update tool.
What happens when a user revokes Era Context access?
The connection is invalidated on the next tool call. Subsequent requests fail closed. Other users remain unaffected.
Is this safe for production finance workflows?
Yes. Per-user credential isolation, scope enforcement before every call, and a 90-day audit trail are built in. Every edit executes as the authorizing user.
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"": {
""eracontextmcp"": {
""url"": ""https://mcp.scalekit.com/eracontextmcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.eracontextmcp]
url = ""https://mcp.scalekit.com/eracontextmcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""eracontextmcp"": {
""url"": ""https://mcp.scalekit.com/eracontextmcp"",
""type"": ""http""
}
}
}