Koskamo

MailerDot MCP

Provides access to local U.S. city news, weather, events, and census data via a free daily newsletter service. Supports reading city editions, searching archives, checking demographics, and purchasing local business or event listings.

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.

MailerDot MCP logo, by MailerDotCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by MailerDot
You need:No key, no token, no account, no sign-up
MCP endpoint (Streamable HTTP)
https://mailerdot.com/mcp
Vendor documentation

What its tools do

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

12 of 12 have a description · 12 of 12 declare behavior hints · 7 of 11 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Retrieve daily local news and weather for a specific U.S. city
  • Search archived newsletter editions for local events or topics
  • Get demographic facts and census data for a U.S. town
  • Purchase event or business listings in a local directory

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
mailerdot 1.0.0
MCP protocol negotiated in check
2025-06-18
Tools
12 advertised
Resources
6 advertised
Resource templates
3 advertised
Prompts
3 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

MailerDot publishes a free daily newsletter for U.S. cities: local news, weather, events, and a community spotlight. Everything here is unauthenticated. `subscribe_city` subscribes a reader by email — it sends mail, so only call it for an address whose owner asked, and confirm with them first. The first edition arrives within minutes of subscribing. Cities are keyed by a `{city}-{state-name}` slug, lowercased and hyphenated — `austin-texas`, `san-francisco-california`. The state is its full name, not the postal abbreviation. Call `list_cities` (or read the `city-directory` resource) before guessing a slug. MailerDot sells two things, and the tools for both end at a payment link rather than a purchase: `start_town_checkout` (a monthly lease on a town's commercial rights) and `create_event_listing` / `create_business_listing` (one-off placements inside a town's edition). None of them charge anyone — a person must open the returned URL and enter card details before money moves, and nothing publishes until it clears. Price first with `get_town_quote` or `get_listing_prices`; both are read-only. Full developer documentation: https://mailerdot.com/developers

Tools

12 advertised

list_cities — List active cities
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns every U.S. city with an active MailerDot newsletter, grouped by state.

list_cities input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_cities annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_city — Get city overview
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns city details: subscriber count, recent archive list, and Census Bureau demographics.

get_city input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "City slug, e.g. austin-texas"
    }
  },
  "additionalProperties": false
}
get_city annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_archive — Read a newsletter edition
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns the markdown body of a past newsletter edition for a city. Defaults to the most recent edition.

get_archive input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "YYYY-MM-DD; omit for latest"
    },
    "slug": {
      "type": "string",
      "description": "City slug, e.g. austin-texas"
    }
  },
  "additionalProperties": false
}
get_archive annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
search_archives — Search newsletter archives
Advertised by the server during the last successful anonymous check.
Advertised read-only

Full-text search across all past newsletter editions. Returns ranked matches with snippets.

search_archives input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "slug": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 50,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "maxLength": 200,
      "minLength": 2
    }
  },
  "additionalProperties": false
}
search_archives annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_weather — Get today's weather
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Returns today's weather for a city (snapshot from the newsletter, or live from Open-Meteo).

get_weather input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_weather annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
subscribe_city — Subscribe a reader to a city's daily digest
Advertised by the server during the last successful anonymous check.

Subscribes an email address to one city's free daily digest. A welcome email goes out at once and the first edition is generated and sent within minutes; every edition carries a one-click unsubscribe. Free, no account. This sends mail to the address given — only call it for an address whose owner asked to subscribe, and confirm with them first. An address can hold up to 10 city digests; subscribing to a second city adds it, never replaces the first.

subscribe_city input schema
{
  "type": "object",
  "required": [
    "email",
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "City slug, e.g. austin-texas"
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "The reader's email address. Only subscribe an address whose owner asked for this — the tool sends mail to it."
    }
  },
  "additionalProperties": false
}
subscribe_city annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_town_quote — Price a town lease
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check whether a U.S. town can be leased as a MailerDot operator, and what it costs per month. Pricing is by subscriber count: $10/month covers the first 1,000 subscribers, then +$5 per additional 1,000. Read-only — this reserves nothing.

get_town_quote input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Town slug in `{city}-{state-name}` form, e.g. `austin-texas`."
    }
  },
  "additionalProperties": false
}
get_town_quote annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
start_town_checkout — Get a payment link to lease a town
Advertised by the server during the last successful anonymous check.
Open-world

Starts an operator checkout for a town and returns a hosted payment URL. CHARGES NOTHING: a person must open the URL and enter card details before anything is bought, and the email they enter there becomes the operator account. The town is held for a short reservation window and released if the checkout is not completed. Call get_town_quote first to confirm availability and price.

