nexwave-mcp-remote
This server provides read-only access to Sketchy Rides LA fleet and public site content.
fleet_list: view current fleet with daily rates, mileage terms, photos, and booking URLs.availability_check: check whether a car is free for a given date window.quote_trip: get an exact checkout quote in USD cents — daily rate, insurance plan, CA tax, and deposit hold.search: search public pages (fleet, terms, destination guides, blog) and return matching page metadata.fetch: fetch the full text of a page by its search-result id/URL.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nexwave-mcp-remoteCheck car availability in LA for this weekend"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
nexwave-mcp-remote — Sketchy Rides as an MCP plugin
Rent cars with your AI. Manage the fleet with your AI. Two streamable-HTTP MCP servers for the Sketchy Rides LA rental pilot (Nexwave platform), one Fly.io machine, scale-to-zero.
Surface | URL | Auth | Who |
Renter / public |
| none | anyone's agent |
Operator |
| OAuth 2.1 login gate | fleet operator |
Add it to your harness
Claude Code / Desktop
claude mcp add --transport http sketchyrides https://nexwave-mcp.fly.dev/mcpCodex (~/.codex/config.toml)
[mcp_servers.sketchyrides]
url = "https://nexwave-mcp.fly.dev/mcp"ChatGPT — Settings → Connectors → Developer mode → + → paste
https://nexwave-mcp.fly.dev/mcp. Deep research works out of the box
(search + fetch follow the compat schema).
Cursor — Settings → MCP → new server → the same URL.
Operators use /ops/mcp instead — your client will open a sign-in page;
use your operator name + key.
Related MCP server: Relay
Tools
Public (read-only): fleet_list · availability_check · quote_trip
(live rates, dates, exact checkout math) · search / fetch (every public
page — fleet, terms, destination guides, blog).
Ops (ops:read): ops_overview, ops_bookings · (ops:write):
ops_set_vehicle — narrow edits: daily rate, delist, description.
Ops tools call the platform's bearer-gated /api/v1/ops/* bridge
(PR #4) and degrade
cleanly until it deploys.
Develop
uv venv .venv --python 3.12 && uv pip install -p .venv/bin/python .
export NEXWAVE_API_KEY=… # v1 API key (Vercel env / platform .env.local)
export NEXWAVE_OAUTH_PROFILES='{"alex":{"secret":"…","level":"owner"}}'
.venv/bin/nexwave-mcp --http --port 8378
.venv/bin/python scripts/verify_http.py http://127.0.0.1:8378
.venv/bin/python scripts/verify_oauth.py http://127.0.0.1:8378stdio mode (local agents that prefer a spawned process): nexwave-mcp
with no --http serves the public tools.
Deploy (Fly.io)
fly apps create nexwave-mcp
fly secrets set NEXWAVE_API_KEY=… NEXWAVE_BASE_URL=https://nexwave-mcp.fly.dev \
'NEXWAVE_OAUTH_PROFILES={…}' # generate fresh secrets, never the test ones
fly deploymin_machines_running = 1 is deliberate: OAuth state is in-memory, and
idle auto-stop would wipe DCR registrations mid-flow.
Registry (plugin-store discovery)
server.json is the official MCP registry manifest. Once the Fly deploy is
live and verified, publish with the registry CLI (mcp-publisher, GitHub
auth — the io.github.sidarau/* namespace is tied to the GitHub account):
mcp-publisher publish # from this repo— Enki · ZEUG-663
Available Tools
5 toolsavailability_checkAvailability CheckARead-onlyIdempotent
Check whether a car is free for a date window.
car: car slug or 17-char VIN · start/end: YYYY-MM-DD (end = return day)
| Name | Required | Description | Default |
|---|---|---|---|
| car | Yes | ||
| end | Yes | ||
| start | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, covering the safety and world-view. The description adds useful behavioral context beyond those: it specifies the input format (car slug or VIN, YYYY-MM-DD dates) and clarifies that 'end = return day'. This goes beyond what the schema or annotations provide, though it doesn't discuss edge cases like timezone or inclusivity of dates.
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 extremely concise—two sentences—and front-loads the core purpose. The parameter explanation is compactly packed into a single line using separators (·). Every sentence earns its place with no redundancy or filler.
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 a simple availability check with an output schema, the description covers the essential semantics and parameter meanings. It might be improved by noting whether the result is a boolean or includes availability windows, but the output schema likely handles that. Minor gaps like timezone assumptions or inclusive/exclusive date boundaries are not addressed, but these are not critical for the tool's core function.
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 description coverage is 0%, so the description carries the full burden of explaining parameters. It does so completely: 'car' is identified as a slug or 17-char VIN, and 'start'/'end' are YYYY-MM-DD dates with the note that 'end = return day'. Every parameter is explained with both format and meaning, fully compensating for the bare schema.
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 uses a specific verb ('Check') and clearly states the resource ('whether a car is free for a date window'). It distinguishes itself from siblings like fleet_list (listing) and quote_trip (pricing) by focusing on availability, so an agent can select it correctly without ambiguity.
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 clearly implies the use case (checking availability), but it does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites. The agent must infer that this is the go-to tool for availability checks based on the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchFetchARead-onlyIdempotent
Fetch the full text of one site page by its id (a URL from search).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds useful behavioral context beyond those: it returns the full text of exactly one page, and the id is a search-result URL. This is not contradictory with the annotations.
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?
A single, front-loaded sentence with no filler: action, resource, and input all appear immediately. Every word earns its place.
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 a one-parameter, read-only tool with an output schema present, the description is nearly complete: it covers input provenance, scope, and result type. The only minor gap is an explicit statement about when to choose fetch over the sibling search tool, but the wording already implies that.
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 input schema gives only a bare string field with 0% description coverage, so the description must provide meaning. It does so by clarifying that 'id' is a URL from search, which tells the agent exactly what value to supply. It does not cover edge cases like URL encoding or invalid ids, but for a single input it is sufficiently contextual.
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 names a specific action ('Fetch'), a specific resource ('full text of one site page'), and a clear identifier ('its id (a URL from search)'). This distinguishes it from siblings like search (which discovers pages), fleet_list, availability_check, and quote_trip.
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 parenthetical '(a URL from search)' implies the natural usage context: call this after search when you have an id and need a page's full text. However, it does not explicitly state when not to use it or name alternatives, leaving routing partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fleet_listFleet ListARead-onlyIdempotent
List the current published Sketchy Rides LA fleet: daily rates, mileage terms, photos, and booking URLs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds useful context about the contents of the list ('current published... daily rates, mileage terms, photos, booking URLs') but does not disclose behaviors like pagination or all-vs-partial listing beyond what the annotations imply.
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?
A single sentence leads with the verb and resource, then enumerates the relevant data fields. No filler or repetition; every phrase earns its place.
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?
The tool is a simple zero-parameter list with a strong annotation set and an output schema present. The description fully covers what the agent needs to know to invoke it: what resource is listed and what data will be returned.
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 input schema has zero parameters, so there are no parameter semantics to document. The rubric sets a baseline of 4 for a zero-parameter tool, and the description's content coverage makes this appropriate.
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?
Begins with the specific verb 'List' and identifies the exact resource, 'current published Sketchy Rides LA fleet,' plus the data included (daily rates, mileage terms, photos, booking URLs). This distinguishes it from sibling tools like quote_trip or availability_check, which serve different purposes.
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 use case—call this when the agent needs the current published fleet listing—and the 'current published' wording sets scope. However, it does not explicitly state when to choose fleet_list over search, fetch, availability_check, or quote_trip, nor does it list exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_tripQuote TripARead-onlyIdempotent
Exact checkout quote in USD cents: daily rate + insurance plan + 11.5% CA tax + deposit hold. plan: full | liability | decline. Pilot runs a demo insurance fee — not issued coverage.
| Name | Required | Description | Default |
|---|---|---|---|
| car | Yes | ||
| end | Yes | ||
| plan | No | full | |
| start | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses meaningful behavior beyond the annotations: the quote includes daily rate, insurance plan, 11.5% CA tax, and deposit hold, and the insurance fee is only a demo charge, not issued coverage. This complements the readOnlyHint and idempotentHint annotations without contradicting them.
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 compact and front-loads the formula and quote type before the plan options and caveat. The 'Pilot' typo is a minor readability issue, but the description remains focused with no wasted words.
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?
With an output schema and readOnly/idempotent annotations present, the description covers the important behavioral specifics: cost formula, tax, deposit hold, and demo insurance. It does not address car/start/end parameter formats or compare explicitly to sibling tools, but it is still sufficiently complete for the agent to call it correctly.
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 description coverage is 0%, so the description must compensate. It usefully documents the plan parameter's allowed values ('full | liability | decline') and clarifies how cost components fit together. However, it leaves car, start, and end semantics to inference, with no format or meaning beyond their identifiers.
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?
It names a specific action ('exact checkout quote'), the exact resource being quoted, and the financial inputs that compose the quote. This clearly distinguishes it from sibling tools like availability_check or fleet_list.
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 makes the intended use clear: produce a precise checkout price in USD cents. It does not explicitly discuss alternatives or when not to use this tool, but the context is strong enough that an agent can infer the right scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearchARead-onlyIdempotent
Search the public Sketchy Rides site — rental terms, fleet pages, destination guides, blog posts. Returns {results: [{id, title, url}]}; call fetch(id) for the full page text.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context: it returns lightweight result objects, not full page text, and requires a follow-up fetch call to retrieve complete content.
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 well-structured sentence that front-loads the core purpose, includes the return shape, and closes with the follow-up action. Every phrase earns its place with no wasted words.
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 a simple search tool with one parameter, rich annotations, and an output schema, this description is complete. It tells the agent what is searched, what the result shape looks like, and what to do next to get full content.
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 description coverage is 0%, so the description must compensate for the undocumented query parameter. The description implies that 'query' is the search text for the public site, but it does not provide examples, syntax expectations, or any guidance on how the query is matched. This is adequate for a single obvious string parameter but not rich.
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 that this tool searches the public Sketchy Rides site and lists the content types it covers. It also distinguishes itself from the sibling tool fetch by explicitly saying that fetch(id) should be called for full page text, making its role unique.
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 gives clear context for when to use search — to discover pages across rental terms, fleet pages, destination guides, and blog posts — and instructs the agent to call fetch(id) for full content. It does not explicitly mention exclusions for other siblings like availability_check or quote_trip, but the search-vs-fetch workflow is clearly implied.
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. Dates show when Glama detected each change.
5 tool updates
v0.1.0- First observed
availability_check - First observed
fetch - First observed
fleet_list - First observed
quote_trip - First observed
search
TDQS
Scored across 5 tools
Each tool has a clear, distinct purpose: listing the fleet, checking availability, generating a quote, searching site content, and fetching page text. There is no meaningful overlap between the tools, and the search/fetch pairing is explicitly linked rather than ambiguous.
All names are readable and use snake_case, but the naming conventions are mixed: fleet_list and availability_check are object_verb-style, quote_trip is verb_object, and search/fetch are bare verbs. The names are not chaotic, but they do not follow one predictable pattern.
Five tools is well-scoped for this read-only rental fleet, availability, quoting, and website content server. Each tool earns its place and there is no bloat or thinness.
The pre-booking workflow is well covered: list the fleet, check availability, get a quote, and search/fetch site content. The only notable gap is the lack of a direct booking/reservation tool, though fleet_list provides booking URLs as a workaround.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Operator-as-agent MCP hub. 6 tools. First $5 free, then $0.001/call.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Related MCP Servers
- AlicenseAqualityBmaintenanceAgent-native MCP server for Carly, the AI scheduling assistant. Exposes 11 tools to read and manage booking pages, event types, calendars, bookings, and available slots. Allows you to manage and create booking pages from the command line.135MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to access a unified catalog of tools from various APIs (OpenAPI, GraphQL, MCP, Google Discovery) through the MCP protocol.MIT
- AlicenseNot gradedqualityBmaintenanceProvides MCP tools for operations desk tasks including calendar availability, customer lookup, quote calculation, and notification sending. Includes an internal agentic orchestrator that consumes the same MCP tools via protocol.MIT
- AlicenseNot gradedqualityCmaintenanceRemote MCP server for the fleetstreet creator platform, enabling AI agents to register creative works, issue/revoke AI licences, access compliance evidence, and manage a creator business (catalog, merch, events) via 46 tools.12-