Model Context Protocol · Streamable HTTP · Public

GetXPersonal
MCP Server

A public Model Context Protocol server that exposes the GetXPersonal directory to AI agents. Connect Claude Desktop, Claude Code, OpenAI ChatGPT, OpenClaw, or any MCP-compatible client over Streamable HTTP — no API key, no SDK, three tools, one endpoint.

Endpoint
https://mcp.getxpersonal.com/ads
Transport
Streamable HTTP
Auth
None required
Rate Limit
10 req/min per IP
Overview

What this server does, and why

A short technical orientation for developers integrating the GetXPersonal directory into agentic workflows.

The Model Context Protocol is an open standard for connecting AI applications to external systems through a uniform interface. An MCP server exposes a fixed set of tools — named, schema-described functions — that any compatible client can discover at runtime and call on behalf of a language model. Specification details are at modelcontextprotocol.io.

This server publishes three tools backed by the live GetXPersonal directory: GetCities for discovering valid city keys, SearchProfiles for querying listings by city and category, and GetAdDetails for fetching the canonical record of a single listing. All tools are read-only. No tool exposed by this server creates, modifies, or deletes data.

The transport is Streamable HTTP — the modern single-endpoint replacement for the older HTTP+SSE dual-endpoint design. Requests are JSON-RPC 2.0 over HTTPS POST. Responses are either single JSON objects or SSE event streams, depending on what the model and tool need. Everything terminates on a single URL: https://mcp.getxpersonal.com/ads.

There is no authentication. The server is intended to be safe to expose publicly: every tool is read-only, only public listing data is returned, and a 10 requests-per-minute per-IP limit caps abuse. Higher-volume integrations should contact the GetXPersonal team for a dedicated arrangement.

Client Claude Desktop · Claude Code · ChatGPT · OpenClaw tools/list, tools/call JSON-RPC 2.0 over HTTPS POST /ads MCP Server mcp.getxpersonal.com internal call Directory API getxpersonal.com Response JSON or SSE stream Single endpoint. Streamable HTTP. JSON-RPC 2.0. Three read-only tools. No auth. Rate-limited at 10 req/min per IP.
Integration

Setup Guide

Pick your client and follow the steps. Every client connects to the same endpoint — only the configuration syntax differs.

1

Open Config

In Claude Desktop, go to Settings → Developer → Edit Config. This opens claude_desktop_config.json.

2

Add Server Entry

Add the following inside the "mcpServers" object:

JSON
{
  "mcpServers": {
    "getxpersonal": {
      "type": "streamable-http",
      "url": "https://mcp.getxpersonal.com/ads"
    }
  }
}
3

Restart

Save the file and restart Claude Desktop. The GetXPersonal tools will appear in the tools menu.

1

Add the Server

Open your terminal and run:

Shell
claude mcp add getxpersonal \
  --transport http \
  https://mcp.getxpersonal.com/ads
2

Verify

The tools are immediately available. Verify with:

Shell
claude mcp list
1

Open Settings

In ChatGPT, open Settings → Connected apps → Add MCP server.

2

Enter Server URL

URL
https://mcp.getxpersonal.com/ads
3

Connect

Click Connect. The GetXPersonal tools will appear when you start a new conversation.

OpenClaw is an open-source local AI assistant that connects to messaging apps like WhatsApp, Telegram, and Discord. Since the GetXPersonal MCP server uses Streamable HTTP, you can connect it through OpenClaw's MCP plugin or by configuring it directly in your openclaw.json.

Option A — Direct Config
1

Edit openclaw.json

Open your OpenClaw config file at ~/.openclaw/openclaw.json and add a mcpServers entry:

JSON5
{
  "mcpServers": {
    "getxpersonal": {
      "transport": "streamable-http",
      "url": "https://mcp.getxpersonal.com/ads"
    }
  }
}
2

Restart the Gateway

Restart your OpenClaw gateway so it picks up the new server:

Shell
openclaw gateway restart
3

Verify

Confirm the server is registered and tools are available:

Shell
openclaw mcp list

Option B — CLI Config
1

Set via CLI

Use the OpenClaw CLI to add the server without editing files directly:

Shell
openclaw config set mcpServers.getxpersonal.transport "streamable-http"
openclaw config set mcpServers.getxpersonal.url "https://mcp.getxpersonal.com/ads"
2

Restart & Verify

Restart the gateway and verify as above.


Option C — MCP Plugin
1

Install the MCP Plugin

If you're using the OpenClaw MCP Plugin for Streamable HTTP support, install it into your extensions directory:

Shell
cd ~/.openclaw/extensions/
git clone https://github.com/lunarpulse/openclaw-mcp-plugin.git mcp-integration
cd mcp-integration
npm install
2

Configure the Plugin