start_town_checkout input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Town slug in `{city}-{state-name}` form, e.g. `austin-texas`."
    }
  },
  "additionalProperties": false
}
start_town_checkout annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_listing_prices — Price an event or business listing
Advertised by the server during the last successful anonymous check.
Advertised read-only

What it costs to list an event or a business in one town, and whether that town is currently selling. Call this before create_event_listing or create_business_listing. Read-only.

get_listing_prices input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Town slug in `{city}-{state-name}` form, e.g. `austin-texas`."
    }
  },
  "additionalProperties": false
}
get_listing_prices annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
create_event_listing — List an event in a town (returns a payment link)
Advertised by the server during the last successful anonymous check.
Open-world

Submits an event to a town's calendar. The compliance screen runs inside this call: an approved paid submission comes back with a hosted payment URL, a rejected one comes back with a reason and no charge was ever possible. CHARGES NOTHING — a person must open the URL and enter card details. Nothing published here publishes itself: a paid listing goes live only after payment is confirmed, a free (`standard`) one only after a person approves it. Call get_listing_prices first.

create_event_listing input schema
{
  "type": "object",
  "required": [
    "slug",
    "tier",
    "title",
    "description",
    "url",
    "startsAt",
    "buyerEmail"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Link to tickets, RSVP, or details. Required."
    },
    "slug": {
      "type": "string",
      "description": "Town slug in `{city}-{state-name}` form, e.g. `austin-texas`."
    },
    "tier": {
      "enum": [
        "standard",
        "listing",
        "featured"
      ],
      "type": "string",
      "description": "standard = free review queue; listing and featured are paid and return a payment link."
    },
    "title": {
      "type": "string",
      "maxLength": 120,
      "minLength": 3,
      "description": "The event's name."
    },
    "venue": {
      "type": "string",
      "maxLength": 120
    },
    "endsAt": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Last day, for a multi-day event."
    },
    "address": {
      "type": "string",
      "maxLength": 200
    },
    "category": {
      "type": "string",
      "description": "One of the town calendar's categories, e.g. \"Music\", \"Markets\", \"Family\"."
    },
    "startsAt": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Event date, YYYY-MM-DD. Must be today or later."
    },
    "buyerName": {
      "type": "string",
      "maxLength": 80
    },
    "startTime": {
      "type": "string",
      "description": "Local start time as HH:MM, 24-hour. Omit for an all-day event."
    },
    "buyerEmail": {
      "type": "string",
      "format": "email",
      "description": "Where the receipt and the payment link go. Must be a real address, not a disposable one. An accepted submission also subscribes this address to the town's daily email (one-click unsubscribe in every issue) — tell the person."
    },
    "description": {
      "type": "string",
      "maxLength": 600,
      "minLength": 10,
      "description": "What it is, in a sentence or two."
    }
  },
  "additionalProperties": false
}
create_event_listing annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
create_business_listing — List a business in a town (returns a payment link)
Advertised by the server during the last successful anonymous check.
Open-world

Submits a business to a town's directory, on the same rails as create_event_listing: screened inside the call, approved paid submissions come back with a hosted payment URL. CHARGES NOTHING — a person must open the URL and enter card details. A paid listing runs for 30 days starting the day payment clears; a free (`standard`) one publishes only if a person approves it. Call get_listing_prices first.

create_business_listing input schema
{
  "type": "object",
  "required": [
    "slug",
    "tier",
    "name",
    "description",
    "url",
    "buyerEmail"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The business's website or page. Required."
    },
    "name": {
      "type": "string",
      "maxLength": 80,
      "minLength": 2,
      "description": "The business's name."
    },
    "slug": {
      "type": "string",
      "description": "Town slug in `{city}-{state-name}` form, e.g. `austin-texas`."
    },
    "tier": {
      "enum": [
        "standard",
        "listing",
        "featured"
      ],
      "type": "string",
      "description": "standard = free review queue; listing and featured are paid and return a payment link."
    },
    "phone": {
      "type": "string",
      "maxLength": 30
    },
    "address": {
      "type": "string",
      "maxLength": 200
    },
    "category": {
      "type": "string",
      "description": "One of the directory's categories, e.g. \"Food & Drink\", \"Home & Trades\"."
    },
    "buyerName": {
      "type": "string",
      "maxLength": 80
    },
    "buyerEmail": {
      "type": "string",
      "format": "email",
      "description": "Where the receipt and the payment link go. Must be a real address, not a disposable one. An accepted submission also subscribes this address to the town's daily email (one-click unsubscribe in every issue) — tell the person."
    },
    "description": {
      "type": "string",
      "maxLength": 400,
      "minLength": 10,
      "description": "What the business does."
    }
  },
  "additionalProperties": false
}
create_business_listing annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_listing_order — Check a listing order
Advertised by the server during the last successful anonymous check.
Advertised read-only

