Server definition
- Hash
- sha256:75598232644a9b367bc880ab631972b0622fd755b6b0b07bb6fa6543ea93b569
- What it is
- What a remote MCP server returned when asked what it offers: 7 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "AI-powered company analysis using semantic search over Nordic financial data.\n\nOrchestrates multiple searches internally and returns a synthesized narrative\nanswer with source citations. Covers annual reports, quarterly reports, press\nreleases and macroeconomic context for Nordic listed companies.\n\nUse this when you want a synthesized answer rather than raw search chunks.\nFor raw data access, use search_filings or company_research instead.\nFor a full due diligence report with AI-planned sections, use the Alfred MCP\nserver: alfred.aidatanorge.no/mcp\n\nArgs:\n company: Company name or ticker\n question: What you want to know about the company",
"inputSchema": {
"additionalProperties": false,
"properties": {
"company": {
"description": "Company name or ticker, e.g. 'Equinor' or 'EQNR'",
"type": "string"
},
"question": {
"description": "Question to answer, e.g. 'How did margins develop 2022-2024?' or 'What are the main risk factors?'",
"type": "string"
}
},
"required": [
"company",
"question"
],
"type": "object"
},
"name": "analyze_company",
"outputSchema": {
"description": "Generic wrapper for non-object return types.",
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Run multiple targeted searches and return raw results grouped by section.\n\nThe caller defines all sections and queries — this tool does not decide what is\nrelevant. Before calling, reason about which topics and data sources matter for\nthis specific company: financial metrics, risk factors, sector-specific macro\ndrivers (e.g. freight rates for shipping, power prices for aluminium smelters),\nrecent press releases, peer context, etc. Formulate one query per section.\n\nEach query is run independently as a full hybrid search (dense + sparse + rerank).\nResults are raw chunks — the caller is responsible for synthesis.\n\nFor a fully orchestrated due diligence report (AI-planned sections, synthesized\nnarrative), use the Alfred MCP server instead: alfred.aidatanorge.no/mcp\n\nIMPORTANT — use 'ticker' on company-specific sections to avoid false positives.\nWithout a ticker filter, documents that merely mention the company (e.g. as a\ncustomer or competitor) can rank above actual filings from that company. Omit\n'ticker' only for sections where cross-company results are intentional, such as\nsector macro context or peer comparisons.\n\nArgs:\n company: Company name, used for metadata only (not a filter).\n sections: Up to 8 sections. Example:\n [\n {\"name\": \"financials\", \"query\": \"Equinor revenue EBITDA operating profit 2024\", \"ticker\": \"EQNR\"},\n {\"name\": \"risk\", \"query\": \"Equinor climate regulatory risk stranded assets\", \"ticker\": \"EQNR\"},\n {\"name\": \"macro\", \"query\": \"Brent crude oil price energy sector Norway 2024\", \"limit\": 3},\n {\"name\": \"news\", \"query\": \"Equinor press release dividend acquisition 2024\", \"ticker\": \"EQNR\"}\n ]\n\nReturns:\n Dict with 'company', 'generated_at', and 'sections' — one entry per requested\n section with its name and results (same format as search_filings).\n Sections with no results return an empty list.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"company": {
"description": "Company name to research, e.g. 'Equinor', 'Norsk Hydro', 'Aker BP'",
"type": "string"
},
"sections": {
"description": "List of section dicts. Each must have 'name' (str) and 'query' (str). Optional: 'ticker' (str, filters results to that company), 'limit' (int, default 5, max 10). Maximum 8 sections.",
"items": {},
"type": "array"
}
},
"required": [
"company",
"sections"
],
"type": "object"
},
"name": "company_research",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Look up a company in the official business registry for Norway, Denmark or Finland.\n\nUse this to retrieve authoritative registration data (legal name, status, address)\nfor a known organisation number. Do not use for Sweden (SE) — use search_filings\nwith country='SE' instead, as Bolagsverket integration is not yet available.\nDo not use to discover tickers or ISIN codes — use search_filings for that.\n\nArgs:\n identifier: Organisation/business/CVR number. Format varies by country:\n NO: 9-digit organisation number, e.g. 923609016 (Equinor)\n DK: 8-digit CVR number, e.g. 22756214 (Maersk)\n FI: Business ID with hyphen, e.g. 0112038-9 (Nokia)\n country: Two-letter country code: 'NO' (default), 'DK', or 'FI'.\n\nReturns:\n Dict with company name, status and registered business address.\n Returns {'error': '<message>'} if the company is not found, the identifier\n format is invalid, or the upstream registry API is unavailable.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"country": {
"default": "NO",
"description": "Two-letter country code: NO (default), DK, or FI",
"type": "string"
},
"identifier": {
"description": "Organisation number (NO: 9 digits, DK: 8 digits CVR, FI: business ID with hyphen)",
"type": "string"
}
},
"required": [
"identifier"
],
"type": "object"
},
"name": "get_company_info",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Fetch today's hourly day-ahead electricity spot prices for a Nordic bidding zone.\n\nUse this for current and near-term (today/tomorrow) price queries. Do not use\nfor historical price analysis — use search_filings with report_type='macro_summary'\nand a date reference in the query for that purpose.\nTomorrow's prices are published by NordPool around 13:00 CET; requests before\nthat time will return \"not yet available\" for the tomorrow field.\n\nAll zones return prices in EUR/kWh (NordPool day-ahead, native currency).\nNorwegian zones (NO1–NO5) use hvakosterstrommen.no; all other zones use ENTSO-E.\n\nArgs:\n zone: Bidding zone code. Options:\n NO1 (East/Oslo), NO2 (Southwest), NO3 (Central/Trondheim),\n NO4 (North), NO5 (West/Bergen),\n SE1–SE4, DK1, DK2, FI.\n include_tomorrow: Set to True to also fetch tomorrow's hourly prices if\n already published (default False).\n\nReturns:\n Dict containing zone, date, current_hour_utc, current price, and a 'today'\n summary with min/max/avg and the full hourly list. Includes a 'tomorrow'\n key if include_tomorrow=True. Returns {'error': '<message>'} if price data\n is unavailable for the requested zone or date.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"include_tomorrow": {
"default": false,
"description": "Also fetch tomorrow's prices if available (published after 13:00 CET)",
"type": "boolean"
},
"zone": {
"default": "NO1",
"description": "Bidding zone: NO1–NO5, SE1–SE4, DK1, DK2, or FI",
"type": "string"
}
},
"type": "object"
},
"name": "get_current_power_price",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Download a PDF from a URL and extract all text content, page by page.\n\nUse this to read the full text of a specific document — for example, an annual\nreport PDF linked from a search_filings result. Best combined with search_filings:\nuse search_filings to locate the document, then parse_pdf_to_text for the full text.\nDo not use for PDFs that are already well-represented in the database — search_filings\nis faster and returns pre-ranked, relevant excerpts.\nNot suitable for scanned (image-only) PDFs without embedded text; those pages\nwill be returned as \"(no extractable text)\".\n\nArgs:\n pdf_url: Direct HTTPS URL to the PDF file, e.g. https://example.com/report.pdf.\n Must be publicly accessible; authentication-protected URLs will fail.\n\nReturns:\n All text from the PDF with \"--- Page N ---\" separators between pages.\n Returns an error string if the download fails, the URL does not point to a\n valid PDF, or the document exceeds the 60-second download timeout.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"pdf_url": {
"description": "Direct HTTPS URL to the PDF file",
"type": "string"
}
},
"required": [
"pdf_url"
],
"type": "object"
},
"name": "parse_pdf_to_text",
"outputSchema": {
"description": "Generic wrapper for non-object return types.",
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Connectivity check that confirms the Nordic MCP server process is responding.\n\nUse this at the start of a session to verify the server is reachable before\nmaking other calls. Do not use as a proxy for database health — the server can\nrespond while the Qdrant vector database is temporarily unavailable. To confirm\ndata availability, call search_filings directly.\n\nReturns:\n A greeting string: \"Hello {name}! Nordic MCP server is running.\"",
"inputSchema": {
"additionalProperties": false,
"properties": {
"name": {
"default": "world",
"description": "Arbitrary label included in the response, e.g. 'healthcheck' or 'agent-1'",
"type": "string"
}
},
"type": "object"
},
"name": "ping",
"outputSchema": {
"description": "Generic wrapper for non-object return types.",
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Search the Nordic financial database for company filings, press releases\nand macroeconomic summaries.\n\nUse this as the primary tool for any question about Nordic listed companies,\nmarkets or macro conditions. Do not use to retrieve a full document — results\nare chunked text excerpts; use parse_pdf_to_text for the full original document.\nDo not use for Swedish company registration data — use get_company_info instead.\n\nThe database contains ~1 million vectors across four Nordic markets (NO/SE/DK/FI).\n\nCOMPANY FILINGS\n Annual reports (XBRL/ESEF) and quarterly reports from ~1 500 listed companies\n across Oslo Børs, Nasdaq Stockholm, Nasdaq Helsinki, Nasdaq Copenhagen and\n First North markets. Covers 2020–present. Strong coverage for NO and SE;\n growing coverage for DK and FI.\n\nEXCHANGE ANNOUNCEMENTS & PRESS RELEASES\n Regulatory filings, exchange announcements and press releases from listed\n companies in NO, SE, DK and FI. Covers 2020–present.\n\nMACROECONOMIC SUMMARIES\n Quarterly macro summaries covering key indicators per country:\n Norway (NO): policy rate, FX rates, CPI, house prices, credit growth,\n electricity price, salmon price, GDP components\n Sweden (SE): policy rate, house price index, household credit\n Denmark (DK): policy rate, house price index, household loans,\n electricity price\n Finland (FI): house price index, household debt-to-income ratio,\n electricity price\n Use report_type='macro_summary' and country='NO'/'SE'/'DK'/'FI' to filter.\n Use fiscal_year and a quarter reference in your query, e.g.\n \"Norwegian housing market Q1 2024\".\n\nArgs:\n query: What you are looking for, e.g. 'net interest margin outlook',\n 'salmon price Q3', 'dividend policy', 'fleet utilization',\n 'Norwegian housing market 2024 Q1',\n 'Swedish policy rate inflation 2023'\n ticker: Optional — filter by company ticker, e.g. 'SALM', 'EQNR', 'NDA'\n fiscal_year: Optional — filter by year, e.g. 2024\n report_type: Optional — one of:\n 'annual_report' – Nordic XBRL/ESEF annual reports\n 'quarterly_report' – Quarterly/interim reports\n 'press_release' – Exchange announcements and press releases\n 'macro_summary' – Quarterly macroeconomic summaries\n sector: Optional — filter by sector:\n 'seafood' – seafood companies\n 'energy' – energy / oil & gas\n 'shipping' – shipping companies\n country: Optional — filter by country code: 'NO', 'SE', 'DK' or 'FI'\n limit: Number of results after reranking (default 5, max 20)\n\nReturns:\n List of relevant text excerpts with metadata, reranked by relevance.\n Each result includes rerank_score, hybrid_score, vector_score, company,\n ticker, country, fiscal_year, report_type, period, filing_date and the\n full text chunk. Returns an empty list if no relevant results are found\n or if the Qdrant database is temporarily unreachable.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"country": {
"default": "",
"description": "Filter by country: NO, SE, DK, or FI",
"type": "string"
},
"fast": {
"default": false,
"description": "Skip reranking and return results ranked by hybrid score only. Faster but less precise.",
"type": "boolean"
},
"fiscal_year": {
"default": 0,
"description": "Filter by fiscal year, e.g. 2024. Use 0 for no filter",
"type": "integer"
},
"limit": {
"default": 5,
"description": "Number of results to return (1–20)",
"type": "integer"
},
"max_chunk_index": {
"default": 0,
"description": "Only return chunks with chunk_index <= this value. Use 3 to target introductory sections of long documents. Use 0 for no filter.",
"type": "integer"
},
"query": {
"description": "Natural language search query, e.g. 'Equinor dividend 2024' or 'Norwegian housing market Q3'",
"type": "string"
},
"report_type": {
"default": "",
"description": "Filter by type: annual_report, quarterly_report, press_release, exchange_announcement, macro_summary",
"type": "string"
},
"sector": {
"default": "",
"description": "Filter by sector, e.g. 'energy', 'financials', 'salmon'",
"type": "string"
},
"source": {
"default": "",
"description": "Filter by data source, e.g. 'xbrl_esef', 'newsweb', 'mfn_nordics', 'nasdaq_se'",
"type": "string"
},
"ticker": {
"default": "",
"description": "Filter by company ticker, e.g. 'EQNR', 'SALM', 'NDA'",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_filings",
"outputSchema": {
"description": "Generic wrapper for non-object return types.",
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:75598232644a9b367bc880ab631972b0622fd755b6b0b07bb6fa6543ea93b569 | sha256sum