Vainu MCP Server
Connect AI assistants to Vainu's Nordic company data via the Model Context Protocol (MCP).
A Model Context Protocol (MCP) server for Vainu that enables AI assistants to search companies, retrieve company context, discover relevant fields and event types (via list_organization_fields and get_event_types_reference with skills), and perform document search across Nordic company data.
Getting Started
Via Vainu (Production)
- Complete the guided OAuth login flow to connect your Vainu account.
- Confirm with your Vainu contact person that you have the necessary permissions:
- Vainu country databases you need
- Vainu MCP permission
- Vainu Discovery Agent
- Vainu API (API access - Standard)
- Enter the MCP server URL into your client:
https://mcp.vainu.ai/mcp
Claude
Go to Settings → Connectors → Add MCP Server, and enter the server URL https://mcp.vainu.ai/mcp.
Gemini CLI
Add the following to ~/.gemini/settings.json:
{
"mcpServers": {
"vainu": {
"url": "https://mcp.vainu.ai/mcp"
}
}
}Microsoft Palantir Foundry (and similar OAuth-based platforms)
For platforms like Palantir Foundry that require explicit OAuth credentials instead of an interactive login flow, use the client credentials method. This is confirmed to work with Foundry's MCP connector.
Step 1: Create an OAuth Application in Vainu
- Go to vainu.app/settings/api-access/ and click Create Application.
- Copy the Client Secret immediately after creation — it will not be shown again.
- Detailed instructions with screenshots: developers.vainu.com/v3/docs/client-credentials-authentication
Step 2: Configure the MCP Connection in Foundry
In Foundry's Edit Connection dialog (Tools section), enter the following:
| Field | Value |
|---|---|
| Remote MCP Server Endpoint | https://mcp.vainu.ai/mcp |
| Client ID | (created at vainu.app/settings/api-access/) |
| Client Secret | (created at vainu.app/settings/api-access/) |
| Token URL | https://api.vainu.io/api/oauth/token/ |
| Auth URL | https://api.vainu.io/api/oauth/authorize/ |
| Scopes | vainu:api (can also be left empty) |
| Refresh URL | (leave empty) |
After saving the connection, attach it to your Foundry agent.
Other MCP-compatible clients
Any client that supports HTTP/SSE transport and OAuth 2.0 can connect. The server uses OAuth 2.0 with PKCE for secure authentication. Clients discover OAuth endpoints at:
/.well-known/oauth-authorization-server(OAuth discovery)/authorize(authorization)/token(token exchange, including refresh)/auth/callback(OAuth callback handler)
Features
AI-Powered Suggestions
- Get Event Types Reference: Return the canonical event types list for the event-type-selection skill. Use with the skill to pick event type IDs that match the user's intent. Pass those IDs to
get_signals_news(tags) orget_company_context(leads).
Company Data
- Search Companies: Simple search by business ID, domain, or company name. Supports databases: FI, SE, NO, DK.
- Advanced Company Search (VQL): Build and execute complex queries using Vainu Query Language (VQL).
get_query_reference: Learn VQL syntax.search_filter_values: Find valid industry codes, technologies, and other filter values.search_address_filter_values: Find valid city, municipality, and region names.validate_query: Validate your VQL query before execution.query_organizations: Execute the query to find companies.
- Get Company Context: Retrieve comprehensive company context including:
- Database fields (configurable via
list_organization_fields; see organization-field-selection skill) - Website content
- Financial statements
- Leads (event type IDs from
get_event_types_referenceand the event-type-selection skill) - Documents: budget, job_postings, meetings, financial_statement (with vector search)
- Database fields (configurable via
Metadata Discovery
- List Organization Fields: Discover available company fields, their metadata (type, description), and filter capabilities.
Document Search
- Document Search: Vector search across document types with filters for:
- Content classes: announcements, blog, budget, cases, decision_maker_profile, esg_report, events, financial_statement, job_posting, meetings, news, other, post, publications, regulatory, remiss
- Date range (
since) - Countries
- Business IDs (optional)
- Multiple search prompts (optional)
Examples
- Company search and context:
- "Search for companies named Nokia in Finland"
- "Find companies with domain nokia.com"
- "Get context for business ID FI1234567-8 including their website content and financials"
- "What fields should I look at when researching companies for a sales campaign?"
- Advanced Search (VQL):
- "Find all SaaS companies in Helsinki with turnover > 1M" (Agent would: search industry/tech codes → build query → validate → execute)
- "How do I query for companies using 'React' technology?" (Agent uses
get_query_referenceandsearch_filter_values)
- Event and lead discovery:
- "What event types are relevant for companies doing layoffs in Norway?"
- "Suggest event types for a prompt about new product launches in Sweden"
- Document search:
- "Find budget documents and meeting minutes for companies in Denmark"
- "What ESG reports or regulatory documents mention sustainability in Norway?"
API Reference
Endpoints
| Endpoint | Method | Description |
|---|---|---|
/mcp | POST | Main MCP protocol endpoint for tool invocations |
Tools
get_event_types_reference
get_event_types_referenceReturn the canonical event types reference for the event-type-selection skill. Use with the skill to pick event type IDs that match the user's intent. Pass those IDs to get_signals_news (tags) or get_company_context (leads).
Parameters:
| Parameter | Required | Type | Description |
|---|---|---|---|
country | No | string | 2-letter country code (FI, SE, NO, DK). When set, only event types available in that country are returned. |
include_descriptions | No | boolean | When true, each event type includes what_it_means and use_cases from the event-type-selection skill. Default: false |
Returns: list[object] – Each object has id, label, category, databases. Empty databases = available in all countries. If include_descriptions is true, each object also has what_it_means and use_cases.
list_organization_fields
list_organization_fieldsDiscover which company (organization) fields exist and their metadata. Call this before building a query or requesting company context to choose valid field names.
Parameters:
| Parameter | Required | Type | Description |
|---|---|---|---|
search | No | string | Optional search term; matches description and translated labels. |
main_category | No | string | Filter by main_category (e.g. "basic", "financials"). |
sub_category | No | string | Filter by sub_category (e.g. "main_location", "identification"). |
countries | No | string[] | Filter to fields available in any of these countries (e.g. ["FI", "SE"]). |
application_availability | No | string[] | Filter to fields available in "export", "profile", "connector", or "filter". |
filterable_only | No | boolean | If true, return only fields that can be used in VQL filters. |
limit | No | number | Maximum number of fields to return (1–500). Default: 100. |
Returns: list[dict] – List of field metadata objects (path, type, description, etc.)
search_companies
search_companiesSearch the Vainu database for companies by business ID, domain, or company name.
Parameters:
| Parameter | Required | Type | Description |
|---|---|---|---|
search | Yes | string | Search term – business ID, domain, or company name (e.g. "nokia.com", "FI12345678") |
database | No | string | Database identifier. One of "FI", "SE", "NO", "DK". Default: "FI" |
limit | No | number | Maximum number of results to return (1–100). Default: 20 |
Returns: list[object] – List of companies
get_company_context
get_company_contextRetrieve comprehensive company context including database fields, website content, financial statements, leads, and documents. Uses vector search for document types.
Parameters:
| Parameter | Required | Type | Description |
|---|---|---|---|
database | Yes | string | Database identifier (e.g. "FI", "SE", "NO", "DK") |
business_id | Yes | string | Business identifier (e.g. "FI123...") |
fields | Yes | string[] | List of company field paths (api.v3.path) to include. Use list_organization_fields to get valid paths; see organization-field-selection skill |
website_content | Yes | boolean | Include the company's website text in the context |
financial_statement | Yes | boolean | Include the latest available financial statement |
leads | No | number[] | List of lead/event type IDs (use get_event_types_reference and event-type-selection skill) |
documents | No | string[] | Document types to include. See Document Types below |
Document Types (for documents parameter):
| Value | Description |
|---|---|
budget | Cities budget documents |
job_posting | Job positions they are looking to fill |
meetings | Meeting minutes |
financial_statement | Companies financial statements |
Returns: string – Company context information
document_search
document_searchVector search across document types with filters for content classes, date range, countries, and business IDs.
Parameters:
| Parameter | Required | Type | Description |
|---|---|---|---|
prompt | Yes | string | Search prompt |
content_classes | Yes | string[] | Content classes to search in. See Content Classes below |
since | Yes | string (datetime) | Search for documents since this datetime (ISO format) |
limit | Yes | number | Maximum number of results to return (1–100) |
countries | Yes | string[] | Country codes to filter by |
business_ids | No | string[] | Filter by business IDs. Default: [] |
search_prompts | No | string[] | Search prompts. Defaults to [prompt] if not provided |
Content Classes (for content_classes parameter):
| Value | Description |
|---|---|
announcements | Announcements |
blog | Blog posts |
budget | Budget documents |
cases | Case studies |
decision_maker_profile | Decision maker profiles |
esg_report | ESG reports |
events | Events |
financial_statement | Financial statements |
job_posting | Job postings |
meetings | Meeting minutes |
news | News |
other | Other |
post | Posts |
publications | Publications |
regulatory | Regulatory documents |
remiss | Remiss documents |
Returns: object – Search results
get_query_reference
get_query_referenceGet VQL (Vainu Query Language) reference documentation. Call this before constructing a company query to learn the syntax, operators, and see examples.
Parameters: None
Returns: string – VQL reference documentation
search_filter_values
search_filter_valuesSearch for allowed VQL filter values by keyword (industry codes, custom industries, legal entities, technologies).
Parameters:
| Parameter | Required | Type | Description |
|---|---|---|---|
value_type | Yes | string | Type of filter values: "industries", "vainu_custom_industry", "legal_entity", "technology" |
query | Yes | string | Search term to match against labels or codes |
country | Yes | string | Country/database code (e.g. FI, SE, NO, DK). Required for industries. |
locale | No | string | Locale for labels (e.g. "en", "fi", "sv"). Default: "en" |
limit | No | number | Max results. Default: 20 |
offset | No | number | Results to skip. Default: 0 |
Returns: list[dict] – List of matching entries with codes/values/IDs and labels
search_address_filter_values
search_address_filter_valuesGet address filter value options for VQL (cities, municipalities, postal_codes, regions).
Parameters:
| Parameter | Required | Type | Description |
|---|---|---|---|
country | Yes | string | 2-letter country code (FI, SE, DK, NO) |
category | No | string | "cities", "municipalities", "postal_codes", or "regions". If omitted, returns all. |
query | No | string | Substring to filter by name. |
limit | No | number | Max items per category. Default: 20 |
offset | No | number | Items to skip. Default: 0 |
Returns: dict – Dict with lists of address options
validate_query
validate_queryValidate a company query before using it with query_organizations.
Parameters:
| Parameter | Required | Type | Description |
|---|---|---|---|
database | Yes | string | Database identifier (e.g. "FI", "SE", "NO", "DK") |
company_query | Yes | object | Company query object to validate (e.g. {"?ALL": [...]}) |
Returns: dict – Validation result (valid: boolean, error: string, etc.)
query_organizations
query_organizationsQuery organizations from the Vainu API using a VQL query object.
Parameters:
| Parameter | Required | Type | Description |
|---|---|---|---|
query | Yes | object | Query object (e.g. {"?ALL": [{"?IN": {...}}]}) |
database | Yes | string | Database identifier (e.g. "FI", "SE", "NO", "DK") |
fields | Yes | string[] | List of field paths to return. Use list_organization_fields to get valid paths (api.v3.path); see organization-field-selection skill. |
order | No | string | Sort order (e.g. "-vainu_score", "company_name"). Default: "-vainu_score" |
limit | No | number | Max results. Default: 10 |
offset | No | number | Results to skip. Default: 0 |
Returns: list[dict] – List of companies with requested fields