Tool Reference
The Inderes MCP server exposes 16 tools. All are read-only.
Contents
- Get Content —
get-content - Get Document —
get-document - Get Financial Fundamentals —
get-fundamentals - Get Forum Posts —
get-forum-posts - Get Inderes Estimates —
get-inderes-estimates - Get Model Portfolio Content —
get-model-portfolio-content - Get Model Portfolio Price History —
get-model-portfolio-price - Get Transcript —
get-transcript - List Calendar Events —
list-calendar-events - List Company Documents —
list-company-documents - List Content —
list-content - List Insider Transactions —
list-insider-transactions - List Transcripts —
list-transcripts - Read Document Sections —
read-document-sections - Search Companies by Name —
search-companies - Search Forum Topics —
search-forum-topics
Get Content
Tool name: get-content
Annotations: readOnlyHint: true, openWorldHint: true
Fetch a single Inderes item by content ID (from list-content) or URL — returns markdown for articles/comments, or (for ingested PDF reports) a documentId + sections TOC to pass to read-document-sections.
INPUTS (provide one):
- contentId: Content ID from list-content (e.g. "COMPANY_REPORT:directus-9950")
- url: URL from inderes.fi/se/dk (content page or direct PDF /files/... URL)
OUTPUT:
- For articles/comments: Full body in
contentas markdown;documentIdandsectionsare null. - For ingested PDF reports:
contentis a pointer message; read the report via read-document-sections using the returneddocumentId+sections. Company reports whose PDF has not been ingested fall back to markdown withdocumentIdnull.
EXAMPLES:
Get article by ID: { contentId: "ANALYST_COMMENT:directus-1234" }
Get content by URL: { url: "https://www.inderes.fi/fi/tutkimukset/raute-tutkimus-abc123" }
Get PDF report directly: { url: "https://www.inderes.fi/files/c7cab272-d952-4e58-a47b-d13aa3feb15b" }
Get content in specific language: { contentId: "COMPANY_REPORT:directus-9950", lang: "en" }
Input
| Field | Type | Required | Description |
|---|---|---|---|
contentId |
string | no | Content ID from list-content (e.g., 'COMPANY_REPORT:directus-9950') |
url |
string (uri) | no | URL from inderes.fi/se/dk - either a content page URL or direct PDF URL (/files/...) |
lang |
"fi" | "en" | "sv" | "da" |
no | Preferred language for content. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"contentId": {
"description": "Content ID from list-content (e.g., 'COMPANY_REPORT:directus-9950')",
"type": "string"
},
"url": {
"description": "URL from inderes.fi/se/dk - either a content page URL or direct PDF URL (/files/...)",
"type": "string",
"format": "uri"
},
"lang": {
"description": "Preferred language for content.",
"type": "string",
"enum": [
"fi",
"en",
"sv",
"da"
]
}
},
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
title |
string | yes | |
lang |
string | yes | |
pageUrl |
string | null | yes | |
companyIds |
string[] | yes | |
content |
string | yes | |
documentId |
string | null | yes | Document ID for PDF reports - use with read-document-sections |
sections |
object[] | null | yes | Table of contents for PDF reports |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"lang": {
"type": "string"
},
"pageUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"companyIds": {
"type": "array",
"items": {
"type": "string"
}
},
"content": {
"type": "string"
},
"documentId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Document ID for PDF reports - use with read-document-sections"
},
"sections": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "number"
},
"title": {
"type": "string"
},
"level": {
"type": "number"
}
},
"required": [
"number",
"title",
"level"
],
"additionalProperties": false
}
},
{
"type": "null"
}
],
"description": "Table of contents for PDF reports"
}
},
"required": [
"title",
"lang",
"pageUrl",
"companyIds",
"content",
"documentId",
"sections"
],
"additionalProperties": false
}
Get Document
Tool name: get-document
Annotations: readOnlyHint: true, openWorldHint: true
Get document metadata and table of contents by document ID.
Use this tool when you have a documentId (from list-company-documents) and need to see available sections before reading content.
WORKFLOW:
- search-companies → get companyId
- list-company-documents with companyId → browse documents (paginated)
- get-document with documentId → see sections/TOC
- read-document-sections with documentId + sectionNumbers → read content
EXAMPLE: { documentId: "cmkb7r6fc0000s9lk8jwzdth2" }
Input
| Field | Type | Required | Description |
|---|---|---|---|
documentId |
string | yes | Document ID to retrieve metadata and sections for |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"documentId": {
"type": "string",
"description": "Document ID to retrieve metadata and sections for"
}
},
"required": [
"documentId"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
documentId |
string | yes | |
companyIds |
string[] | yes | |
companyNames |
string[] | yes | |
originalUrl |
string | yes | |
reportType |
string | null | yes | |
fileSize |
number | null | yes | |
processedAt |
string | yes | |
sections |
object[] | yes | Table of contents - use read-document-sections to get content |
sections[].number |
number | yes | |
sections[].title |
string | yes | |
sections[].level |
number | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"documentId": {
"type": "string"
},
"companyIds": {
"type": "array",
"items": {
"type": "string"
}
},
"companyNames": {
"type": "array",
"items": {
"type": "string"
}
},
"originalUrl": {
"type": "string"
},
"reportType": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fileSize": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"processedAt": {
"type": "string"
},
"sections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "number"
},
"title": {
"type": "string"
},
"level": {
"type": "number"
}
},
"required": [
"number",
"title",
"level"
],
"additionalProperties": false
},
"description": "Table of contents - use read-document-sections to get content"
}
},
"required": [
"documentId",
"companyIds",
"companyNames",
"originalUrl",
"reportType",
"fileSize",
"processedAt",
"sections"
],
"additionalProperties": false
}
Get Financial Fundamentals
Tool name: get-fundamentals
Annotations: readOnlyHint: true
Get historical financial fundamentals for one or more companies. Returns income metrics, valuation multiples, margins, and profitability ratios.
Supports field selection (use 'fields' to request only what you need) and year filtering.
EXAMPLES:
Get all fundamentals for Nokia: { companyIds: ["COMPANY:200"] }
Get just P/E and dividend yield for 2022-2024: { companyIds: ["COMPANY:200"], fields: ["pe", "dividendYield"], startYear: 2022, endYear: 2024 }
Compare quarterly EBITDA margins: { companyIds: ["COMPANY:200", "COMPANY:201"], resolution: "quarterly", fields: ["ebitda", "ebitdaPercent"] }
Input
| Field | Type | Required | Description |
|---|---|---|---|
companyIds |
string[] | yes | Array of company IDs (from search-companies) |
resolution |
"quarterly" | "yearly" |
yes | Time resolution for returned data. Defaults to yearly |
fields |
"revenue" | "ebitReported" | "ebitda" | "ebitdaPercent" | "ebitPercent" | "epsReported" | "netIncome" | "ptp" | "dividend" | "dividendYield" | "pe" | "pb" | "evEbit" | "evEbitda" | "evSales" | "sharePrice" | "marketCap" | "enterpriseValue" | "equityRatio" | "gearingRatio" | "roe" | "roi" | "sharesTotal" | "currency"[] |
no | Fields to include. If omitted, all fields are returned. Common: revenue, ebitda, epsReported, dividend, pe, pb, dividendYield |
startYear |
integer | no | Start year filter (inclusive, e.g., 2020) |
endYear |
integer | no | End year filter (inclusive, e.g., 2024) |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"companyIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of company IDs (from search-companies)"
},
"resolution": {
"default": "yearly",
"description": "Time resolution for returned data. Defaults to yearly",
"type": "string",
"enum": [
"quarterly",
"yearly"
]
},
"fields": {
"description": "Fields to include. If omitted, all fields are returned. Common: revenue, ebitda, epsReported, dividend, pe, pb, dividendYield",
"type": "array",
"items": {
"type": "string",
"enum": [
"revenue",
"ebitReported",
"ebitda",
"ebitdaPercent",
"ebitPercent",
"epsReported",
"netIncome",
"ptp",
"dividend",
"dividendYield",
"pe",
"pb",
"evEbit",
"evEbitda",
"evSales",
"sharePrice",
"marketCap",
"enterpriseValue",
"equityRatio",
"gearingRatio",
"roe",
"roi",
"sharesTotal",
"currency"
]
}
},
"startYear": {
"description": "Start year filter (inclusive, e.g., 2020)",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"endYear": {
"description": "End year filter (inclusive, e.g., 2024)",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"companyIds",
"resolution"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
companies |
object[] | yes | Array of company fundamentals |
companies[].companyId |
string | yes | Company ID |
companies[].companyName |
string | yes | Company name |
companies[].instrumentId |
string | yes | Instrument ID |
companies[].reportingCurrency |
string | null | yes | Reporting currency |
companies[].transactions |
object[] | yes | Array of transactions with fundamentals (newest to oldest) |
companies[].transactions[].transactionDate |
string | yes | Date when fundamentals were updated |
companies[].transactions[].transactionId |
string | yes | Unique transaction identifier |
companies[].transactions[].fundamentals |
unknown[] | yes | Array of fundamental data points |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"companies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"companyId": {
"type": "string",
"description": "Company ID"
},
"companyName": {
"type": "string",
"description": "Company name"
},
"instrumentId": {
"type": "string",
"description": "Instrument ID"
},
"reportingCurrency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Reporting currency"
},
"transactions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"transactionDate": {
"type": "string",
"description": "Date when fundamentals were updated"
},
"transactionId": {
"type": "string",
"description": "Unique transaction identifier"
},
"fundamentals": {
"type": "array",
"items": {},
"description": "Array of fundamental data points"
}
},
"required": [
"transactionDate",
"transactionId",
"fundamentals"
],
"additionalProperties": false
},
"description": "Array of transactions with fundamentals (newest to oldest)"
}
},
"required": [
"companyId",
"companyName",
"instrumentId",
"reportingCurrency",
"transactions"
],
"additionalProperties": false
},
"description": "Array of company fundamentals"
}
},
"required": [
"companies"
],
"additionalProperties": false
}
Get Forum Posts
Tool name: get-forum-posts
Annotations: readOnlyHint: true, openWorldHint: true
Fetch posts from an Inderes forum thread.
Provide threadUrl from search-companies.threadUrl or search-forum-topics.url. Pagination is Relay-style: use last to read the most recent posts (highest post numbers) and first to read the oldest posts (lowest post numbers). Exactly one of first or last is required.
- Most recent posts:
last: 50(no cursor). - Oldest posts:
first: 50(no cursor). - Older page:
{ before: pageInfo.startCursor, last: N }. - Newer page:
{ after: pageInfo.endCursor, first: N }.
Continue while hasNextPage / hasPreviousPage is true.
Input
| Field | Type | Required | Description |
|---|---|---|---|
threadUrl |
string | yes | Forum thread URL (e.g., 'https://forum.inderes.com/t/slug/123') (from search-companies or search-forum-topics tool) |
first |
integer | no | Number of posts from the start of the thread (lowest post numbers, oldest first). Pair with 'after' to paginate forward. Mutually exclusive with 'last'. 1-50. |
last |
integer | no | Number of posts from the end of the thread (highest post numbers, most recent). Pair with 'before' to paginate backward. Without 'before', returns the thread tail. Mutually exclusive with 'first'. 1-50. |
after |
string | no | Cursor from pageInfo.endCursor. Use with 'first' to read the next page forward. Pass '0' to read from the thread start. Mutually exclusive with 'before'. |
before |
string | no | Cursor from pageInfo.startCursor. Use with 'last' to read the previous page backward. Mutually exclusive with 'after'. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"threadUrl": {
"type": "string",
"description": "Forum thread URL (e.g., 'https://forum.inderes.com/t/slug/123') (from search-companies or search-forum-topics tool)"
},
"first": {
"description": "Number of posts from the start of the thread (lowest post numbers, oldest first). Pair with 'after' to paginate forward. Mutually exclusive with 'last'. 1-50.",
"type": "integer",
"minimum": 1,
"maximum": 50
},
"last": {
"description": "Number of posts from the end of the thread (highest post numbers, most recent). Pair with 'before' to paginate backward. Without 'before', returns the thread tail. Mutually exclusive with 'first'. 1-50.",
"type": "integer",
"minimum": 1,
"maximum": 50
},
"after": {
"description": "Cursor from pageInfo.endCursor. Use with 'first' to read the next page forward. Pass '0' to read from the thread start. Mutually exclusive with 'before'.",
"type": "string"
},
"before": {
"description": "Cursor from pageInfo.startCursor. Use with 'last' to read the previous page backward. Mutually exclusive with 'after'.",
"type": "string"
}
},
"required": [
"threadUrl"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
posts |
object[] | yes | |
posts[].id |
number | yes | |
posts[].url |
string | yes | |
posts[].username |
string | null | yes | |
posts[].createdAt |
string | yes | |
posts[].content |
string | yes | |
posts[].postNumber |
number | yes | |
posts[].replyCount |
number | yes | |
posts[].score |
number | yes | |
pageInfo |
object | yes | |
pageInfo.hasNextPage |
boolean | yes | |
pageInfo.hasPreviousPage |
boolean | yes | |
pageInfo.startCursor |
string | null | yes | |
pageInfo.endCursor |
string | null | yes | |
pageInfo.totalPosts |
number | yes | |
pageInfo.highestPostNumber |
number | yes | |
pageInfo.threadId |
number | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"posts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"url": {
"type": "string"
},
"username": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"createdAt": {
"type": "string"
},
"content": {
"type": "string"
},
"postNumber": {
"type": "number"
},
"replyCount": {
"type": "number"
},
"score": {
"type": "number"
}
},
"required": [
"id",
"url",
"username",
"createdAt",
"content",
"postNumber",
"replyCount",
"score"
],
"additionalProperties": false
}
},
"pageInfo": {
"type": "object",
"properties": {
"hasNextPage": {
"type": "boolean"
},
"hasPreviousPage": {
"type": "boolean"
},
"startCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"endCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"totalPosts": {
"type": "number"
},
"highestPostNumber": {
"type": "number"
},
"threadId": {
"type": "number"
}
},
"required": [
"hasNextPage",
"hasPreviousPage",
"startCursor",
"endCursor",
"totalPosts",
"highestPostNumber",
"threadId"
],
"additionalProperties": false
}
},
"required": [
"posts",
"pageInfo"
],
"additionalProperties": false
}
Get Inderes Estimates
Tool name: get-inderes-estimates
Annotations: readOnlyHint: true
Get forward-looking analyst estimates and recommendations for one or more companies.
Each response includes recommendation (BUY/HOLD/SELL etc.), target price, and risk scores alongside the requested estimate fields.
If companyIds is omitted, returns all covered companies (~150-200). yearCount controls how many future years are returned (near-term first); set includeQuarters=true to add quarterly breakdowns for those years.
Common fields: revenue, revenueGrowth, ebitda, epsReported, dividend, dividendYield, pe, pb, sharePrice
Input
| Field | Type | Required | Description |
|---|---|---|---|
companyIds |
string[] | no | Optional array of company IDs (from search-companies). If not provided, fetches all covered companies. |
count |
integer | yes | Number of latest estimate transactions to fetch per company (1-100). Default: 1 |
fields |
"revenue" | "revenueGrowth" | "ebitReported" | "ebitAdjusted" | "ebitda" | "ebitdaPercent" | "ebitPercent" | "epsReported" | "epsAdjusted" | "dividend" | "dividendYield" | "pe" | "peAdjusted" | "pb" | "ps" | "evEbit" | "evEbitAdjusted" | "evEbitda" | "evSales" | "enterpriseValue" | "preTaxProfit" | "netEarnings" | "totalCosts" | "roePercent" | "roiPercent" | "balanceSheetTotal" | "bookValue" | "tangibleBook" | "netDebt" | "equityRatio" | "gearingPercent" | "sharesTotal" | "cet1" | "rwa" | "loanLosses" | "associatedCompaniesMarketValue" | "minoritiesMarketValue" | "payoutPercentage" | "sharePrice"[] |
yes | Fields to include in estimates. Common fields: revenue, revenueGrowth, ebitda, epsReported, dividend, pe, pb |
includeQuarters |
boolean | yes | Include quarterly estimates. When true, periods like '2025-Q1' appear alongside '2025'. |
yearCount |
integer | yes | Limit to N unique years (includes all quarters for those years if enabled). Default: 1 |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"companyIds": {
"description": "Optional array of company IDs (from search-companies). If not provided, fetches all covered companies.",
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"default": 1,
"description": "Number of latest estimate transactions to fetch per company (1-100). Default: 1",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"fields": {
"type": "array",
"items": {
"type": "string",
"enum": [
"revenue",
"revenueGrowth",
"ebitReported",
"ebitAdjusted",
"ebitda",
"ebitdaPercent",
"ebitPercent",
"epsReported",
"epsAdjusted",
"dividend",
"dividendYield",
"pe",
"peAdjusted",
"pb",
"ps",
"evEbit",
"evEbitAdjusted",
"evEbitda",
"evSales",
"enterpriseValue",
"preTaxProfit",
"netEarnings",
"totalCosts",
"roePercent",
"roiPercent",
"balanceSheetTotal",
"bookValue",
"tangibleBook",
"netDebt",
"equityRatio",
"gearingPercent",
"sharesTotal",
"cet1",
"rwa",
"loanLosses",
"associatedCompaniesMarketValue",
"minoritiesMarketValue",
"payoutPercentage",
"sharePrice"
]
},
"description": "Fields to include in estimates. Common fields: revenue, revenueGrowth, ebitda, epsReported, dividend, pe, pb"
},
"includeQuarters": {
"default": false,
"description": "Include quarterly estimates. When true, periods like '2025-Q1' appear alongside '2025'.",
"type": "boolean"
},
"yearCount": {
"default": 1,
"description": "Limit to N unique years (includes all quarters for those years if enabled). Default: 1",
"type": "integer",
"minimum": 1,
"maximum": 10
}
},
"required": [
"count",
"fields",
"includeQuarters",
"yearCount"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
companies |
object[] | yes | Array of company estimates |
companies[].companyId |
string | yes | Company ID |
companies[].companyName |
string | yes | Company name |
companies[].estimateCurrency |
string | null | yes | Currency for financial estimates |
companies[].targetPriceCurrency |
string | null | yes | Currency for target price |
companies[].transactions |
object[] | yes | Array of estimate transactions (newest to oldest) |
companies[].transactions[].transactionDate |
string | yes | Date when estimate was published |
companies[].transactions[].recommendation |
string | yes | Recommendation (SELL/REDUCE/HOLD/INCREASE/BUY) |
companies[].transactions[].businessRisk |
number | null | yes | Business risk score (1-5: 1=lowest, 5=highest) |
companies[].transactions[].valuationRisk |
number | null | yes | Valuation risk score (1-5: 1=lowest, 5=highest) |
companies[].transactions[].targetPrice |
number | null | yes | Target price for the stock |
companies[].transactions[].sharePrice |
number | null | no | Current share price (only included if requested in fields) |
companies[].transactions[].estimates |
object | yes | Columnar estimates: 'period' array contains time periods (e.g., '2025', '2025-Q1'), other keys are metrics with values aligned by index |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"companies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"companyId": {
"type": "string",
"description": "Company ID"
},
"companyName": {
"type": "string",
"description": "Company name"
},
"estimateCurrency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Currency for financial estimates"
},
"targetPriceCurrency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Currency for target price"
},
"transactions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"transactionDate": {
"type": "string",
"description": "Date when estimate was published"
},
"recommendation": {
"type": "string",
"description": "Recommendation (SELL/REDUCE/HOLD/INCREASE/BUY)"
},
"businessRisk": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Business risk score (1-5: 1=lowest, 5=highest)"
},
"valuationRisk": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Valuation risk score (1-5: 1=lowest, 5=highest)"
},
"targetPrice": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Target price for the stock"
},
"sharePrice": {
"description": "Current share price (only included if requested in fields)",
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"estimates": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "array",
"items": {}
},
"description": "Columnar estimates: 'period' array contains time periods (e.g., '2025', '2025-Q1'), other keys are metrics with values aligned by index"
}
},
"required": [
"transactionDate",
"recommendation",
"businessRisk",
"valuationRisk",
"targetPrice",
"estimates"
],
"additionalProperties": false
},
"description": "Array of estimate transactions (newest to oldest)"
}
},
"required": [
"companyId",
"companyName",
"estimateCurrency",
"targetPriceCurrency",
"transactions"
],
"additionalProperties": false
},
"description": "Array of company estimates"
}
},
"required": [
"companies"
],
"additionalProperties": false
}
Get Model Portfolio Content
Tool name: get-model-portfolio-content
Annotations: readOnlyHint: true
Get the current stock holdings in the Inderes model portfolio.
Returns one row per stock position. acquisitionPriceEur is the total EUR amount originally used to buy the full position. currentValueEur is the current total EUR market value of all owned shares in that position.
Use get-model-portfolio-price if you need the portfolio's historical total value over time instead of the current position breakdown.
Input
| Field | Type | Required | Description |
|---|---|---|---|
portfolioName |
"Inderes" |
yes | Portfolio name. Currently only "Inderes" is supported |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"portfolioName": {
"default": "Inderes",
"description": "Portfolio name. Currently only \"Inderes\" is supported",
"type": "string",
"enum": [
"Inderes"
]
}
},
"required": [
"portfolioName"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
portfolioName |
string | yes | Portfolio name |
instruments |
object[] | yes | Current stock positions in the portfolio. All monetary values are in EUR |
instruments[].companyName |
string | yes | Company name |
instruments[].acquisitionPriceEur |
number | yes | Total EUR amount originally used to buy the full position |
instruments[].currentValueEur |
number | null | yes | Current total EUR market value of all owned shares in the position |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"portfolioName": {
"type": "string",
"description": "Portfolio name"
},
"instruments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"companyName": {
"type": "string",
"description": "Company name"
},
"acquisitionPriceEur": {
"type": "number",
"description": "Total EUR amount originally used to buy the full position"
},
"currentValueEur": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Current total EUR market value of all owned shares in the position"
}
},
"required": [
"companyName",
"acquisitionPriceEur",
"currentValueEur"
],
"additionalProperties": false
},
"description": "Current stock positions in the portfolio. All monetary values are in EUR"
}
},
"required": [
"portfolioName",
"instruments"
],
"additionalProperties": false
}
Get Model Portfolio Price History
Tool name: get-model-portfolio-price
Annotations: readOnlyHint: true
Get historical total portfolio value over time for the Inderes model portfolio.
The priceHistory series contains the portfolio's total value for each date in EUR. The cash field is the current uninvested cash balance held in the portfolio, also in EUR. Defaults to monthly resolution over the full available history; narrow with dateFrom and/or switch to daily/weekly scale when a finer view is needed. Use get-model-portfolio-content if you need the current stock-level position breakdown instead of the historical total-value series.
Input
| Field | Type | Required | Description |
|---|---|---|---|
portfolioName |
"Inderes" |
yes | Portfolio name. Currently only "Inderes" is supported |
dateFrom |
string | no | Optional start date for price history (inclusive, YYYY-MM-DD). Omit for full range. |
scale |
"day" | "week" | "month" |
yes | Resolution for the price series. Defaults to monthly to keep full-range responses compact. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"portfolioName": {
"default": "Inderes",
"description": "Portfolio name. Currently only \"Inderes\" is supported",
"type": "string",
"enum": [
"Inderes"
]
},
"dateFrom": {
"description": "Optional start date for price history (inclusive, YYYY-MM-DD). Omit for full range.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}{{CONTENT}}quot;
},
"scale": {
"default": "month",
"description": "Resolution for the price series. Defaults to monthly to keep full-range responses compact.",
"type": "string",
"enum": [
"day",
"week",
"month"
]
}
},
"required": [
"portfolioName",
"scale"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
portfolioName |
string | yes | Portfolio name |
cash |
number | yes | Current uninvested cash balance held in the portfolio, in EUR |
priceHistory |
object[] | yes | Historical series of total portfolio value over time, in EUR |
priceHistory[].date |
string | yes | Date for the portfolio value snapshot |
priceHistory[].value |
number | yes | Total portfolio value on that date, in EUR |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"portfolioName": {
"type": "string",
"description": "Portfolio name"
},
"cash": {
"type": "number",
"description": "Current uninvested cash balance held in the portfolio, in EUR"
},
"priceHistory": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "Date for the portfolio value snapshot"
},
"value": {
"type": "number",
"description": "Total portfolio value on that date, in EUR"
}
},
"required": [
"date",
"value"
],
"additionalProperties": false
},
"description": "Historical series of total portfolio value over time, in EUR"
}
},
"required": [
"portfolioName",
"cash",
"priceHistory"
],
"additionalProperties": false
}
Get Transcript
Tool name: get-transcript
Annotations: readOnlyHint: true, openWorldHint: true
Get a transcript by ID. Returns plain text with speaker labels — token-efficient format for LLM consumption.
Use list-transcripts to find transcript IDs, then this tool to read the full text.
EXAMPLES: { transcriptId: "TRANSCRIPT:VIDEO:19187" } { transcriptId: "TRANSCRIPT:VIDEO:19187", lang: "en" }
Input
| Field | Type | Required | Description |
|---|---|---|---|
transcriptId |
string | yes | Transcript ID (e.g., 'TRANSCRIPT:VIDEO:19187') |
lang |
"fi" | "en" | "sv" | "da" |
no | Preferred language for transcript content |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"transcriptId": {
"type": "string",
"description": "Transcript ID (e.g., 'TRANSCRIPT:VIDEO:19187')"
},
"lang": {
"description": "Preferred language for transcript content",
"type": "string",
"enum": [
"fi",
"en",
"sv",
"da"
]
}
},
"required": [
"transcriptId"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
title |
string | yes | |
lang |
string | yes | |
pageUrl |
string | null | yes | |
companyIds |
string[] | yes | |
companies |
string[] | yes | |
createdAt |
string | yes | |
content |
string | yes | Plain text transcript with speaker labels |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"lang": {
"type": "string"
},
"pageUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"companyIds": {
"type": "array",
"items": {
"type": "string"
}
},
"companies": {
"type": "array",
"items": {
"type": "string"
}
},
"createdAt": {
"type": "string"
},
"content": {
"type": "string",
"description": "Plain text transcript with speaker labels"
}
},
"required": [
"title",
"lang",
"pageUrl",
"companyIds",
"companies",
"createdAt",
"content"
],
"additionalProperties": false
}
List Calendar Events
Tool name: list-calendar-events
Annotations: readOnlyHint: true, openWorldHint: true
List company and market calendar events from Inderes.
Use this for upcoming earnings dates, dividend events, general meetings, capital market days, and related events.
Input
| Field | Type | Required | Description |
|---|---|---|---|
companyId |
string | no | Optional company ID (e.g., COMPANY:200). If provided, results are scoped to that company's default instrument calendar. |
regions |
"DENMARK" | "ESTONIA" | "FINLAND" | "FRANCE" | "GERMANY" | "NORWAY" | "SWEDEN" | "USA"[] |
no | Optional market region filter |
types |
"ANALYST_MEETING" | "ANNUAL_DIVIDEND" | "ANNUAL_REPORT" | "BI_MONTHLY_DIVIDEND" | "BONUS_DIVIDEND" | "BUSINESS_REVIEW" | "CAPITAL_MARKET_DAY" | "COMPANY_PRESENTATION" | "COMPANY_UPDATE" | "DELISTING" | "EXTRAORDINARY_GENERAL_MEETING" | "GENERAL_MEETING" | "HALF_YEAR_DIVIDEND" | "INTERIM_REPORT" | "MONTHLY_DIVIDEND" | "QUARTERLY_DIVIDEND" | "ROADSHOW" | "TRIANNUAL_DIVIDEND"[] |
no | Optional calendar event type filter |
dateFrom |
string | no | Optional start date filter (inclusive, YYYY-MM-DD) |
dateTo |
string | no | Optional end date filter (inclusive, YYYY-MM-DD) |
first |
integer | yes | Number of events per page (1-100, default 20) |
after |
string | no | Pagination cursor from pageInfo.endCursor |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"companyId": {
"description": "Optional company ID (e.g., COMPANY:200). If provided, results are scoped to that company's default instrument calendar.",
"type": "string"
},
"regions": {
"description": "Optional market region filter",
"type": "array",
"items": {
"type": "string",
"enum": [
"DENMARK",
"ESTONIA",
"FINLAND",
"FRANCE",
"GERMANY",
"NORWAY",
"SWEDEN",
"USA"
]
}
},
"types": {
"description": "Optional calendar event type filter",
"type": "array",
"items": {
"type": "string",
"enum": [
"ANALYST_MEETING",
"ANNUAL_DIVIDEND",
"ANNUAL_REPORT",
"BI_MONTHLY_DIVIDEND",
"BONUS_DIVIDEND",
"BUSINESS_REVIEW",
"CAPITAL_MARKET_DAY",
"COMPANY_PRESENTATION",
"COMPANY_UPDATE",
"DELISTING",
"EXTRAORDINARY_GENERAL_MEETING",
"GENERAL_MEETING",
"HALF_YEAR_DIVIDEND",
"INTERIM_REPORT",
"MONTHLY_DIVIDEND",
"QUARTERLY_DIVIDEND",
"ROADSHOW",
"TRIANNUAL_DIVIDEND"
]
}
},
"dateFrom": {
"description": "Optional start date filter (inclusive, YYYY-MM-DD)",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}{{CONTENT}}quot;
},
"dateTo": {
"description": "Optional end date filter (inclusive, YYYY-MM-DD)",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}{{CONTENT}}quot;
},
"first": {
"default": 20,
"description": "Number of events per page (1-100, default 20)",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"after": {
"description": "Pagination cursor from pageInfo.endCursor",
"type": "string"
}
},
"required": [
"first"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
items |
object[] | yes | Calendar events in GraphQL cursor order |
items[].id |
string | yes | Calendar event ID |
items[].date |
string | yes | Event date in YYYY-MM-DD format |
items[].type |
"ANALYST_MEETING" | "ANNUAL_DIVIDEND" | "ANNUAL_REPORT" | "BI_MONTHLY_DIVIDEND" | "BONUS_DIVIDEND" | "BUSINESS_REVIEW" | "CAPITAL_MARKET_DAY" | "COMPANY_PRESENTATION" | "COMPANY_UPDATE" | "DELISTING" | "EXTRAORDINARY_GENERAL_MEETING" | "GENERAL_MEETING" | "HALF_YEAR_DIVIDEND" | "INTERIM_REPORT" | "MONTHLY_DIVIDEND" | "QUARTERLY_DIVIDEND" | "ROADSHOW" | "TRIANNUAL_DIVIDEND" |
yes | Calendar event type (e.g., INTERIM_REPORT, ANNUAL_REPORT) |
items[].period |
string | null | yes | Financial period (if available) |
items[].companyId |
string | null | yes | Related company ID (if available) |
items[].companyName |
string | null | yes | Related company name (if available) |
items[].dividend |
number | null | yes | Dividend amount (if applicable) |
items[].paymentDate |
string | null | yes | Dividend payment date in YYYY-MM-DD format (if applicable) |
pageInfo |
object | yes | |
pageInfo.hasNextPage |
boolean | yes | Whether more events are available |
pageInfo.endCursor |
string | null | yes | Cursor for next page |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Calendar event ID"
},
"date": {
"type": "string",
"description": "Event date in YYYY-MM-DD format"
},
"type": {
"type": "string",
"enum": [
"ANALYST_MEETING",
"ANNUAL_DIVIDEND",
"ANNUAL_REPORT",
"BI_MONTHLY_DIVIDEND",
"BONUS_DIVIDEND",
"BUSINESS_REVIEW",
"CAPITAL_MARKET_DAY",
"COMPANY_PRESENTATION",
"COMPANY_UPDATE",
"DELISTING",
"EXTRAORDINARY_GENERAL_MEETING",
"GENERAL_MEETING",
"HALF_YEAR_DIVIDEND",
"INTERIM_REPORT",
"MONTHLY_DIVIDEND",
"QUARTERLY_DIVIDEND",
"ROADSHOW",
"TRIANNUAL_DIVIDEND"
],
"description": "Calendar event type (e.g., INTERIM_REPORT, ANNUAL_REPORT)"
},
"period": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Financial period (if available)"
},
"companyId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Related company ID (if available)"
},
"companyName": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Related company name (if available)"
},
"dividend": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Dividend amount (if applicable)"
},
"paymentDate": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Dividend payment date in YYYY-MM-DD format (if applicable)"
}
},
"required": [
"id",
"date",
"type",
"period",
"companyId",
"companyName",
"dividend",
"paymentDate"
],
"additionalProperties": false
},
"description": "Calendar events in GraphQL cursor order"
},
"pageInfo": {
"type": "object",
"properties": {
"hasNextPage": {
"type": "boolean",
"description": "Whether more events are available"
},
"endCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Cursor for next page"
}
},
"required": [
"hasNextPage",
"endCursor"
],
"additionalProperties": false
}
},
"required": [
"items",
"pageInfo"
],
"additionalProperties": false
}
List Company Documents
Tool name: list-company-documents
Annotations: readOnlyHint: true, openWorldHint: true
List annual/interim reports and other filings issued by the company itself. Returns paginated documents with period info — use get-document to see sections/TOC for a specific document. For Inderes-authored reports, analyst comments, and articles, use list-content instead.
Supports pagination via first (default 20, max 100) and after (cursor from pageInfo.endCursor).
WORKFLOW:
- search-companies → get companyId
- list-company-documents with companyId → browse documents (paginated)
- get-document with documentId → see sections/TOC
- read-document-sections with documentId + sectionNumbers → read content
EXAMPLE USAGE: {"companyId": "COMPANY:200"} {"companyId": "COMPANY:200", "first": 50, "after": "b2Zmc2V0OjIw"}
Input
| Field | Type | Required | Description |
|---|---|---|---|
companyId |
string | yes | Company ID to list documents for (from search-companies) |
first |
integer | yes | Number of items to return per page (1-100, default 20) |
after |
string | no | Pagination cursor from pageInfo.endCursor to get next page |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"companyId": {
"type": "string",
"description": "Company ID to list documents for (from search-companies)"
},
"first": {
"default": 20,
"description": "Number of items to return per page (1-100, default 20)",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"after": {
"description": "Pagination cursor from pageInfo.endCursor to get next page",
"type": "string"
}
},
"required": [
"companyId",
"first"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
items |
object[] | yes | List of documents for the company |
items[].documentId |
string | yes | Document ID |
items[].title |
string | yes | Document title |
items[].companyName |
string | yes | Company name |
items[].period |
string | yes | Reporting period (e.g., '2024', '2024-Q4') |
items[].fiscalPeriodStart |
string | no | Fiscal period start date in ISO format (YYYY-MM-DD) |
items[].fiscalPeriodEnd |
string | no | Fiscal period end date in ISO format (YYYY-MM-DD) |
items[].url |
string | yes | Full URL to document |
pageInfo |
object | yes | |
pageInfo.hasNextPage |
boolean | yes | |
pageInfo.endCursor |
string | null | yes | |
metadata |
object | yes | |
metadata.total |
number | yes | Total number of documents found |
metadata.companyId |
string | yes | Company ID that was queried |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"documentId": {
"type": "string",
"description": "Document ID"
},
"title": {
"type": "string",
"description": "Document title"
},
"companyName": {
"type": "string",
"description": "Company name"
},
"period": {
"type": "string",
"description": "Reporting period (e.g., '2024', '2024-Q4')"
},
"fiscalPeriodStart": {
"description": "Fiscal period start date in ISO format (YYYY-MM-DD)",
"type": "string"
},
"fiscalPeriodEnd": {
"description": "Fiscal period end date in ISO format (YYYY-MM-DD)",
"type": "string"
},
"url": {
"type": "string",
"description": "Full URL to document"
}
},
"required": [
"documentId",
"title",
"companyName",
"period",
"url"
],
"additionalProperties": false
},
"description": "List of documents for the company"
},
"pageInfo": {
"type": "object",
"properties": {
"hasNextPage": {
"type": "boolean"
},
"endCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"hasNextPage",
"endCursor"
],
"additionalProperties": false
},
"metadata": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Total number of documents found"
},
"companyId": {
"type": "string",
"description": "Company ID that was queried"
}
},
"required": [
"total",
"companyId"
],
"additionalProperties": false
}
},
"required": [
"items",
"pageInfo",
"metadata"
],
"additionalProperties": false
}
List Content
Tool name: list-content
Annotations: readOnlyHint: true, openWorldHint: true
List content items from Inderes (reports, articles, analyst comments, releases); pass an item's id to get-content to read the body. Filter by company and/or content type.
The returned id (e.g. "COMPANY_REPORT:directus-9950") is a content ID, not a document ID — it only works with get-content. To read PDF report sections, call get-content first; for ingested PDF reports it returns a separate documentId for read-document-sections.
TIP: PRESS_RELEASE and STOCK_EXCHANGE_RELEASE are high-volume — filter them with the types parameter to avoid drowning out analyst research.
Input
| Field | Type | Required | Description |
|---|---|---|---|
companyId |
string | no | Optional Inderes company ID (e.g., 'COMPANY:200'). If omitted, returns content from all companies. |
types |
"ANALYST_COMMENT" | "ARTICLE" | "COMPANY_REPORT" | "EXTENSIVE_COMPANY_REPORT" | "PRESS_RELEASE" | "QA" | "STOCK_EXCHANGE_RELEASE" | "THIRD_PARTY_COMPANY_REPORT" | "TRANSCRIPT" | "VIDEO" | "WEBCAST"[] |
yes | Filter by content types. It's recommended to get ["PRESS_RELEASE", "STOCK_EXCHANGE_RELEASE"] separately because of their high volume. |
first |
integer | yes | Number of items to return per page (1-100, default 20) |
after |
string | no | Pagination cursor from pageInfo.endCursor to get next page |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"companyId": {
"description": "Optional Inderes company ID (e.g., 'COMPANY:200'). If omitted, returns content from all companies.",
"type": "string"
},
"types": {
"default": [
"ANALYST_COMMENT",
"ARTICLE",
"COMPANY_REPORT",
"EXTENSIVE_COMPANY_REPORT",
"THIRD_PARTY_COMPANY_REPORT"
],
"description": "Filter by content types. It's recommended to get [\"PRESS_RELEASE\", \"STOCK_EXCHANGE_RELEASE\"] separately because of their high volume.",
"type": "array",
"items": {
"type": "string",
"enum": [
"ANALYST_COMMENT",
"ARTICLE",
"COMPANY_REPORT",
"EXTENSIVE_COMPANY_REPORT",
"PRESS_RELEASE",
"QA",
"STOCK_EXCHANGE_RELEASE",
"THIRD_PARTY_COMPANY_REPORT",
"TRANSCRIPT",
"VIDEO",
"WEBCAST"
]
}
},
"first": {
"default": 20,
"description": "Number of items to return per page (1-100, default 20)",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"after": {
"description": "Pagination cursor from pageInfo.endCursor to get next page",
"type": "string"
}
},
"required": [
"types",
"first"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
items |
object[] | yes | |
items[].id |
string | yes | |
items[].type |
string | yes | |
items[].title |
string | yes | |
items[].createdAt |
string | yes | |
items[].pageUrl |
string | yes | |
pageInfo |
object | yes | |
pageInfo.hasNextPage |
boolean | yes | |
pageInfo.endCursor |
string | null | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string"
},
"title": {
"type": "string"
},
"createdAt": {
"type": "string"
},
"pageUrl": {
"type": "string"
}
},
"required": [
"id",
"type",
"title",
"createdAt",
"pageUrl"
],
"additionalProperties": false
}
},
"pageInfo": {
"type": "object",
"properties": {
"hasNextPage": {
"type": "boolean"
},
"endCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"hasNextPage",
"endCursor"
],
"additionalProperties": false
}
},
"required": [
"items",
"pageInfo"
],
"additionalProperties": false
}
List Insider Transactions
Tool name: list-insider-transactions
Annotations: readOnlyHint: true, openWorldHint: true
List insider transactions from Inderes.
Use this for insider buy/sell monitoring, governance signal tracking, and company-specific transaction history.
Input
| Field | Type | Required | Description |
|---|---|---|---|
companyId |
string | no | Optional company ID (e.g., COMPANY:200) to scope insider transactions to one company |
regions |
"DENMARK" | "ESTONIA" | "FINLAND" | "FRANCE" | "GERMANY" | "NORWAY" | "SWEDEN" | "USA"[] |
no | Optional region filter |
types |
"APPROVAL_OF_SHARE_OPTION" | "BORROWING" | "BUY" | "CONVERTION_INTO_ANOTHER_FINANCIAL_INSTRUMENT" | "ENTERING_INTO_SHARE_SWAP_CONTRACT" | "EXECUTION_OF_SHARE_SWAP" | "EXERCISE_OF_RIGHTS_PUT_CALL_OPTIONS" | "EXERCISE_OF_SHARE_OPTION" | "GIFT_DONATION_OR_LEGACY_GIVEN" | "GIFT_DONATION_OR_LEGACY_RECEIVED" | "LENDING" | "MAKING_PRICE_DIFFERENCE_CONTRACT" | "MATURITY_OF_PRODUCT" | "OTHER" | "PLEDGE" | "RECEPTION_OF_SHARE_PREMIUM" | "SELL" | "SHORT_SELL" | "SUBSCRIPTION" | "TERMINATION_OF_PLEDGE" | "UNKNOWN"[] |
no | Optional insider transaction type filter |
dateFrom |
string | no | Optional start date filter (inclusive, YYYY-MM-DD) |
dateTo |
string | no | Optional end date filter (inclusive, YYYY-MM-DD) |
first |
integer | yes | Number of transactions per page (1-100, default 20) |
after |
string | no | Pagination cursor from pageInfo.endCursor |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"companyId": {
"description": "Optional company ID (e.g., COMPANY:200) to scope insider transactions to one company",
"type": "string"
},
"regions": {
"description": "Optional region filter",
"type": "array",
"items": {
"type": "string",
"enum": [
"DENMARK",
"ESTONIA",
"FINLAND",
"FRANCE",
"GERMANY",
"NORWAY",
"SWEDEN",
"USA"
]
}
},
"types": {
"description": "Optional insider transaction type filter",
"type": "array",
"items": {
"type": "string",
"enum": [
"APPROVAL_OF_SHARE_OPTION",
"BORROWING",
"BUY",
"CONVERTION_INTO_ANOTHER_FINANCIAL_INSTRUMENT",
"ENTERING_INTO_SHARE_SWAP_CONTRACT",
"EXECUTION_OF_SHARE_SWAP",
"EXERCISE_OF_RIGHTS_PUT_CALL_OPTIONS",
"EXERCISE_OF_SHARE_OPTION",
"GIFT_DONATION_OR_LEGACY_GIVEN",
"GIFT_DONATION_OR_LEGACY_RECEIVED",
"LENDING",
"MAKING_PRICE_DIFFERENCE_CONTRACT",
"MATURITY_OF_PRODUCT",
"OTHER",
"PLEDGE",
"RECEPTION_OF_SHARE_PREMIUM",
"SELL",
"SHORT_SELL",
"SUBSCRIPTION",
"TERMINATION_OF_PLEDGE",
"UNKNOWN"
]
}
},
"dateFrom": {
"description": "Optional start date filter (inclusive, YYYY-MM-DD)",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}{{CONTENT}}quot;
},
"dateTo": {
"description": "Optional end date filter (inclusive, YYYY-MM-DD)",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}{{CONTENT}}quot;
},
"first": {
"default": 20,
"description": "Number of transactions per page (1-100, default 20)",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"after": {
"description": "Pagination cursor from pageInfo.endCursor",
"type": "string"
}
},
"required": [
"first"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
items |
object[] | yes | Insider transactions in GraphQL cursor order |
items[].id |
string | yes | |
items[].date |
string | yes | Transaction date in YYYY-MM-DD format |
items[].type |
"APPROVAL_OF_SHARE_OPTION" | "BORROWING" | "BUY" | "CONVERTION_INTO_ANOTHER_FINANCIAL_INSTRUMENT" | "ENTERING_INTO_SHARE_SWAP_CONTRACT" | "EXECUTION_OF_SHARE_SWAP" | "EXERCISE_OF_RIGHTS_PUT_CALL_OPTIONS" | "EXERCISE_OF_SHARE_OPTION" | "GIFT_DONATION_OR_LEGACY_GIVEN" | "GIFT_DONATION_OR_LEGACY_RECEIVED" | "LENDING" | "MAKING_PRICE_DIFFERENCE_CONTRACT" | "MATURITY_OF_PRODUCT" | "OTHER" | "PLEDGE" | "RECEPTION_OF_SHARE_PREMIUM" | "SELL" | "SHORT_SELL" | "SUBSCRIPTION" | "TERMINATION_OF_PLEDGE" | "UNKNOWN" |
yes | e.g., BUY, SELL |
items[].insider |
string | yes | |
items[].position |
"CHIEF_EXECUTIVE_OFFICER" | "CHIEF_FINANCIAL_OFFICER" | "LEGAL_ENTITY" | "MEMBER_OF_THE_BOARD" | "MEMBER_OF_THE_SUPERVISORY_BOARD" | "OTHER_SENIOR_MANAGEMENT" | "RELATED_PARTY" | "UNKNOWN" |
yes | |
items[].relatedParty |
string | null | yes | |
items[].price |
number | null | yes | Price per unit |
items[].volume |
number | null | yes | |
items[].unit |
string | null | yes | |
items[].companyId |
string | null | yes | |
items[].companyName |
string | null | yes | |
items[].releaseId |
string | null | yes | |
items[].releaseTitle |
string | null | yes | |
items[].releaseUrl |
string | null | yes | |
items[].releaseDate |
string | null | yes | Stock exchange release createdAt date-time |
pageInfo |
object | yes | |
pageInfo.hasNextPage |
boolean | yes | |
pageInfo.endCursor |
string | null | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"date": {
"type": "string",
"description": "Transaction date in YYYY-MM-DD format"
},
"type": {
"type": "string",
"enum": [
"APPROVAL_OF_SHARE_OPTION",
"BORROWING",
"BUY",
"CONVERTION_INTO_ANOTHER_FINANCIAL_INSTRUMENT",
"ENTERING_INTO_SHARE_SWAP_CONTRACT",
"EXECUTION_OF_SHARE_SWAP",
"EXERCISE_OF_RIGHTS_PUT_CALL_OPTIONS",
"EXERCISE_OF_SHARE_OPTION",
"GIFT_DONATION_OR_LEGACY_GIVEN",
"GIFT_DONATION_OR_LEGACY_RECEIVED",
"LENDING",
"MAKING_PRICE_DIFFERENCE_CONTRACT",
"MATURITY_OF_PRODUCT",
"OTHER",
"PLEDGE",
"RECEPTION_OF_SHARE_PREMIUM",
"SELL",
"SHORT_SELL",
"SUBSCRIPTION",
"TERMINATION_OF_PLEDGE",
"UNKNOWN"
],
"description": "e.g., BUY, SELL"
},
"insider": {
"type": "string"
},
"position": {
"type": "string",
"enum": [
"CHIEF_EXECUTIVE_OFFICER",
"CHIEF_FINANCIAL_OFFICER",
"LEGAL_ENTITY",
"MEMBER_OF_THE_BOARD",
"MEMBER_OF_THE_SUPERVISORY_BOARD",
"OTHER_SENIOR_MANAGEMENT",
"RELATED_PARTY",
"UNKNOWN"
]
},
"relatedParty": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Price per unit"
},
"volume": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"companyId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"companyName": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"releaseId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"releaseTitle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"releaseUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"releaseDate": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Stock exchange release createdAt date-time"
}
},
"required": [
"id",
"date",
"type",
"insider",
"position",
"relatedParty",
"price",
"volume",
"unit",
"companyId",
"companyName",
"releaseId",
"releaseTitle",
"releaseUrl",
"releaseDate"
],
"additionalProperties": false
},
"description": "Insider transactions in GraphQL cursor order"
},
"pageInfo": {
"type": "object",
"properties": {
"hasNextPage": {
"type": "boolean"
},
"endCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"hasNextPage",
"endCursor"
],
"additionalProperties": false
}
},
"required": [
"items",
"pageInfo"
],
"additionalProperties": false
}
List Transcripts
Tool name: list-transcripts
Annotations: readOnlyHint: true, openWorldHint: true
List transcripts of earnings webcasts and analyst interviews. Returns metadata for browsing — use get-transcript to read the full text.
EXAMPLES: Get latest transcripts: { first: 20 }
Filter by company: { companyId: "COMPANY:200", first: 10 }
Get next page: { first: 20, after: "cursor_from_previous_response" }
Input
| Field | Type | Required | Description |
|---|---|---|---|
companyId |
string | no | Optional Inderes company ID (e.g., 'COMPANY:200'). If omitted, returns transcripts from all companies. |
first |
integer | yes | Number of items to return per page (1-100, default 20) |
after |
string | no | Pagination cursor from pageInfo.endCursor to get next page |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"companyId": {
"description": "Optional Inderes company ID (e.g., 'COMPANY:200'). If omitted, returns transcripts from all companies.",
"type": "string"
},
"first": {
"default": 20,
"description": "Number of items to return per page (1-100, default 20)",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"after": {
"description": "Pagination cursor from pageInfo.endCursor to get next page",
"type": "string"
}
},
"required": [
"first"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
items |
object[] | yes | |
items[].id |
string | yes | |
items[].title |
string | yes | |
items[].lang |
string | yes | |
items[].createdAt |
string | yes | |
items[].pageUrl |
string | yes | |
items[].companies |
string[] | yes | |
pageInfo |
object | yes | |
pageInfo.hasNextPage |
boolean | yes | |
pageInfo.endCursor |
string | null | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"lang": {
"type": "string"
},
"createdAt": {
"type": "string"
},
"pageUrl": {
"type": "string"
},
"companies": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"id",
"title",
"lang",
"createdAt",
"pageUrl",
"companies"
],
"additionalProperties": false
}
},
"pageInfo": {
"type": "object",
"properties": {
"hasNextPage": {
"type": "boolean"
},
"endCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"hasNextPage",
"endCursor"
],
"additionalProperties": false
}
},
"required": [
"items",
"pageInfo"
],
"additionalProperties": false
}
Read Document Sections
Tool name: read-document-sections
Annotations: readOnlyHint: true, openWorldHint: true
Read the actual content of specific sections from a document by their section numbers.
OUTPUT:
- Returns the combined markdown content of all requested sections
- Sections are retrieved based on the table of contents structure
- Each section includes its header and all content until the next section at same or higher level
WORKFLOW:
- search-companies → get companyId
- list-company-documents with companyId → browse documents (paginated)
- get-document with documentId → see sections/TOC
- read-document-sections with documentId + sectionNumbers → read content
EXAMPLE USAGE: To read sections 1, 2, and 5 from a document: {"documentId": "cmkb7r6fc0000s9lk8jwzdth2", "sectionNumbers": [1, 2, 5]}
Input
| Field | Type | Required | Description |
|---|---|---|---|
documentId |
string | yes | Document ID (from list-company-documents or get-content) |
sectionNumbers |
number[] | yes | Array of section numbers to read (from get-document or get-content sections) |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"documentId": {
"type": "string",
"description": "Document ID (from list-company-documents or get-content)"
},
"sectionNumbers": {
"minItems": 1,
"type": "array",
"items": {
"type": "number"
},
"description": "Array of section numbers to read (from get-document or get-content sections)"
}
},
"required": [
"documentId",
"sectionNumbers"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
companyIds |
string[] | yes | |
content |
string | yes | Combined markdown content of requested sections |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"companyIds": {
"type": "array",
"items": {
"type": "string"
}
},
"content": {
"type": "string",
"description": "Combined markdown content of requested sections"
}
},
"required": [
"companyIds",
"content"
],
"additionalProperties": false
}
Search Companies by Name
Tool name: search-companies
Annotations: readOnlyHint: true, openWorldHint: true
Search for companies by name (partial matches supported).
Use this first to get a companyId — most other tools require one.
Input
| Field | Type | Required | Description |
|---|---|---|---|
query |
string | yes | Company name to search for (partial matches supported) |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Company name to search for (partial matches supported)"
}
},
"required": [
"query"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
companies |
object[] | yes | Array of matching companies |
companies[].companyId |
string | yes | Company ID - use this for all other MCP tools |
companies[].name |
string | yes | Full company name |
companies[].regions |
string[] | yes | Regions where the company operates/is listed |
companies[].threadUrl |
string | null | yes | Forum thread URL for the company |
companies[].pageUrl |
string | null | yes | |
metadata |
object | yes | Minimal metadata about the response |
metadata.total |
number | yes | Total number of companies found |
metadata.generated_at |
string | yes | ISO timestamp when the search was performed |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"companies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"companyId": {
"type": "string",
"description": "Company ID - use this for all other MCP tools"
},
"name": {
"type": "string",
"description": "Full company name"
},
"regions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Regions where the company operates/is listed"
},
"threadUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Forum thread URL for the company"
},
"pageUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"companyId",
"name",
"regions",
"threadUrl",
"pageUrl"
],
"additionalProperties": false
},
"description": "Array of matching companies"
},
"metadata": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Total number of companies found"
},
"generated_at": {
"type": "string",
"description": "ISO timestamp when the search was performed"
}
},
"required": [
"total",
"generated_at"
],
"additionalProperties": false,
"description": "Minimal metadata about the response"
}
},
"required": [
"companies",
"metadata"
],
"additionalProperties": false
}
Search Forum Topics
Tool name: search-forum-topics
Annotations: readOnlyHint: true, openWorldHint: true
Search Inderes forum topic titles and return up to 10 matching threads.
Use this to find relevant thread URLs before calling get-forum-posts. This searches titles only, not post bodies. order controls ranking and defaults to relevancy.
Input
| Field | Type | Required | Description |
|---|---|---|---|
text |
string | yes | Search text to match against forum topic titles |
order |
"latest" | "likes" | "views" | "latest_topic" | "relevancy" |
yes | Ranking mode for matching topics. Defaults to relevancy |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"description": "Search text to match against forum topic titles"
},
"order": {
"default": "relevancy",
"description": "Ranking mode for matching topics. Defaults to relevancy",
"type": "string",
"enum": [
"latest",
"likes",
"views",
"latest_topic",
"relevancy"
]
}
},
"required": [
"text",
"order"
],
"additionalProperties": false
}
Output
| Field | Type | Required | Description |
|---|---|---|---|
topics |
object[] | yes | Up to 10 matching forum topics |
topics[].title |
string | yes | |
topics[].postsCount |
number | yes | |
topics[].replyCount |
number | yes | |
topics[].createdAt |
string | yes | |
topics[].lastPostedAt |
string | no | |
topics[].closed |
boolean | yes | |
topics[].archived |
boolean | yes | |
topics[].tags |
string[] | no | |
topics[].url |
string | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"topics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"postsCount": {
"type": "number"
},
"replyCount": {
"type": "number"
},
"createdAt": {
"type": "string"
},
"lastPostedAt": {
"type": "string"
},
"closed": {
"type": "boolean"
},
"archived": {
"type": "boolean"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"url": {
"type": "string"
}
},
"required": [
"title",
"postsCount",
"replyCount",
"createdAt",
"closed",
"archived",
"url"
],
"additionalProperties": false
},
"description": "Up to 10 matching forum topics"
}
},
"required": [
"topics"
],
"additionalProperties": false
}