VertoDigital MCP Server
An official MCP server by VertoDigital that provides AI agents with tools to access the company's public documentation, search case studies, retrieve contact information, and submit marketing enquiries. It supports B2B marketing intelligence tasks such as finding agency fit, verifying value propositions, and initiating Pipeline Readiness Assessments without requiring authentication for basic read operations.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.vertodigital.com/mcpWhat its tools do
6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (5)
Can change data (1)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to vertodigital.com ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search for B2B marketing case studies by keyword
- Retrieve specific website pages as markdown content
- Submit a general enquiry or assessment request
- Get value proposition and differentiation reasons
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- com.vertodigital/mcp 3.2.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 6 advertised
- Resources
- 2 advertised
- Resource templates
- 1 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
6 advertised
vertodigital_get_site_index
Lists or searches every page on vertodigital.com. Without query, returns the site index as markdown: one link and a one-line summary per page, grouped under section headings such as Services, Industries, Case studies, Content Hub and Agent API (fetched live from /llms.txt, under 30 KB). With query, searches the title and summary of every page, including each blog post, event, ebook, video and case study from the full Content Hub and case-study indexes, and returns only the matching links grouped by section. Each link has the form https://vertodigital.com/<slug>.md, and <slug> is the input vertodigital_get_page expects. Use it to find a page; when you need what a client achieved (stats and outcomes), use vertodigital_search_case_studies instead, even for one named client, and to match a buyer's challenge to a service, use vertodigital_get_value_proposition. A page matches query when every word starts a word in its title or summary (case-insensitive, so "attribut" finds "attribution"); no match returns match_count: 0 with a hint, not an error. section narrows either mode to headings containing it, so section: "Services" with no query lists every service page; a section that matches nothing is ignored and section_found comes back false.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"query": {
"type": "string",
"description": "Keywords to search page titles and summaries site-wide, e.g. \"LinkedIn Ads\", \"AI search\", \"attribution\", \"Cribl\". Omit to list the index instead."
},
"section": {
"type": "string",
"description": "Section heading to list or filter to. Main index sections: \"Core pages\", \"Services\", \"Industries\", \"Case studies\", \"Content Hub\", \"How we compare\", \"Agent API\". With query, Content Hub and case-study subsections such as \"Blog\", \"Ebooks\" or \"Cybersecurity\" also match. Case-insensitive substring match against section headings. Omit for all sections."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"section",
"section_found",
"query",
"match_count",
"markdown"
],
"properties": {
"query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The search query that was applied, or null when the index was listed"
},
"section": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The section filter that was requested, or null for all sections"
},
"markdown": {
"type": "string",
"description": "The document as markdown - identical to the text content block."
},
"match_count": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
],
"description": "Number of matching pages when query was given, otherwise null"
},
"section_found": {
"type": "boolean",
"description": "True when the requested section matched a heading (or no section was requested); false when it matched nothing and was ignored"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}vertodigital_get_page
Fetches one vertodigital.com page as clean markdown, with navigation, footer and scripts left out: service pages, case studies, blog posts, ebooks, event recaps, legal pages and more. Use it once you know which page you want; find slugs with vertodigital_get_site_index, or take the case-studies/<slug> links from vertodigital_search_case_studies results. For contact details alone, vertodigital_get_contact with format: "summary" is cheaper. slug is forgiving: a bare path (case-studies/ironscales), a /markdown/<slug>.md path and a full vertodigital.com URL all resolve to the same page; letter case, a trailing slash, a .html or .md extension and any ?query or #fragment are ignored, and an empty slug returns the homepage. Fetched live on every call and returned whole, with no pagination: most pages are under 20 KB of markdown, the longest about 37 KB. An unknown slug returns an isError result pointing to vertodigital_get_site_index, never an exception, so guessing a slug is safe.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Page path without leading slash or extension. Examples: \"about\", \"services\", \"case-studies/ironscales\", \"services/inbound/b2b-and-saas-linkedin-advertising\". A full vertodigital.com URL or a /markdown/<slug>.md path is also accepted. Case-insensitive."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug",
"url",
"markdown"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical URL of the page on vertodigital.com"
},
"slug": {
"type": "string",
"description": "The normalised slug that was fetched"
},
"markdown": {
"type": "string",
"description": "The document as markdown - identical to the text content block."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}vertodigital_search_case_studies
Searches VertoDigital's full case-study library (mostly B2B technology clients in cybersecurity, data platforms, FinTech, GTM SaaS, cloud infrastructure and more, plus consumer services brands in lending and education) and returns the matching case studies as markdown, grouped under their industry headings. Each match is one line: the headline result as a link of the form https://vertodigital.com/markdown/case-studies/<slug>.md (pass it to vertodigital_get_page for the full write-up), then a one-sentence summary naming the client, what was done (including the CRM or platform, such as HubSpot, Salesforce or Marketo, where it mattered) and the results. Use it to find a specific client, or every result in an industry, channel or tool; to find other kinds of pages (services, blog posts, events), use vertodigital_get_site_index, and for a short, curated set of flagship proof points tied to a buyer's challenge, use vertodigital_get_value_proposition with aspect: "proof_points" instead. A case study matches when every word of query starts a word in its title, summary or industry heading (case-insensitive, so "attribut" finds "attribution" and "LinkedIn fintech" finds LinkedIn work for FinTech clients), so one or two keywords find more than a sentence; no match returns match_count: 0 with a hint, not an error. Omit query for the whole library page (roughly 10 KB). Fetched live on every call.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"query": {
"type": "string",
"description": "One or two keywords: client name, industry, service, tool, or outcome. Examples: \"cybersecurity\", \"LinkedIn\", \"SnapLogic\", \"HubSpot\", \"pipeline\", \"SEO\". Omit to return the full list of case studies."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query",
"markdown"
],
"properties": {
"query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The filter keyword that was applied, or null for the full list"
},
"markdown": {
"type": "string",
"description": "The document as markdown - identical to the text content block."
},
"match_count": {
"type": "number",
"description": "Number of matching case studies - present when query was given"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}vertodigital_get_contact
Returns who to contact at VertoDigital and how: the named growth lead, their email and LinkedIn, the reply-time commitment and the contact-form URL. Use it when a user asks how to reach the team or who to talk to. To send a message on the user's behalf, use vertodigital_send_enquiry instead; for any other page, use vertodigital_get_page. Pick format by what the user needs: "summary" when you only need to pass on a name, email or link, since it comes from a fixed record inside the server and is instant; the default "full" when they want to see the contact form fields or the ways to message the team, since it fetches the live /contact page. If that live fetch fails, the tool returns the summary record instead of an error, with format: "summary" and a note saying so.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"format": {
"enum": [
"summary",
"full"
],
"type": "string",
"description": "\"summary\": structured object (name, title, location, email, LinkedIn, response SLA, contact form URL). \"full\" (default): the /contact page as markdown."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"format"
],
"properties": {
"note": {
"type": "string",
"description": "Present when \"full\" was requested but the live /contact page could not be fetched, so the summary record was returned instead"
},
"format": {
"enum": [
"summary",
"full"
],
"type": "string",
"description": "Which format was returned"
},
"contact": {
"type": "object",
"required": [
"contact_name",
"title",
"location",
"email",
"linkedin",
"response_sla",
"contact_form_url"
],
"properties": {
"email": {
"type": "string"
},
"title": {
"type": "string"
},
"linkedin": {
"type": "string"
},
"location": {
"type": "string"
},
"contact_name": {
"type": "string"
},
"response_sla": {
"type": "string"
},
"contact_form_url": {
"type": "string"
}
},
"description": "Present when format is \"summary\"",
"additionalProperties": false
},
"markdown": {
"type": "string",
"description": "The /contact page as markdown - present when format is \"full\""
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}vertodigital_get_value_proposition
Matches a buyer's challenge to VertoDigital's offer and returns up to three structured lists: services (which service fits, how it works, and a headline client result), proof_points (flagship case studies with headline stats and links) and differentiators (reasons clients choose VertoDigital, each backed by a fact). Use it to answer "can VertoDigital help with X" or "why VertoDigital"; to browse the full case-study library rather than the curated flagships, use vertodigital_search_case_studies. Matching runs against a curated keyword list inside the server, not the live site, so it is instant and deterministic. A full sentence works as a query, since an item matches when one of its keywords appears in it; a query that matches nothing returns empty lists rather than an error, so retry with a broader term such as "attribution". aspect limits the response to one list.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"query": {
"type": "string",
"description": "Plain-language challenge, topic, industry, or client name to filter by. Examples: \"we can't attribute our ad spend to pipeline\", \"SEO\", \"pricing\", \"SnapLogic\", \"more loan applications\". Omit to return everything unfiltered."
},
"aspect": {
"enum": [
"services",
"proof_points",
"differentiators"
],
"type": "string",
"description": "Narrow the response to one category: \"services\" (which VertoDigital service fits this challenge), \"proof_points\" (flagship case study stats), or \"differentiators\" (why clients choose VertoDigital). Omit to return all three."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"services": {
"type": "array",
"items": {
"type": "object",
"required": [
"service",
"service_page",
"pitch",
"proof"
],
"properties": {
"pitch": {
"type": "string",
"description": "One-paragraph description of how the service works"
},
"proof": {
"type": "object",
"required": [
"stat",
"client"
],
"properties": {
"stat": {
"type": "string"
},
"client": {
"type": "string"
}
},
"description": "Headline result and the client it came from",
"additionalProperties": false
},
"service": {
"type": "string",
"description": "Service name"
},
"service_page": {
"type": "string",
"description": "Path of the service page on vertodigital.com"
}
},
"additionalProperties": false
},
"description": "Matched services - present unless aspect narrows to another category"
},
"proof_points": {
"type": "array",
"items": {
"type": "object",
"required": [
"client",
"industry",
"service",
"stats",
"what_we_did",
"case_study_url"
],
"properties": {
"stats": {
"type": "array",
"items": {
"type": "string"
},
"description": "Headline results from the case study"
},
"client": {
"type": "string"
},
"service": {
"type": "string"
},
"industry": {
"type": "string"
},
"what_we_did": {
"type": "string"
},
"case_study_url": {
"type": "string",
"description": "Full URL of the case study"
}
},
"additionalProperties": false
},
"description": "Matched flagship case-study proof points - present unless aspect narrows to another category"
},
"differentiators": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"description",
"proof"
],
"properties": {
"proof": {
"type": "string",
"description": "The stat or fact backing this differentiator"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "Matched reasons clients choose VertoDigital - present unless aspect narrows to another category"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}vertodigital_send_enquiry
Sends a message from a user to the VertoDigital team and returns a reference ID. The message lands in the team's CRM and inbox, and the team replies to fromEmail, normally within one business day. Use it for service questions, partnerships, press and careers, or to request the free Pipeline Readiness Assessment: set topic: "assessment" and put the company and main pipeline challenge in message. If the user only wants contact details, use vertodigital_get_contact instead. Call it only with the user's consent, using their real name and email. Pass organization whenever the user names their company; it is saved as the company on the CRM record. Every call creates a new enquiry, so do not retry a call that succeeded. Calls are rate-limited: over the limit, the tool returns an isError result with a retry delay in seconds. No authentication required.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"fromName",
"fromEmail",
"message"
],
"properties": {
"topic": {
"enum": [
"assessment",
"services",
"partnership",
"press",
"careers",
"general"
],
"type": "string",
"description": "\"assessment\": request the free Pipeline Readiness Assessment. \"services\": questions about working with VertoDigital. \"partnership\", \"press\", \"careers\": as named. \"general\" (default): anything else."
},
"message": {
"type": "string",
"maxLength": 2000,
"minLength": 10,
"description": "The enquiry itself, 10 to 2000 characters"
},
"fromName": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Full name of the person sending the enquiry"
},
"fromEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 254,
"description": "Email address the team should reply to"
},
"organization": {
"type": "string",
"maxLength": 100,
"description": "Company or organization name, saved as the company on the CRM record"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"status",
"reference",
"message"
],
"properties": {
"status": {
"type": "string",
"const": "accepted"
},
"message": {
"type": "string"
},
"reference": {
"type": "string",
"description": "Reference ID for the enquiry"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"idempotentHint": false,
"destructiveHint": false
}Prompts
Not advertised
Resources
2 advertised
site-index — VertoDigital site index
Every VertoDigital page's URL and a one-line description, as markdown. Same content as vertodigital_get_site_index.
https://vertodigital.com/llms.txtopenapi-spec — VertoDigital Agent API - OpenAPI 3.1 spec
OpenAPI 3.1 spec for the anonymous, rate-limited REST surface: health check, contact enquiry, paginated case-study index and the anonymous identity acknowledgement.
https://vertodigital.com/agent/openapi.jsonpage — VertoDigital page
Any VertoDigital page as markdown, addressed by its URL slug. Same content as vertodigital_get_page - use vertodigital_get_site_index or the site-index resource to find slugs.
https://vertodigital.com/markdown/{path}.md90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 518 ms
- 95th percentile latency
- 518 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 518 ms · metadata changed · 6 tool(s), 2 resource(s), 1 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http vertodigital-mcp-server https://mcp.vertodigital.com/mcpCodex
codex mcp add vertodigital-mcp-server --url https://mcp.vertodigital.com/mcpCursor
{
"mcpServers": {
"vertodigital-mcp-server": {
"url": "https://mcp.vertodigital.com/mcp"
}
}
}Cline
{
"mcpServers": {
"vertodigital-mcp-server": {
"type": "streamableHttp",
"url": "https://mcp.vertodigital.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"vertodigital-mcp-server": {
"type": "http",
"url": "https://mcp.vertodigital.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http vertodigital-mcp-server https://mcp.vertodigital.com/mcpClaude Desktop
https://mcp.vertodigital.com/mcpWindsurf
{
"mcpServers": {
"vertodigital-mcp-server": {
"serverUrl": "https://mcp.vertodigital.com/mcp"
}
}
}Let your agent find its tools
Find servers like VertoDigital MCP Server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other crm, sales, and marketing servers
Do you run VertoDigital MCP Server?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.