Empiria Local SEO MCP
A free MCP server providing deterministic technical SEO, Local SEO, and GEO checks. It analyzes public HTML, indexing directives, business profiles, and AI observation logs using 72 versioned rules. The server returns structured JSON findings in German and offers optional fixed-price implementation guidance for remediation without placing orders.
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.empiriainsight.com/mcpWhat its tools do
9 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
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 empiriainsight.com ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Perform technical SEO audits on public HTML and sitemaps
- Compare supplied business profiles against approved reference data
- Analyze AI observation logs and web performance exports
- Estimate remediation costs for SEO fixes via fixed-price packages
Source and maintenance
Protocol and capabilities
- Server
- empiria-local-seo 0.2.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 9 advertised
- Resources
- 1 advertised
- Resource templates
- 0 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
9 advertised
get_check_catalog — Prüfkatalog und Grenzen
Liste der deterministischen Regeln mit Version, Skill-Herkunft, Quellen und Prüfgrenzen.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}audit_website — Öffentliche Website prüfen
Begrenzter HTTP-Crawl einer öffentlichen Website: HTML, Kontaktlinks, Schema, robots, Sitemap. Maximal sechs Seiten und 20 weitere interne Ziele, 45 Sekunden Gesamtbudget. Respektiert robots für den eigenen Audit-Crawler. Kein Browser oder echter Suchbot-Test; externe Buchungsseiten bleiben ungeprüft. Führt öffentliche GET-Abrufe durch, speichert keine Leads.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"max_pages": {
"type": "integer",
"default": 3,
"maximum": 6,
"minimum": 1
},
"max_link_checks": {
"type": "integer",
"default": 10,
"maximum": 20,
"minimum": 0
},
"expected_business": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"hours": {
"type": "object",
"propertyNames": {
"maxLength": 100
},
"additionalProperties": {
"type": "string",
"maxLength": 100
}
},
"phones": {
"type": "array",
"items": {
"$ref": "#/properties/expected_business/properties/name"
},
"maxItems": 10
},
"address": {
"type": "object",
"properties": {
"street": {
"$ref": "#/properties/expected_business/properties/name"
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2
},
"locality": {
"$ref": "#/properties/expected_business/properties/name"
},
"postal_code": {
"$ref": "#/properties/expected_business/properties/name"
}
},
"additionalProperties": false
},
"country": {
"type": "string",
"default": "DE",
"pattern": "^[A-Z]{2}$"
},
"website": {
"$ref": "#/properties/url"
},
"services": {
"type": "array",
"items": {
"$ref": "#/properties/expected_business/properties/name"
},
"maxItems": 100
},
"categories": {
"type": "array",
"items": {
"$ref": "#/properties/expected_business/properties/name"
},
"maxItems": 30
},
"location_type": {
"enum": [
"storefront",
"hybrid",
"service_area"
],
"type": "string"
},
"service_areas": {
"type": "array",
"items": {
"$ref": "#/properties/expected_business/properties/name"
},
"maxItems": 100
},
"special_hours": {
"type": "object",
"propertyNames": {
"maxLength": 100
},
"additionalProperties": {
"type": "string",
"maxLength": 100
}
},
"public_address": {
"type": "boolean"
},
"approved_website_urls": {
"type": "array",
"items": {
"$ref": "#/properties/url"
},
"maxItems": 20
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}audit_page_snapshot — Gespeicherten Seitenstand prüfen
Prüft geliefertes HTML und optionale HTTP-/robots-/Sitemap-/DOM-Snapshots ohne Netzwerkzugriff. Gleiche Eingaben und Regelversion ergeben gleiche Befunde. Fehlende Daten bleiben not_tested; ein DOM-Snapshot ist kein eigener Browser-Test.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"html"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"html": {
"type": "string",
"maxLength": 2000000
},
"llms": {
"$ref": "#/properties/robots"
},
"robots": {
"type": "object",
"required": [
"url",
"status_code",
"body"
],
"properties": {
"url": {
"$ref": "#/properties/url"
},
"body": {
"type": "string",
"maxLength": 2000000
},
"headers": {
"type": "object",
"default": {},
"propertyNames": {
"maxLength": 100
},
"additionalProperties": {
"type": "string",
"maxLength": 8000
}
},
"status_code": {
"type": "integer",
"maximum": 599,
"minimum": 100
}
},
"additionalProperties": false
},
"headers": {
"type": "object",
"default": {},
"propertyNames": {
"maxLength": 100
},
"additionalProperties": {
"type": "string",
"maxLength": 8000
}
},
"sitemap": {
"$ref": "#/properties/robots"
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"status_code": {
"type": "integer",
"maximum": 599,
"minimum": 100
},
"related_pages": {
"type": "array",
"items": {
"$ref": "#/properties/robots"
},
"maxItems": 6
},
"rendered_html": {
"type": "string",
"maxLength": 2000000
},
"paid_link_urls": {
"type": "array",
"items": {
"$ref": "#/properties/url"
},
"maxItems": 100
},
"redirect_chain": {
"type": "array",
"items": {
"$ref": "#/properties/url"
},
"maxItems": 6
},
"target_results": {
"type": "array",
"items": {
"$ref": "#/properties/robots"
},
"default": [],
"maxItems": 40
},
"expected_business": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"hours": {
"type": "object",
"propertyNames": {
"maxLength": 100
},
"additionalProperties": {
"type": "string",
"maxLength": 100
}
},
"phones": {
"type": "array",
"items": {
"$ref": "#/properties/expected_business/properties/name"
},
"maxItems": 10
},
"address": {
"type": "object",
"properties": {
"street": {
"$ref": "#/properties/expected_business/properties/name"
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2
},
"locality": {
"$ref": "#/properties/expected_business/properties/name"
},
"postal_code": {
"$ref": "#/properties/expected_business/properties/name"
}
},
"additionalProperties": false
},
"country": {
"type": "string",
"default": "DE",
"pattern": "^[A-Z]{2}$"
},
"website": {
"$ref": "#/properties/url"
},
"services": {
"type": "array",
"items": {
"$ref": "#/properties/expected_business/properties/name"
},
"maxItems": 100
},
"categories": {
"type": "array",
"items": {
"$ref": "#/properties/expected_business/properties/name"
},
"maxItems": 30
},
"location_type": {
"enum": [
"storefront",
"hybrid",
"service_area"
],
"type": "string"
},
"service_areas": {
"type": "array",
"items": {
"$ref": "#/properties/expected_business/properties/name"
},
"maxItems": 100
},
"special_hours": {
"type": "object",
"propertyNames": {
"maxLength": 100
},
"additionalProperties": {
"type": "string",
"maxLength": 100
}
},
"public_address": {
"type": "boolean"
},
"approved_website_urls": {
"type": "array",
"items": {
"$ref": "#/properties/url"
},
"maxItems": 20
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}compare_business_profiles — Unternehmensdaten abgleichen
Vergleicht gelieferte Profil-/Verzeichnisdaten gegen freigegebene Stammdaten: Name, Rufnummern, öffentliche Adresse, Standort-URL, Zeiten, Gebiete, Kategorien und Leistungen. Normalisiert Schreib-/Telefonvarianten; prüft weder Google-Profil live noch Inhaberschaft oder Wahrheit der Stammdaten.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"reference",
"profiles"
],
"properties": {
"profiles": {
"type": "array",
"items": {
"type": "object",
"required": [
"profile_id"
],
"properties": {
"name": {
"$ref": "#/properties/reference/properties/name"
},
"hours": {
"$ref": "#/properties/reference/properties/hours"
},
"phones": {
"$ref": "#/properties/reference/properties/phones"
},
"address": {
"$ref": "#/properties/reference/properties/address"
},
"country": {
"$ref": "#/properties/reference/properties/country"
},
"website": {
"$ref": "#/properties/reference/properties/website"
},
"services": {
"$ref": "#/properties/reference/properties/services"
},
"categories": {
"$ref": "#/properties/reference/properties/categories"
},
"profile_id": {
"$ref": "#/properties/reference/properties/name"
},
"source_url": {
"$ref": "#/properties/reference/properties/website"
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"location_type": {
"$ref": "#/properties/reference/properties/location_type"
},
"service_areas": {
"$ref": "#/properties/reference/properties/service_areas"
},
"special_hours": {
"$ref": "#/properties/reference/properties/special_hours"
},
"public_address": {
"$ref": "#/properties/reference/properties/public_address"
},
"approved_website_urls": {
"$ref": "#/properties/reference/properties/approved_website_urls"
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"reference": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"hours": {
"type": "object",
"propertyNames": {
"maxLength": 100
},
"additionalProperties": {
"type": "string",
"maxLength": 100
}
},
"phones": {
"type": "array",
"items": {
"$ref": "#/properties/reference/properties/name"
},
"maxItems": 10
},
"address": {
"type": "object",
"properties": {
"street": {
"$ref": "#/properties/reference/properties/name"
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2
},
"locality": {
"$ref": "#/properties/reference/properties/name"
},
"postal_code": {
"$ref": "#/properties/reference/properties/name"
}
},
"additionalProperties": false
},
"country": {
"type": "string",
"default": "DE",
"pattern": "^[A-Z]{2}$"
},
"website": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"services": {
"type": "array",
"items": {
"$ref": "#/properties/reference/properties/name"
},
"maxItems": 100
},
"categories": {
"type": "array",
"items": {
"$ref": "#/properties/reference/properties/name"
},
"maxItems": 30
},
"location_type": {
"enum": [
"storefront",
"hybrid",
"service_area"
],
"type": "string"
},
"service_areas": {
"type": "array",
"items": {
"$ref": "#/properties/reference/properties/name"
},
"maxItems": 100
},
"special_hours": {
"type": "object",
"propertyNames": {
"maxLength": 100
},
"additionalProperties": {
"type": "string",
"maxLength": 100
}
},
"public_address": {
"type": "boolean"
},
"approved_website_urls": {
"type": "array",
"items": {
"$ref": "#/properties/reference/properties/website"
},
"maxItems": 20
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}analyze_ai_observations — Vorhandene KI-Beobachtungen auswerten
Berechnet Nennungs-, Empfehlungs-, eigene Quellen- und Zitationsquoten aus gelieferten annotierten Antwortprotokollen. Trennt Oberfläche, Modell, Modus, Sprache und Ort. Weist Nenner, Fehlversuche und ungeprüfte Annotationen aus. Führt keine KI-Anfragen durch und beurteilt keine Texte semantisch.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"owned_hosts",
"observations"
],
"properties": {
"owned_hosts": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-zA-Z0-9.-]+$",
"maxLength": 253,
"minLength": 1
},
"maxItems": 20,
"minItems": 1
},
"observations": {
"type": "array",
"items": {
"type": "object",
"required": [
"provider",
"surface",
"prompt_id",
"prompt",
"status"
],
"properties": {
"model": {
"$ref": "#/properties/observations/items/properties/provider"
},
"prompt": {
"type": "string",
"maxLength": 8000,
"minLength": 1
},
"status": {
"enum": [
"complete",
"failed",
"blocked"
],
"type": "string"
},
"surface": {
"$ref": "#/properties/observations/items/properties/provider"
},
"language": {
"$ref": "#/properties/observations/items/properties/provider"
},
"location": {
"$ref": "#/properties/observations/items/properties/provider"
},
"provider": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"timezone": {
"$ref": "#/properties/observations/items/properties/provider"
},
"citations": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"verified"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"verified": {
"type": "boolean"
}
},
"additionalProperties": false
},
"maxItems": 100
},
"mentioned": {
"type": "boolean"
},
"prompt_id": {
"$ref": "#/properties/observations/items/properties/provider"
},
"repetition": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"recommended": {
"type": "boolean"
},
"response_text": {
"type": "string",
"maxLength": 32000,
"minLength": 1
},
"retrieval_mode": {
"$ref": "#/properties/observations/items/properties/provider"
},
"location_access": {
"enum": [
"provided",
"disabled",
"unknown"
],
"type": "string"
},
"identity_verified": {
"type": "boolean"
},
"artifact_reference": {
"type": "string",
"maxLength": 2048,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 500
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}analyze_performance_export — Messdaten und Baseline prüfen
Validiert gelieferte GSC-/GBP-/CRM-ähnliche Datensätze, Definitionen und doppelte IDs. Summiert getrennte Kennzahlen und berechnet Veränderungen nur bei vergleichbarer Baseline. Kein Zugriff auf Konten und keine automatische Zuordnung von KI-Traffic oder Umsatzursachen.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"current"
],
"properties": {
"current": {
"type": "object",
"required": [
"source",
"period_start",
"period_end",
"timezone",
"exported_at",
"dimensions",
"definitions",
"records"
],
"properties": {
"source": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"records": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"values"
],
"properties": {
"id": {
"$ref": "#/properties/current/properties/source"
},
"query": {
"type": "string",
"maxLength": 1000
},
"values": {
"type": "object",
"propertyNames": {
"enum": [
"impressions",
"clicks",
"phone_clicks",
"calls_received",
"contacts",
"qualified_contacts",
"bookings",
"orders",
"revenue"
]
},
"additionalProperties": {
"type": "number"
}
}
},
"additionalProperties": false
},
"maxItems": 5000
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$"
},
"timezone": {
"$ref": "#/properties/current/properties/source"
},
"dimensions": {
"type": "object",
"propertyNames": {
"maxLength": 100
},
"additionalProperties": {
"type": "string",
"maxLength": 500
}
},
"period_end": {
"type": "string",
"format": "date"
},
"definitions": {
"type": "object",
"propertyNames": {
"enum": [
"impressions",
"clicks",
"phone_clicks",
"calls_received",
"contacts",
"qualified_contacts",
"bookings",
"orders",
"revenue"
]
},
"additionalProperties": {
"type": "string",
"maxLength": 500,
"minLength": 1
}
},
"exported_at": {
"type": "string",
"format": "date-time"
},
"period_start": {
"type": "string",
"format": "date"
}
},
"additionalProperties": false
},
"baseline": {
"$ref": "#/properties/current"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}summarize_local_competitors — Lokale Wettbewerbsstichprobe auswerten
Prüft Herkunft und doppelte IDs eines gelieferten lokalen Wettbewerbervergleichs und berechnet Minimum, Median und Maximum vorhandener Ratings/Bewertungszahlen. Keine Live-Maps-Abfrage, Review-Authentizitätsprüfung oder Aussage über das Marktminimum.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"context",
"businesses"
],
"properties": {
"context": {
"type": "object",
"required": [
"service",
"search_location",
"surface",
"observed_at"
],
"properties": {
"service": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"surface": {
"$ref": "#/properties/context/properties/service"
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"search_location": {
"$ref": "#/properties/context/properties/service"
}
},
"additionalProperties": false
},
"businesses": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"$ref": "#/properties/context/properties/service"
},
"name": {
"$ref": "#/properties/context/properties/service"
},
"rating": {
"type": "number",
"maximum": 5,
"minimum": 0
},
"category": {
"$ref": "#/properties/context/properties/service"
},
"source_url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"review_count": {
"type": "integer",
"minimum": 0
},
"location_type": {
"enum": [
"storefront",
"hybrid",
"service_area"
],
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 100
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}analyze_web_performance — Gelieferte Web-Performance-Messung prüfen
Trennt Labor- und Felddaten. Prüft gelieferte p75-Feldwerte getrennt nach Gerät gegen gute LCP-/INP-/CLS-Grenzen und listet große Ressourcen im gelieferten Trace. Führt keine Messung aus und berechnet keinen pauschalen SEO-Score.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"source",
"kind",
"device",
"observed_at",
"metrics"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"kind": {
"enum": [
"field",
"lab"
],
"type": "string"
},
"device": {
"enum": [
"mobile",
"desktop",
"mixed"
],
"type": "string"
},
"source": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"metrics": {
"type": "object",
"properties": {
"cls": {
"type": "number",
"minimum": 0
},
"inp_ms": {
"type": "number",
"minimum": 0
},
"lcp_ms": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
},
"resources": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"transfer_bytes"
],
"properties": {
"url": {
"$ref": "#/properties/url"
},
"duration_ms": {
"type": "number",
"minimum": 0
},
"transfer_bytes": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"default": [],
"maxItems": 500
},
"percentile": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"period_end": {
"type": "string",
"format": "date"
},
"observed_at": {
"type": "string",
"format": "date-time"
},
"period_start": {
"type": "string",
"format": "date"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}estimate_remediation — Passende Festpreispakete einordnen
Passende Leistungspakete mit vorläufigem Netto-Festpreis und klar begrenztem Umfang aus gelieferten Prüfregel-IDs ableiten. Keine Stundenangaben. Warnungen müssen bestätigt werden; ein verbindliches Festpreisangebot folgt nach Prüfung. Keine Ranking- oder Terminzusage.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"findings": {
"type": "array",
"items": {
"type": "object",
"required": [
"check_id",
"status"
],
"properties": {
"status": {
"enum": [
"fail",
"warn",
"pass",
"info",
"not_tested"
],
"type": "string"
},
"check_id": {
"type": "string",
"maxLength": 100
}
},
"additionalProperties": false
},
"default": [],
"maxItems": 300
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
check-catalog
Versionierter Local-SEO-/GEO-Prüfkatalog
empiria://local-seo/checks30-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
- 1752 ms
- 95th percentile latency
- 1752 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1752 ms · metadata changed · 9 tool(s), 1 resource(s), 0 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 empiria-local-seo-mcp https://mcp.empiriainsight.com/mcpCodex
codex mcp add empiria-local-seo-mcp --url https://mcp.empiriainsight.com/mcpCursor
{
"mcpServers": {
"empiria-local-seo-mcp": {
"url": "https://mcp.empiriainsight.com/mcp"
}
}
}Cline
{
"mcpServers": {
"empiria-local-seo-mcp": {
"type": "streamableHttp",
"url": "https://mcp.empiriainsight.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"empiria-local-seo-mcp": {
"type": "http",
"url": "https://mcp.empiriainsight.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http empiria-local-seo-mcp https://mcp.empiriainsight.com/mcpClaude Desktop
https://mcp.empiriainsight.com/mcpWindsurf
{
"mcpServers": {
"empiria-local-seo-mcp": {
"serverUrl": "https://mcp.empiriainsight.com/mcp"
}
}
}Let your agent find its tools
Find servers like Empiria Local SEO MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other developer tools servers
Do you run Empiria Local SEO MCP?
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.