Whether a listing order has been paid and whether the listing is live yet. Possession of the order id is the credential, so the answer carries order state and public listing fields only — never the buyer's name or address. Read-only.

get_listing_order input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^lo_[0-9a-f-]{36}$",
      "description": "The order id from a create_*_listing call."
    }
  },
  "additionalProperties": false
}
get_listing_order annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}

Prompts

3 advertised

city_briefing — Brief me on a city's day

Advertised by the server during the last successful anonymous check.

Summarise what is happening in a city today from its latest MailerDot edition — headlines, weather, and what is on — in a form someone can read in under a minute.

city
A city slug (`austin-texas`) or a plain city name ("Austin, TX"). (required)
compare_cities — Compare two cities

Advertised by the server during the last successful anonymous check.

Compare two cities on Census demographics and on what their newsletters actually cover — useful for a relocation question or a market read.

first
First city slug or name. (required)
second
Second city slug or name. (required)
local_research — Research a topic across a city archive

Advertised by the server during the last successful anonymous check.

Search a city's newsletter archive for a topic and assemble what was reported, in order, with dates and links.

city
A city slug (`austin-texas`) or a plain city name ("Austin, TX"). (required)
topic
What to search for, e.g. "housing", "the new library". (required)

Resources

6 advertised

site-overview — MailerDot site overview (llms.txt)

Advertised by the server during the last successful anonymous check.

What MailerDot is, what a daily edition contains, how to subscribe, how city leasing works, and where every other machine-readable resource lives. Start here.

site-overview URI
https://mailerdot.com/llms.txt

MIME type: text/plain

site-overview-full — MailerDot full documentation (llms-full.txt)

Advertised by the server during the last successful anonymous check.

The long form of the overview: product detail, editorial policy, how editions are generated and constrained, operator terms, and API notes.

site-overview-full URI
https://mailerdot.com/llms-full.txt

MIME type: text/plain

developer-docs — MailerDot developer documentation

Advertised by the server during the last successful anonymous check.

The developer portal in full: quickstart, the slug rule, every public endpoint with a worked example, the RFC 9457 error envelope and its complete code table, markdown twins, and MCP setup.

developer-docs URI
https://mailerdot.com/developers

MIME type: text/markdown

openapi-spec — MailerDot OpenAPI 3.1 specification

Advertised by the server during the last successful anonymous check.

The machine-readable API contract: paths, parameters, response schemas, and the enumerated error codes. Generate a client from this rather than guessing shapes.

openapi-spec URI
https://mailerdot.com/openapi.json

MIME type: application/json

city-directory — Cities with a live MailerDot edition

Advertised by the server during the last successful anonymous check.

Live directory of every city currently publishing, grouped by state, with a link per city. Read this before guessing a slug.

city-directory URI
https://mailerdot.com/cities.md

MIME type: text/markdown

recent-editions — The 30 most recent editions across all cities

Advertised by the server during the last successful anonymous check.

A reverse-chronological list of the newest editions, each with its city, date, subject line, and URL. The quickest read of what MailerDot published today.

recent-editions URI
https://mailerdot.com/feed.md

MIME type: text/markdown

city-page — A city page as markdown

Advertised by the server during the last successful anonymous check.

One city: census snapshot table, subscriber count, and an index of its published editions. `slug` is `{city}-{state-name}`, e.g. `austin-texas`.

city-page URI template
https://mailerdot.com/{slug}.md

MIME type: text/markdown

edition — One daily edition as markdown

Advertised by the server during the last successful anonymous check.

The full text of a single published edition — local news, weather, events, and the community spotlight. `date` is YYYY-MM-DD; the city page lists which dates exist.

edition URI template
https://mailerdot.com/{slug}/{date}.md

MIME type: text/markdown

city-facts — Schema.org Dataset facts for a city

Advertised by the server during the last successful anonymous check.

Structured JSON-LD: newsletter metadata plus U.S. Census ACS demographics — population, median age, income, home value, rent, education, and commute.

city-facts URI template
https://mailerdot.com/api/facts/{slug}

MIME type: application/json

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-09: 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
401 ms
95th percentile latency
401 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 401 ms · metadata changed · 12 tool(s), 6 resource(s), 3 resource template(s), 3 prompt(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 mailerdot-mcp https://mailerdot.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 mailerdot-mcp --url https://mailerdot.com/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start mailerdot-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "mailerdot-mcp": {
      "type": "http",
      "url": "https://mailerdot.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 mailerdot-mcp https://mailerdot.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://mailerdot.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": {
    "mailerdot-mcp": {
      "serverUrl": "https://mailerdot.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like MailerDot MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.