Marketingburos
Server Details
Search and compare 2,000+ Dutch marketing agencies by specialism, city and cases. Never pay-to-rank.
- Status
- Healthy
- Uptime
- 100.0% over 24 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: find_agency resolves by name/domain, search_agencies filters by criteria, get_agency_profile fetches a full profile, and submit_rfq sends a request. The descriptions explicitly cross-reference each other and tell agents when to use one over the other, so misselection is unlikely.
All tool names follow a consistent imperative verb_noun snake_case pattern: find_agency, get_agency_profile, search_agencies, submit_rfq. Even though find and search are semantically similar, the naming convention is uniform and predictable.
With 4 tools, the server is tightly scoped to its purpose: finding an agency, viewing its profile, searching by criteria, and submitting an RFQ. Each tool has a clear role and none feel redundant.
The discovery-to-contact workflow is well covered: search, lookup, profile detail, and RFQ submission. Minor gaps exist, such as no pagination for search results or no way to list all agencies, but agencies are read-only external entities and the core journey is complete.
Available Tools
4 toolsfind_agencyAInspect
Look up one specific agency by trade name, statutory name or domain (e.g. name='Yourcrew' or domain='yourcrew.online') to get its slug for get_agency_profile. Returns up to 10 candidates with public trade name (name), legal_name when the statutory name differs, city and domain. Returns isError with {error:'invalid_input'} when neither name nor domain is given. For ranked agency recommendations by criteria use search_agencies.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Optional city to narrow candidates. | |
| name | No | Trade or statutory name (fuzzy), e.g. 'Yourcrew'. Provide name and/or domain. | |
| limit | No | Max candidates (1-10, default 5). | |
| domain | No | Website domain, e.g. 'yourcrew.online'. Provide name and/or domain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations, the description carries the full burden. It discloses the output shape (up to 10 candidates with name, legal_name, city, domain), the error response format, and the purpose of the return (slug consumption). It does not mention permissions, rate limits, or side effects, but this is a lookup tool and those details are not critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses three sentences that all earn their place: purpose, output, error condition, sibling pointer. It is denser than necessary but not padded, and avoids repeating parameter descriptions already in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must cover the return contract and it does. It covers error cases, candidate fields, the relationship to get_agency_profile, and reminds of the alternative. Missing bits are minor (e.g., default limit/value range is schema-covered, not description-critical).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description adds meaning beyond the schema: it clarifies the name/domain mutual requirement (neither given -> error), that 'name' accepts either trade or statutory name, and the domain format. Even with a baseline of 3, the additional context nudges it to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (find/look up) and a specific resource (one agency) with concrete identifiers (trade name, statutory name, domain). It explicitly contrasts with search_agencies (ranked recommendations) and get_agency_profile (consumer of the slug), so an agent can instantly tell it apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Directs when to use: when you need a specific agency's slug, and when not to (search_agencies for ranked recommendations). It also states the requirement that name or domain must be provided, and the condition that triggers an invalid_input error.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agency_profileAInspect
Fetch the full public profile of one marketing agency by slug (from search_agencies or find_agency). Includes specialisms, cultural-fit axes and up to 3 cases; cultural-fit and cases are read-only (Knowledge-OS canonical). Returns isError with {error:'not_found'} when the slug does not exist or the agency opted out of MCP.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Agency slug as returned by search_agencies or find_agency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the error case (returns isError with {error:'not_found'} when slug is invalid or agency opted out) and notes that cultural-fit and cases are read-only (Knowledge-OS canonical). This provides useful behavioral context beyond the simple 'fetch' action, though it stops short of describing success response structure in detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary purpose and key source of input, followed by the error behavior and read-only note. No extraneous words; every sentence earns its place. This is a model of brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description sufficiently communicates the expected content (specialisms, cultural-fit axes, up to 3 cases) and error behavior. It does not explicitly state the shape of the success response (e.g., an object with those fields), but for a single-parameter read operation this is a reasonable level of completeness. Slightly more detail on the return structure would push it to a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the single parameter (slug) with its source and constraints (100% coverage). The description adds no novel information about the slug itself beyond repeating the source of the slug. Since the schema does the heavy lifting, a baseline score of 3 is appropriate; the description's mention of what the profile includes is relevant to output, not the parameter's meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch the full public profile') and the resource ('one marketing agency by slug'), and it distinguishes itself from siblings by specifying the source of the slug (from search_agencies or find_agency). This makes it unambiguous which tool to use when a slug is already known.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the appropriate usage: obtain a slug via search_agencies or find_agency, then call this tool to get the full profile. It does not explicitly state when not to use it or mention alternatives like submit_rfq, but the context is sufficient for an agent to understand the intended workflow. A clear 'use this after you have a slug' signal would be stronger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_agenciesAInspect
Search Dutch marketing agencies by specialisms, target_industry (the client vertical the agency serves), city, B2B/B2C, company size, budget band and an optional radius (near_city = any Dutch city, or near_lat/near_lon, always combined with within_km in kilometres). specialisms filters strictly against the taxonomy; unrecognised terms are echoed in filters.specialisms.unmatched (all unknown → 0 results + hint). budget_band only excludes agencies with a known conflicting rate (see filters.budget_band.note). Returns up to 20 ranked agencies with slug (use in get_agency_profile), public trade name (name, plus legal_name when the statutory name differs), a 1-line rationale in Dutch, and totalMatched (hits before the limit). Ranking ignores what an agency pays (never pay-to-rank). Read the categories://list resource for valid values.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Exact office city of the agency. For 'near a city' use near_city + within_km instead. | |
| limit | No | Max results (1-20, default 10). | |
| near_lat | No | Center latitude of a radius search (alternative to near_city). Requires near_lon + within_km. | |
| near_lon | No | Center longitude of a radius search (alternative to near_city). Requires near_lat + within_km. | |
| near_city | No | Center of a radius search: any Dutch city name. Requires within_km. | |
| within_km | No | Radius in kilometres around near_city or near_lat/near_lon (max 250). Ignored without an origin; near_* is ignored without within_km. | |
| budget_band | No | Buyer's budget in EUR. Only excludes agencies whose known rates conflict; most agencies have no known rate. | |
| specialisms | No | Up to 5 specialism slugs from categories://list (e.g. 'seo', 'branding'). Unknown terms are echoed back in filters.specialisms.unmatched. | |
| target_industry | No | Client vertical the agency serves (e.g. the buyer's own industry). Not the agency's own sector. | |
| company_size_band | No | Size of the buyer's company (employees); matches agencies that target that segment. | |
| client_orientation | No | b2b or b2c focus of the agency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load. It discloses restricted specialism taxonomy with unmatched-term echoing, the budget_band non-blocking behavior, the 20-result cap, totalMatched, non-influenceable ranking, and the return rationale in Dutch. This is far beyond basic 'search' semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense rather than concise, but each sentence contributes a key behavioral note or parameter nuance. It front-loads the search function and enumerates filters before tying return fields together. It is longer than strictly necessary, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with no output schema, this description is remarkably complete: it documents the return fields, the ranking rule, the taxonomy constraint, the budget_band exception, the radius requirement, and the link to get_agency_profile. An agent could safely invoke the tool without access to any structured schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds meaning beyond the JSON schema fields: specialisms must come from categories://list taxonomy and unknown terms are echoed in filters, budget_band only excludes conflicting known rates, target_industry is buyer verticals, and near_* only works with within_km. These intended semantics materially affect agent behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb (
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context for when to use the tool and how: it's a discovery search returning slugs, and directs the agent to get_agency_profile for profile details. It also tells the agent to read categories://list for valid specialisms. It does not, however, explicitly state when not to use this tool and when to prefer find_agency, so it stops one step short of an explicit when-not/alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_rfqAInspect
Submit a Request For Quote (RFQ) on behalf of a buyer to 1-3 selected marketing agencies via marketingburos.nl. Input is the v1 wizard profile (specialisms, industry, company size, budget, timeline, ...) plus contact details and selectedAgencySlugs (slugs from search_agencies or find_agency). Nothing is sent to agencies automatically: the RFQ is queued and a human operator releases it. Success returns {rfqId, queuedAgencySlugs, notMatchableSlugs}: a selected agency that is not in the match pool for this buyer profile is skipped (listed in notMatchableSlugs), not an error, unless none remain. Failures return isError with one of: invalid_input (with issues[]), unknown_agency (with slugs[] that do not exist or cannot be contacted), rate_limit_ip / rate_limit_email (resetAt included when raised by this server), invalid / invalid_email / disposable_email (upstream validation), no_selection (no selected agency is in the match pool), upstream_failure.
| Name | Required | Description | Default |
|---|---|---|---|
| website | No | Leave empty. Anti-spam honeypot field. | |
| industry | Yes | Buyer's industry (a value from categories://list doelgroep_options, or 'Anders'). | |
| timeline | Yes | When the work should start. | |
| agencySize | Yes | Preferred agency size in employees. | |
| budgetBand | Yes | Buyer's budget in EUR. | |
| companySize | Yes | Buyer's company size in employees. | |
| contactName | Yes | Buyer's full name. | |
| culturalFit | Yes | Three 0-10 sliders: [data-driven, specialist, hands-on]. Use [5,5,5] when unknown. | |
| specialisms | Yes | 1-5 specialism slugs the buyer needs (see the categories://list resource). | |
| toelichting | No | Optional free-text brief for the agencies (Dutch or English). | |
| contactEmail | Yes | Buyer's business e-mail (no disposable domains). | |
| contactPhone | No | Optional phone number (digits, spaces, +, (), -). | |
| contactCompany | Yes | Buyer's company name. | |
| industryFreetext | No | Required only when industry is 'Anders': the buyer's industry in their own words. | |
| clientOrientation | No | Optional: does the buyer sell b2b, b2c or both. | |
| selectedAgencySlugs | Yes | 1-3 agency slugs (as returned by search_agencies or find_agency) the buyer wants to receive this RFQ. | |
| specialistFullServiceSlider | Yes | 0 = full-service agency, 10 = niche specialist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It openly states that nothing is sent automatically and that the RFQ is queued for a human operator. It details the success return structure ({rfqId, queuedAgencySlugs, notMatchableSlugs}) and explains that not-matching agencies are skipped rather than causing errors, unless none remain. It enumerates all failure modes with specific payloads (issues[], slugs[], resetAt) and even clarifies the honeypot field via the schema (though not in description—but the behavior is fully covered). This is exceptionally transparent about side effects and error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph but is exceptionally well-structured. It front-loads the core purpose, then explains queuing behavior, success returns, and failure modes in a logical order. Every sentence adds critical information — there is no fluff or repetition. The use of semicolons and lists keeps it readable despite its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 17 parameters (12 required), no output schema, and no annotations, the description covers what an agent needs to know: the success return shape, the not-matchable behavior, and all error paths with their associated payloads. It also ties in the prerequisite of agency slugs from sibling tools. It does not duplicate schema details, and it explains the queued/human-release nature which is critical for expectation setting. Nothing essential is missing for correct invocation and interpretation of results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage, so the baseline is 3. The description adds a high-level grouping ('v1 wizard profile') and references that selectedAgencySlugs come from sibling tools, but it does not add new meaning beyond what each parameter's schema description already provides. It does not clarify any nuanced formats or interactions beyond the schema, so it stays at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Submit a Request For Quote'), a clear resource (RFQ to 1-3 agencies via marketingburos.nl), and defines the scope (on behalf of a buyer). It also distinguishes from siblings by noting the input is the wizard profile plus slugs from search_agencies or find_agency, making clear this is the submission step, not discovery. The queuing behavior is also stated, which reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains that input requires selectedAgencySlugs from search_agencies or find_agency, implicitly instructing the agent to use those tools first. It also states that nothing is sent automatically and a human operator releases it, giving context on when this is appropriate. However, it does not explicitly say 'use this only when...' or name alternative tools for other actions, so it falls short of explicit when-not guidance, but the indirect routing is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- Changed
find_agency5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / city / descriptionAdded value: +"Optional city to narrow candidates." - added
Input schema / properties / domain / descriptionAdded value: +"Website domain, e.g. 'yourcrew.online'. Provide name and/or domain." - added
Input schema / properties / limit / descriptionAdded value: +"Max candidates (1-10, default 5)." - added
Input schema / properties / name / descriptionAdded value: +"Trade or statutory name (fuzzy), e.g. 'Yourcrew'. Provide name and/or domain."
- Changed
get_agency_profile2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / slug / descriptionAdded value: +"Agency slug as returned by search_agencies or find_agency."
- Changed
search_agencies12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / budget_band / descriptionAdded value: +"Buyer's budget in EUR. Only excludes agencies whose known rates conflict; most agencies have no known rate." - added
Input schema / properties / city / descriptionAdded value: +"Exact office city of the agency. For 'near a city' use near_city + within_km instead." - added
Input schema / properties / client_orientation / descriptionAdded value: +"b2b or b2c focus of the agency." - added
Input schema / properties / company_size_band / descriptionAdded value: +"Size of the buyer's company (employees); matches agencies that target that segment." - added
Input schema / properties / limit / descriptionAdded value: +"Max results (1-20, default 10)." - added
Input schema / properties / near_city / descriptionAdded value: +"Center of a radius search: any Dutch city name. Requires within_km." - added
Input schema / properties / near_lat / descriptionAdded value: +"Center latitude of a radius search (alternative to near_city). Requires near_lon + within_km." - added
Input schema / properties / near_lon / descriptionAdded value: +"Center longitude of a radius search (alternative to near_city). Requires near_lat + within_km." - added
Input schema / properties / specialisms / descriptionAdded value: +"Up to 5 specialism slugs from categories://list (e.g. 'seo', 'branding'). Unknown terms are echoed back in filters.specialisms.unmatched." - added
Input schema / properties / target_industry / descriptionAdded value: +"Client vertical the agency serves (e.g. the buyer's own industry). Not the agency's own sector." - added
Input schema / properties / within_km / descriptionAdded value: +"Radius in kilometres around near_city or near_lat/near_lon (max 250). Ignored without an origin; near_* is ignored without within_km."
- Changed
submit_rfq20 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / agencySize / descriptionAdded value: +"Preferred agency size in employees." - added
Input schema / properties / budgetBand / descriptionAdded value: +"Buyer's budget in EUR." - added
Input schema / properties / clientOrientation / descriptionAdded value: +"Optional: does the buyer sell b2b, b2c or both." - added
Input schema / properties / companySize / descriptionAdded value: +"Buyer's company size in employees." - added
Input schema / properties / contactCompany / descriptionAdded value: +"Buyer's company name." - added
Input schema / properties / contactEmail / descriptionAdded value: +"Buyer's business e-mail (no disposable domains)." - added
Input schema / properties / contactName / descriptionAdded value: +"Buyer's full name." - added
Input schema / properties / contactPhone / descriptionAdded value: +"Optional phone number (digits, spaces, +, (), -)." - added
Input schema / properties / culturalFit / descriptionAdded value: +"Three 0-10 sliders: [data-driven, specialist, hands-on]. Use [5,5,5] when unknown." - added
Input schema / properties / industry / descriptionAdded value: +"Buyer's industry (a value from categories://list doelgroep_options, or 'Anders')." - added
Input schema / properties / industryFreetext / descriptionAdded value: +"Required only when industry is 'Anders': the buyer's industry in their own words." - removed
Input schema / properties / selectedAgencyIdsRemoved value: -{ - "items": { - "format": "uuid", - "type": "string" - }, - "maxItems": 3, - "minItems": 1, - "type": "array" -} - added
Input schema / properties / selectedAgencySlugsAdded value: +{ + "description": "1-3 agency slugs (as returned by search_agencies or find_agency) the buyer wants to receive this RFQ.", + "items": { + "maxLength": 120, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / specialisms / descriptionAdded value: +"1-5 specialism slugs the buyer needs (see the categories://list resource)." - added
Input schema / properties / specialistFullServiceSlider / descriptionAdded value: +"0 = full-service agency, 10 = niche specialist." - added
Input schema / properties / timeline / descriptionAdded value: +"When the work should start." - added
Input schema / properties / toelichting / descriptionAdded value: +"Optional free-text brief for the agencies (Dutch or English)." - added
Input schema / properties / website / descriptionAdded value: +"Leave empty. Anti-spam honeypot field." - changed
Input schema / requiredPrevious value: -[ - "specialisms", - "industry", - "companySize", - "agencySize", - "specialistFullServiceSlider", - "culturalFit", - "budgetBand", - "timeline", - "contactEmail", - "contactName", - "contactCompany", - "selectedAgencyIds" -]New value: +[ + "specialisms", + "industry", + "companySize", + "agencySize", + "specialistFullServiceSlider", + "culturalFit", + "budgetBand", + "timeline", + "contactEmail", + "contactName", + "contactCompany", + "selectedAgencySlugs" +]
4 tool updates
- First observed
find_agency - First observed
get_agency_profile - First observed
search_agencies - First observed
submit_rfq
Related MCP Connectors
Search 47,000+ marketing agencies and get AI-matched with fitted agencies, from Pick an Agency.
Agency marketing & CRM: leads, campaigns, email/SMS/WhatsApp, LinkedIn, landing pages, social.
Dutch market map for agents: schools, Verified Pro tutors, shortlists, paths. Not practice.
Related MCP Servers
- AlicenseAqualityCmaintenanceSearch 47,000+ marketing agencies and get AI-matched with fitted agencies, from Pick an Agency.32MIT
- AlicenseNot gradedqualityDmaintenanceSearch PR agencies, browse publications, buy press release distribution & media placements. Zero-config, no API key needed.5 npmMIT
- AlicenseNot gradedqualityDmaintenanceA search engine for AI agents that enables searching, comparing, and discovering over 500 businesses across 112 categories with structured pricing data. It allows users to filter listings by price, category, and country to find and analyze specific business services.6 npmMIT
- FlicenseNot gradedqualityDmaintenanceSearches and analyzes competitor ads and content across Meta, Google, Instagram, TikTok, and YouTube with AI-powered creative analysis and cross-platform brand discovery.1-
Glama MCP Gateway
Add one secure layer between your agents and this server.