Add GetXPersonal to the plugin's config in config/openclaw.plugin.json:

JSON
{
  "mcpServers": {
    "getxpersonal": {
      "baseUrl": "https://mcp.getxpersonal.com/ads"
    }
  }
}
3

Restart

Restart the OpenClaw gateway: openclaw gateway restart

Note: No authentication is required. OpenClaw version 2026.1.0+ is recommended for native Streamable HTTP support. Once configured, your agents will be able to call GetXPersonal tools directly through Telegram, WhatsApp, Discord, or the OpenClaw dashboard.
1

Generic Configuration

Any MCP-compatible client that supports Streamable HTTP transport can connect:

JSON
// Generic MCP client configuration
{
  "name": "getxpersonal",
  "transport": "streamable-http",
  "url": "https://mcp.getxpersonal.com/ads"
}

No authentication is required. The server is publicly accessible with a rate limit of 10 requests per minute per IP.

2

Direct JSON-RPC (no SDK)

If you prefer to call the server without an MCP SDK, send a JSON-RPC 2.0 initialize handshake followed by tools/list and tools/call requests:

Shell
curl -X POST https://mcp.getxpersonal.com/ads \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Implementation

Transport, framing, and request flow

What actually happens on the wire when an MCP client calls a GetXPersonal tool.

Streamable HTTP transport

The server speaks the Streamable HTTP variant of the MCP transport, finalized in the 2025-03-26 revision of the specification. A single endpoint — POST /ads — handles every JSON-RPC method. There is no separate SSE channel and no session-cookie handshake; the client opens a request, sends its JSON-RPC payload, and reads the response.

The server inspects the Accept header on each request to decide the response framing. A client that accepts application/json and not text/event-stream receives a single JSON object. A client that accepts text/event-stream receives a streamed SSE response — useful when a tool returns large or progressive content. Either framing is conformant; clients should accept both and let the server choose.

Methods

Three JSON-RPC methods matter in normal use. initialize negotiates protocol version and capabilities and is sent once per session. tools/list returns the JSON Schema for every exposed tool. tools/call invokes a tool by name with a JSON arguments object and returns either a content array (success) or a structured error. All three are documented in the MCP specification.

Errors

Errors follow JSON-RPC 2.0 conventions. Tool-level failures — bad arguments, unknown city key, missing ad ID — return an error object with a structured message rather than an HTTP non-2xx. Transport-level failures — rate limit exceeded, malformed JSON, oversized request — return the appropriate HTTP status: 429 when the per-IP limit is hit, 400 for parse errors, 413 for payloads above 64 KB. Clients should treat 429 as retriable with backoff.

What you do not get

The server does not implement the optional MCP resources or prompts capabilities. It does not support stdio transport, the deprecated HTTP+SSE dual-endpoint transport, or WebSocket framing. It does not issue notifications back to the client. If a future feature requires any of these, this page will be updated.

API Reference

Available Tools

Three tools, all read-only, all returning JSON. Names are case-sensitive and match the schema returned by tools/list.

GetCities
Returns a paginated list of normalized city keys covering roughly one thousand U.S. metros. Use this first whenever you need a city key for SearchProfiles. City keys are slug-style and stable.
ParameterTypeNotes
pageNumber integer 1-based. Defaults to 1.
pageSize integer Defaults to 50. Max 200.
SearchProfiles
Searches listings by city key and category. Pass latitude and longitude for geographic sorting; results are returned nearest-first when coordinates are present, otherwise by recency.
ParameterTypeNotes
city req string City key from GetCities.
category string Enum value. See below.
pageNumber integer 1-based.
latitude number Optional, sort by distance.
longitude number Optional, paired with latitude.
GetAdDetails
Returns the canonical record of a single listing: title, full description, posting time, image URLs, poster handle, and a direct link to the listing page on the main site for follow-up.
ParameterTypeNotes
adId req string Returned by SearchProfiles.
Category enum values for SearchProfiles
platonic activity-partner m4w w4m m4m w4w casual-encounters

Pass any of these as the category argument. Omit the argument to search across all categories. Values are case-sensitive.

Example: raw JSON-RPC call to SearchProfiles
JSON-RPC
{
  "jsonrpc": "2.0",
  "id": 42,
  "method": "tools/call",
  "params": {
    "name": "SearchProfiles",
    "arguments": {
      "city": "los-angeles-california",
      "category": "activity-partner",
      "pageNumber": 1
    }
  }
}
Use Cases

What developers build with this

A few concrete patterns where the three-tool surface is enough to power a real workflow.

Local search agent

City-aware listing browser

A chat agent that takes a free-text city name from the user, normalizes it to a key, paginates through listings, and presents the top matches with rich previews.

GetCities SearchProfiles GetAdDetails
Geo-aware concierge

Nearby activity-partner finder

