---
name: iblai-connect-factset
description: "Read FactSet data through the FactSet APIs (Developer Portal) and expose it to an ibl.ai agent as an MCP tool. Use when the user asks an agent to work with FactSet data, or to set up a FactSet MCP connection on ibl.ai."
metadata:
  kind: guide
---

# FactSet connector for AI agents

> A starting point maintained on ibl.ai at https://ibl.ai/developer/connectors/factset — not part of the iblai/vibe repository. Checked against FactSet's documentation on October 20, 2026; test it against your own FactSet setup before you rely on it.

FactSet supplies company fundamentals, estimates, prices, ownership, people, M&A, events, transcripts and fund data to investment and banking firms through its workstation, feeds and APIs.

## Auth & conventions

- **API:** FactSet APIs (Developer Portal) (REST). Content APIs for fundamentals, estimates, global prices, ownership, people, entity reference, events, M&A, private markets and funds, plus the Formula API (FQL and screening). Try-it-out console in the portal.
- **Access:** Issued by your administrator. Needs a FactSet subscription and username-serial. Log in to the Developer Portal with a corporate email and create credentials under Profile > API Authentication; entitlements follow the licensed account.
- **Auth:** OAuth 2.0 client credentials; OAuth 2.0 authorization code; API key (HTTP Basic, username-serial:key). OAuth 2.0 is FactSet's preferred method; confidential clients use a client secret or private key JWT. API keys use Basic auth with username-serial and key and are bound to whitelisted IP ranges.
- Keep FactSet credentials in environment variables or the ibl.ai credential store. Never print a token in chat and never commit one to a file.
- Destructive or outward-facing calls are marked **Confirm with the user first** — do.

## Reads

- **Fundamentals** — Current and historical company financials with audit trail (MCP tool FactSet_Fundamentals).
- **Consensus estimates** — Estimates, surprises, ratings and guidance (FactSet_EstimatesConsensus).
- **Prices** — Stock prices, returns, volume and corporate actions back to 2006 (FactSet_GlobalPrices).
- **Ownership** — Fund holdings, institutional ownership and insider trades (FactSet_Ownership).
- **People and entities** — Executive profiles, boards and entity reference for 16M+ entities.
- **Events and transcripts** — Calendar events plus CallStreet transcripts, StreetAccount news and EDGAR filings.

## Writes

- None. This skill only reads FactSet data.

## Expose it to an ibl.ai agent (MCP)

FactSet publishes an official MCP server, FactSet AI-Ready Data MCP (https://developer.factset.com/mcp/factset-ai-ready-data-mcp). Register it below as-is, or host your own server that wraps the calls in this skill.

First install the ibl.ai platform skills and connect your organization (writes `IBLAI_ORG`, `IBLAI_USERNAME` and `IBLAI_API_KEY` to `.env`):

```bash
npx skills add iblai/vibe --all
# then, in your coding agent:
/iblai-api-login
```

Every call below sends `Authorization: Api-Token $IBLAI_API_KEY`.

1. **Register the server** — `POST https://api.iblai.app/dm/api/ai-mentor/orgs/$IBLAI_ORG/users/$IBLAI_USERNAME/mcp-servers/` with `name`, `url`, `transport` (`sse` | `websocket` | `streamable_http`) and `auth_type` (`none` | `token` | `oauth2`). Capture the returned `id`.
   - FactSet supports per-user OAuth: `auth_type=oauth2` with `auth_scope=user` and a linked `oauth_service` makes each person connect their own account in the chat. It needs an `auth_{provider}` credential in the organization's credential store first.
2. **Create the connection** — `POST https://api.iblai.app/dm/api/ai-mentor/orgs/$IBLAI_ORG/users/$IBLAI_USERNAME/mcp-server-connections/` with `server`, `scope` (`platform` | `mentor` | `user`), `auth_type`, and either `credentials` + `authorization_scheme` or a `connected_service` id for OAuth. Credentials are masked on read; never send a masked value back.
3. **Enable it on the agent** — `GET https://api.iblai.app/dm/api/ai-mentor/orgs/$IBLAI_ORG/users/$IBLAI_USERNAME/mentors/{agent_id}/settings/`, add `mcp-tool` to `tool_slugs` and the server id to `mcp_servers`, then `PATCH` the full lists back. They are replaced, not merged.

Full reference: https://ibl.ai/developer/platform/mcp/mcp-connections and the `/iblai-api-agent-mcp` skill.

## Example prompts

- "Compare consensus EPS for the next two fiscal years across JPM, BAC and WFC"
- "Who are the top 10 institutional holders of this company and how did they change last quarter?"
- "List public M&A deals in regional banking announced this year with deal values"
- "Summarize what management said about deposit costs on the last earnings call"

## Guardrails

- Licensed market and company data: use, storage and redistribution are bound by the FactSet subscription and content entitlements. Not customer NPI unless joined with client records.
- Request the narrowest FactSet scopes or role the task needs, and prefer a read-only credential for agents that only answer questions.
- Return the fields the user asked for, not whole records; do not paste personal data into chat that the user did not request.
- Before any write, show the user exactly what will change and wait for a yes.
- Page through large result sets and back off on rate-limit responses instead of retrying in a loop.

## References

- FactSet Developer Portal: https://developer.factset.com/
- FactSet API authentication: https://developer.factset.com/learn/authentication
- FactSet AI-Ready Data MCP: https://developer.factset.com/mcp/factset-ai-ready-data-mcp
- FactSet AI-Ready Data MCP: https://developer.factset.com/mcp/factset-ai-ready-data-mcp
- This connector on ibl.ai: https://ibl.ai/developer/connectors/factset
- ibl.ai MCP server connections: https://ibl.ai/developer/platform/mcp/mcp-connections
