FiscalAI MCP

Live

API KEY

FINANCIAL DATA

Accounting & Finance

Every SEC filing, earnings transcript, and stock price feed your agent needs is surfaced by FiscalAI. FiscalAI MCP gives your financial research agent per-user API access, credentials vaulted, scoped, never in the prompt.

  • Acts as the user: Each analyst authorizes once and their FiscalAI API key is scoped to their requests.
  • Credentials stay vaulted: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: User permissions enforced. 90-day audit trail on every query.
FiscalAI MCP
agent · Acme Q3
Run
Pull the last 4 earnings call transcripts for NVDA and summarize guidance on data center margins.
S
fiscalai_earnings_transcripts_get
112ms
Research agent
4 transcripts retrieved (Q1–Q4 FY2025). Data center margin guidance: Q4 guided 72–74%, up from 68% in Q1. CFO cited custom silicon savings as primary driver.
Sources: earnings transcripts Q1–Q4 FY2025
fiscalaimcp
4
18:29
Message Claude...

Tools your financial research agent reaches for on FiscalAI, scoped per analyst.

CALL ANY TOOL
API key scoped per analyst. Every SEC and market data query attributed to the authorizing user.
fiscalai_sec_filings_search
Search SEC filings
Search and retrieve SEC EDGAR filings (10-K, 10-Q, 8-K) by ticker, CIK, or filing type with full text and structured data.
Parameters
Name
Type
Required
Description
ticker
string
Optional
Stock ticker symbol (e.g. NVDA)
filing_type
string
Optional
Filing type: 10-K, 10-Q, 8-K, DEF14A
limit
integer
Optional
Max filings to return
fiscalai_earnings_transcripts_get
Get earnings transcripts
fiscalai_stock_prices_get
Get stock prices
fiscalai_financials_get
Get financials
fiscalai_insider_transactions_get
Get insider transactions
Build your Agent
Drop the toolkit in, point it at the authorized analyst, and your agent can query SEC filings and market data from the first run.
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: ["fiscalaimcp"], toolNames: ["fiscalai_sec_filings_search", "fiscalai_earnings_transcripts_get", "fiscalai_stock_prices_get"] },
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: ["fiscalaimcp"], toolNames: ["fiscalai_sec_filings_search", "fiscalai_earnings_transcripts_get", "fiscalai_stock_prices_get"] },
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: ["fiscalaimcp"], toolNames: ["fiscalai_sec_filings_search", "fiscalai_earnings_transcripts_get", "fiscalai_stock_prices_get"] },
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/fiscalaimcp",
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 financial research agent to start pulling SEC and market data from FiscalAI.
Search & recall
Copy the prompt
Copied
Get the latest 10-K filing for [ticker].
Copy the prompt
Copied
Pull earnings call transcripts for [company] from the last 4 quarters.
Copy the prompt
Copied
Show insider buying activity for [ticker] in the last 30 days.
Analysis
Copy the prompt
Copied
Compare revenue growth across [company1] and [company2] for the last 3 years.
Copy the prompt
Copied
Summarize guidance language from the last [company] earnings call.
Copy the prompt
Copied
Get XBRL-parsed income statement data for [ticker] Q3.
SEE HOW AUTH WORKS
Analysts authorize FiscalAI once. Their API key stays vaulted, every data query is scoped to their subscription tier, and every access is logged.
1
Authorize
Your user connects
FiscalAI 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
FiscalAI 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
FiscalAI 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
FiscalAI 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 financial data and analytics connectors.
No items found.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
One vault for every financial data connector. FiscalAI today, Bloomberg and Refinitiv tomorrow.
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.
FiscalAI 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 use a shared FiscalAI API key or per-user keys?
Per-user keys. Each analyst provisions their own FiscalAI API key and Scalekit vaults it under their identity. Queries are attributed to that analyst, not a team-wide credential.
Where is the FiscalAI API key stored?
In Scalekit's managed AES-256 vault, namespaced per tenant. Keys are resolved at request time and never appear in prompts, logs, or LLM context.
Can I limit which FiscalAI tools the agent can call?
Yes. Use listScopedTools with a name filter to restrict the agent to specific data types, for example, allow SEC filings but block real-time price feeds for non-licensed users.
What happens when an analyst's FiscalAI key is revoked?
The next tool call fails closed for that user with a clear error. Other analysts in the tenant continue unaffected. Revocation is logged with a timestamp.
Does this work with compliance requirements around MNPI handling?
Yes. Per-user scoping and a full 90-day audit trail support compliance workflows. You can restrict which users access which data types, and every query is logged with user identity for review.
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"": {
""fiscalaimcp"": {
""url"": ""https://mcp.scalekit.com/fiscalaimcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.fiscalaimcp]
url = ""https://mcp.scalekit.com/fiscalaimcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""fiscalaimcp"": {
""url"": ""https://mcp.scalekit.com/fiscalaimcp"",
""type"": ""http""
}
}
}