Inderes MCP

Tool Reference

The Inderes MCP server exposes 16 tools. All are read-only.

Contents


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):

OUTPUT:

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:

  1. search-companies → get companyId
  2. list-company-documents with companyId → browse documents (paginated)
  3. get-document with documentId → see sections/TOC
  4. 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:

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.

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:

  1. search-companies → get companyId
  2. list-company-documents with companyId → browse documents (paginated)
  3. get-document with documentId → see sections/TOC
  4. 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:

WORKFLOW:

  1. search-companies → get companyId
  2. list-company-documents with companyId → browse documents (paginated)
  3. get-document with documentId → see sections/TOC
  4. 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
}