Koskamo

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.

VertoDigital MCP Server logo, by VertoDigitalVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by VertoDigital
MCP endpoint (Streamable HTTP)
https://mcp.vertodigital.com/mcp
Vendor documentation

What its tools do

6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Can change data (1)

6 of 6 have a description · 6 of 6 declare behavior hints · 6 of 6 with parameters document them all

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

Vendor evidenceRegistry 2.0.0
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
Server-advertised capabilities
{
  "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 for vertodigital.com, a pipeline marketing agency for B2B technology companies and consumer services brands. Typical flow: vertodigital_get_value_proposition to match a buyer's challenge to services, proof points and differentiators; vertodigital_search_case_studies for client results; vertodigital_get_site_index to list or keyword-search every page, then vertodigital_get_page to read one as markdown; vertodigital_get_contact for who to talk to; vertodigital_send_enquiry to pass a user's enquiry or Pipeline Readiness Assessment request to the team. No listed tool needs authentication.

Tools

6 advertised

vertodigital_get_site_index
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

vertodigital_get_site_index input schema
{
  "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."
    }
  }
}
vertodigital_get_site_index output schema
{
  "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
}
vertodigital_get_site_index annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
vertodigital_get_page
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

vertodigital_get_page input schema
{
  "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."
    }
  }
}
vertodigital_get_page output schema
{
  "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
}
vertodigital_get_page annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
vertodigital_search_case_studies
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

vertodigital_search_case_studies input schema
{
  "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."
    }
  }
}
vertodigital_search_case_studies output schema
{
  "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
}
vertodigital_search_case_studies annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
vertodigital_get_contact
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

vertodigital_get_contact input schema
{
  "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."
    }
  }
}
vertodigital_get_contact output schema
{
  "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
}
vertodigital_get_contact annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
vertodigital_get_value_proposition
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

vertodigital_get_value_proposition input schema
{
  "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."
    }
  }
}
vertodigital_get_value_proposition output schema
{
  "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
}
vertodigital_get_value_proposition annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
vertodigital_send_enquiry
Advertised by the server during the last successful anonymous check.

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.

vertodigital_send_enquiry input schema
{
  "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"
    }
  }
}
vertodigital_send_enquiry output schema
{
  "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
}
vertodigital_send_enquiry annotations
{
  "readOnlyHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

2 advertised

site-index — VertoDigital site index

Advertised by the server during the last successful anonymous check.

Every VertoDigital page's URL and a one-line description, as markdown. Same content as vertodigital_get_site_index.

site-index URI
https://vertodigital.com/llms.txt

MIME type: text/markdown

openapi-spec — VertoDigital Agent API - OpenAPI 3.1 spec

Advertised by the server during the last successful anonymous check.

OpenAPI 3.1 spec for the anonymous, rate-limited REST surface: health check, contact enquiry, paginated case-study index and the anonymous identity acknowledgement.

openapi-spec URI
https://vertodigital.com/agent/openapi.json

MIME type: application/json

page — VertoDigital page

Advertised by the server during the last successful anonymous check.

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.

page URI template
https://vertodigital.com/markdown/{path}.md

MIME type: text/markdown

90-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.

Too few checks for a percentage yet (1 of 1 answered).

  1. 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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http vertodigital-mcp-server https://mcp.vertodigital.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add vertodigital-mcp-server --url https://mcp.vertodigital.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable vertodigital-mcp-server in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "vertodigital-mcp-server": {
      "url": "https://mcp.vertodigital.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "vertodigital-mcp-server": {
      "type": "streamableHttp",
      "url": "https://mcp.vertodigital.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start vertodigital-mcp-server and inspect its tools.
VS Code configuration
{
  "servers": {
    "vertodigital-mcp-server": {
      "type": "http",
      "url": "https://mcp.vertodigital.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http vertodigital-mcp-server https://mcp.vertodigital.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.vertodigital.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.

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.

Claim this listing