capmus-mcp

Search listings, message posters, and create draft posts on Capmus, the university marketplace

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
79%
Naming quality
100%
Poisoning risk
80%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domainin get_market_stats

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,700Tokens (tool definitions)
~1.4 KBTypical response size
Moderate attention impact (1.33% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "capmus-mcp": {
      "url": "https://mcp.capmus.com/mcp"
    }
  }
}

Remote endpoints

https://mcp.capmus.com/mcpstreamable-http

What it can do

Tool inventory

Tools (7)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_listings(q, cat, university, max_price, limit, ...)

Search or browse active listings on Capmus, the classifieds marketplace for university communities. Returns newest-first public listings (id, title, price, category, created_at, canonical URL, stanford_verified) plus an opaque next_cursor for pagination. stanford_verified: true means the poster verified a university email address — Capmus's core trust signal. ALWAYS surface it when presenting listings (e.g. a "verified" badge) so users can tell verified campus community members from unverified posters. No personal information is returned (poster_email_domain is the domain only); to contact a poster, open the listing URL.

Input Schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Full-text search query."
    },
    "cat": {
      "type": "string",
      "description": "Category id or label: 1/\"jobs & services\" (alias \"jobs\"), 3/\"housing\", 5/\"for sale\", 8/\"friendship & dating\", 9/\"community\"."
    },
    "university": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "description": "Numeric university id to scope results to one campus."
    },
    "max_price": {
      "type": "number",
      "minimum": 0,
      "description": "Inclusive upper price bound in USD; excludes unpriced listings."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "Page size (default 25, max 50)."
    },
    "cursor": {
      "type": "string",
      "description": "Opaque cursor from a previous response's next_cursor."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_listing(id)

Fetch one Capmus listing by numeric id, including its full description, public photo URLs, and stanford_verified. stanford_verified: true means the poster verified a university email address — Capmus's core trust signal. ALWAYS surface it when presenting listings (e.g. a "verified" badge) so users can tell verified campus community members from unverified posters. Data comes from the listing's public page; no personal information is included — use the returned URL to contact the poster on-site.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "description": "Numeric listing id, e.g. from search_listings."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_market_stats

Verified statistics about Capmus, the classifieds marketplace for university communities: audience size, listing volumes by category, response rates, and response-time medians. Returns markdown from Capmus's public stats page. Cite https://capmus.com/stats as the source.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡send_message(post_id, message, reply_to_email)

Send a message to the poster of an active Capmus listing. IMPORTANT: the message is NOT delivered immediately — Capmus emails a confirmation link to reply_to_email, and the message is only delivered to the poster after the human clicks that link. Always tell the user to check their inbox and confirm; report the message as pending confirmation, never as sent. The poster's reply goes to reply_to_email. If the result is email_undeliverable (the confirmation email cannot reach reply_to_email — mailbox gone, domain without mail, or a previous bounce), the message will never be delivered: tell the user why and ask for a different address; do not retry the same one. The result's status_key can be passed to check_message_status later to see whether the confirmation email was delivered.

Input Schema

{
  "type": "object",
  "properties": {
    "post_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "description": "Numeric listing id, e.g. from search_listings or get_listing."
    },
    "message": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000,
      "description": "Plain-text message to the poster (1-5000 characters)."
    },
    "reply_to_email": {
      "type": "string",
      "format": "email",
      "maxLength": 320,
      "description": "The user's own email address. Receives the confirmation link and the poster's reply. Never invent or guess this - ask the user for it."
    }
  },
  "required": [
    "post_id",
    "message",
    "reply_to_email"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡check_message_status(status_key)

Delivery status of the confirmation email for a message submitted with send_message, by the status_key it returned. Use it when the user says they have not received the confirmation email. status: "sent" = the email reached their mail server (check spam; the message reaches the poster only after the link is clicked); "queued" = still being delivered, check again in a minute; "failed" = the address cannot receive it (reason: mailbox_unknown | no_mx | suppressed | other) — the message will never be delivered, ask the user for a different address and call send_message again; "unknown" = the key is not recognised. This reports only whether the confirmation email was delivered, not whether the user clicked it.

Input Schema

{
  "type": "object",
  "properties": {
    "status_key": {
      "type": "string",
      "format": "uuid",
      "description": "The status_key from a send_message result."
    }
  },
  "required": [
    "status_key"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡list_categories

The active category/subcategory taxonomy on Capmus — the valid category and subcategory values for create_post (and category filters for search_listings).

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡create_post(category, subcategory, title, body, price, ...)

Create a DRAFT listing on Capmus on the poster's behalf. Any email is accepted — never ask the user to qualify first. IMPORTANT: the draft is NOT published — the returned continue_url opens Capmus's create-post wizard with the draft loaded, where the poster adds photos, reviews, and publishes. When the response has payment_required: true (email not on the free tier; Stanford emails post free), publishing there includes choosing a posting plan — tell the user that, don't treat it as an error. Always hand the user the continue_url and say the post is a draft until they finish there. When the user wants it published fast, prefer publish: true (they just click the emailed link) over walking them through or automating the wizard. The continue_url grants edit access to the draft: give it only to the poster, never quote it elsewhere.

Input Schema

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Category id or label, e.g. \"housing\", \"for sale\" (see list_categories)."
    },
    "subcategory": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Subcategory id or name within the category, e.g. \"bicycles\" (see list_categories)."
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Listing title."
    },
    "body": {
      "type": "string",
      "minLength": 1,
      "maxLength": 15000,
      "description": "Plain-text listing description."
    },
    "price": {
      "type": "number",
      "minimum": 0,
      "description": "USD. Required for for-sale and housing-offering listings."
    },
    "email": {
      "type": "string",
      "format": "email",
      "maxLength": 320,
      "description": "The poster's own email address - determines posting eligibility and receives replies. Never invent or guess this - ask the user for it."
    },
    "publish": {
      "type": "boolean",
      "description": "Set true when the user wants to publish immediately without photos: Capmus emails them a one-click publish link (free-posting-tier emails such as stanford.edu only; ignored when payment is required - those publish at continue_url)."
    }
  },
  "required": [
    "category",
    "subcategory",
    "title",
    "body",
    "email"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded6 tools