An assistant given the user's coordinates ranks activity-partner listings by distance, then enriches the top three with full details for a side-by-side comparison.

SearchProfiles(lat, lon) GetAdDetails × N
Data-aware drafting

Listing-aware reply assistant

A drafting tool fetches the full details of a referenced ad, then helps the user compose a contextual, tone-matched reply based on the listing's actual content.

GetAdDetails LLM draft
Coverage analysis

Market footprint reporter

A research agent walks the city catalog, samples listing volume per category in each metro, and produces a coverage table or a small ranked report on regional activity.

GetCities (paginate) SearchProfiles (sample)
Voice / messenger bridge

Telegram or Discord bot

An OpenClaw-powered bot accepts a slash command, calls SearchProfiles against the user's city, and replies inline with a short, formatted result list and follow-up commands.

slash cmd SearchProfiles reply
Internal tooling

Editorial moderation helper

A staff-side agent surfaces recent listings in a given city for human review, highlighting fields that warrant attention and linking back to the canonical page on the main site.

SearchProfiles GetAdDetails human-in-loop
Try It Out

Example Prompts

Once a client is connected, these prompts exercise each of the three tools end-to-end.

List ten cities the GetXPersonal directory covers in California.
Find activity partner listings in Las Vegas, Nevada and summarize the top three.
Get the full details for ad #12345 and give me the canonical link.
Use latitude 34.05 and longitude -118.24 to find platonic listings near me, sorted by distance.
Compare listing volume across the platonic and activity-partner categories in Austin.
Walk me through the JSON-RPC call you would send to fetch ad #98765.
Privacy & Safety

What the server sees, and what it doesn't

Because the server is unauthenticated and called by AI agents on behalf of users, it is worth being explicit about the data flow.

Read-only

Every exposed tool is read-only. Nothing on this server can post, modify, or delete a listing.

Public data only

The directory data returned is the same data already public on the main site. No private profile fields are surfaced.

No prompt forwarding

The server never sees the user's prompt or the model's reasoning — only the JSON-RPC tool call constructed by the client.

Minimal logging

Request metadata (timestamp, IP, tool name, status) is retained for rate limiting and abuse detection. Tool arguments are not persisted.

Rate limit enforced

10 requests per minute per IP, hard. Excess requests return HTTP 429 with a Retry-After header.

No write tools

Posting, replying, contacting, or messaging through the directory is intentionally not exposed. Those actions remain on the main site behind authentication.

FAQ

Questions developers ask

Quick answers to the most common questions about the protocol, the endpoint, and the data.

MCP is an open standard for connecting AI applications to external systems through a uniform interface. An MCP server exposes a fixed set of tools — named, schema-described functions — that any compatible client can discover and call. The protocol uses JSON-RPC 2.0 messages over a chosen transport. The GetXPersonal MCP server uses Streamable HTTP. Full specification at modelcontextprotocol.io.
No. The server is publicly accessible at https://mcp.getxpersonal.com/ads with no authentication. A 10 requests-per-minute rate limit is applied per client IP address. Higher-volume integrations should contact the GetXPersonal team for a dedicated arrangement.
Only Streamable HTTP. The server does not support stdio (which requires a local process) or the deprecated HTTP+SSE dual-endpoint transport. Any MCP client that targets the modern Streamable HTTP transport will work, including Claude Desktop, Claude Code, ChatGPT, and OpenClaw.
Three. GetCities returns a paginated list of valid city keys. SearchProfiles searches listings by city key, category, and optional latitude/longitude for geo-sorted results. GetAdDetails returns the full record of a single ad by ID, including title, description, image URLs, and the canonical link on the main site.
Cities are normalized server-side to a slug-style key (for example, los-angeles-california) so that ambiguous names — Springfield, Portland, Glendale — resolve deterministically. Always call GetCities first to discover the valid key for the user's intended city, or pass latitude and longitude to let the server pick the nearest one.
Yes. Tool calls hit the live GetXPersonal directory at request time. There is no intermediate cache layer for ad data. City lists are refreshed on a daily cadence and are served from a short-lived cache for performance.
The server is intended for read-only integrations and developer experiments. The 10 req/min rate limit is hard. There is no SLA on the public endpoint. Production integrations that need higher throughput, dedicated capacity, or write tools should contact GetXPersonal directly.
The server logs request metadata — timestamp, IP, tool name, response status — for rate limiting and abuse prevention. Tool arguments are not persisted beyond the request lifecycle. The server does not receive or process the prompt text from the upstream LLM — only the JSON-RPC tool call the client constructs.
Use the contact form at getxpersonal.com/Home/Contact. Include the request URL, the tool name, the arguments you sent, and the response or error you received. Feature requests for additional tools — posting an ad, sending a message, filtering by attributes — are reviewed quarterly.