# LFcarry MCP server

Version 1.2.0 · updated September 22, 2026 · HTML: https://lfcarry.com/developers/mcp

The LFcarry MCP server lets AI assistants — Meta Muse, Claude, ChatGPT, Cursor or any client of the Model Context Protocol — use LFcarry: game analytics and guides, Apex Legends player stats, team finding, pro player profiles, and priced services with pro players (coaching, play-together sessions, consultations, self-play carries and every other service LFcarry sells for a game, delivered self-play or over a remote-control session on the customer’s own machine) across every game LFcarry covers. The twelve reading tools are public: no sign-in, no writes. Sign-in with an LFcarry account (OAuth 2.1 with PKCE) adds six tools that act for the signed-in user: a conversation with the LFcarry assistant and pros, its replies, follow-up messages, payment of an offer on a Stripe checkout page, and the user’s orders. The assistant can complete that checkout for the user only after the user approves the amount; it never sees card details.

## Endpoint

- **URL** — `https://lfcarry.com/api/mcp`
- **Transport** — Streamable HTTP: POST JSON-RPC 2.0 messages (single or batch), JSON responses, stateless. There is no server-initiated stream; GET returns a JSON description of the server (name, version, endpoint, docs, tool names, auth); DELETE answers 204.
- **Protocol versions** — 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05
- **Authentication** — Optional. The reading tools need no token. The signed-in tools take an OAuth 2.1 access token in Authorization: Bearer; without one they answer 401 with WWW-Authenticate pointing at https://lfcarry.com/.well-known/oauth-protected-resource (see Sign in below).
- **Lenient by design** — Accept: application/json alone is fine, the MCP-Protocol-Version header is optional, and initialize may be skipped — a client can POST tools/call straight away.
- **Plain-text docs** — https://lfcarry.com/developers/mcp.md — this page as Markdown, for agents that build a connector from the docs.

## Connect from Muse

Connect from Meta Muse in one message. Send Muse: “Add the LFcarry connector: https://lfcarry.com/api/mcp — standard MCP over HTTP with OAuth; send me the sign-in link and I will approve it. Reading tools work without sign-in.” Muse then calls the tools when a question touches a game LFcarry covers — a tier list, this week’s reset, a coach or a session with a pro — and, once you have approved the sign-in link, starts the conversation with an LFcarry pro for you.

## Connect from other clients

- **Claude, ChatGPT and other assistants** — Add a custom connector (remote MCP server) with the URL https://lfcarry.com/api/mcp. The reading tools work at once; the first signed-in tool call sends the client through the standard OAuth sign-in (dynamic registration, PKCE) on lfcarry.com.
- **Cursor** — Add to mcp.json (see the snippet below); Cursor opens the LFcarry sign-in page when a signed-in tool is first used.
- **Your own client** — GET https://lfcarry.com/api/mcp describes the server as JSON (including the OAuth metadata URLs); POST {"jsonrpc":"2.0","id":1,"method":"tools/list"} lists the tools with their input schemas.

```json
{
  "mcpServers": {
    "lfcarry": { "url": "https://lfcarry.com/api/mcp" }
  }
}
```

## Tools

The reading tools — no sign-in:

### `list_games` — List games

Every game LFcarry covers (the live list, 60+ games) with its hub URL, the number of LFcarry guides, whether it has a coaching / sessions page, and which games carry the full analytics, research, team-finding and play-with-pros surface.

Inputs: no inputs.

```json
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
```

### `get_game_services` — Game services

What LFcarry offers for one game — analytics, research, team finding, coaching / sessions with pros and guides — as links to the pages that explain or sell each one, plus the game hub. Works for every game; games without a dedicated surface get their hub, coaching page (if any), guide count and the assistant chat link.

Inputs: game.

```json
{
  "type": "object",
  "properties": {
    "game": {
      "type": "string",
      "description": "Game id or name as players say it, e.g. apex, wow, d2, eft (Tarkov), cod, gta-6, valorant — see list_games"
    }
  },
  "required": [
    "game"
  ],
  "additionalProperties": false
}
```

### `find_services` — Find services

Services LFcarry sells for a game, sessions with a pro first: coaching, play-together / play-with-pro sessions, team finding, consultations, self-play carries and every other service (rank, badge, farming, leveling, completions) — never in-game currency or game profiles for sale. Each item carries the live USD price from the checkout catalog where the page publishes a fixed one (otherwise priceUsd is null and priceNote says why), the page URL to book, the delivery hint the page states (coaching, self-play, play-with-pro, or remote-control: a session on the customer's own machine that the customer starts and can end at any time, never credential sharing) and the time the catalog was read. Optional query narrows by words (e.g. "coaching", "raid", "ranked session"). Any game answers; a game with no listed services returns its hub, coaching page and the assistant chat link.

Inputs: game, query (optional), limit (optional).

```json
{
  "type": "object",
  "properties": {
    "game": {
      "type": "string",
      "description": "Game id or name as players say it, e.g. apex, wow, d2, eft (Tarkov), cod, gta-6, valorant — see list_games"
    },
    "query": {
      "type": "string",
      "description": "Words to narrow by, e.g. \"coaching\", \"arena\", \"dungeon self-play\" (optional)"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 40,
      "description": "Max items (default 12)"
    }
  },
  "required": [
    "game"
  ],
  "additionalProperties": false
}
```

### `get_offer` — Offer page

One LFcarry offer page by its slug or URL (e.g. apex/play-one-pro-hour, wow/hourly-coaching): title, the fixed USD price when the page publishes one, its options and configurator groups with the modifiers the page lists, what you get, requirements, completion and start time, delivery hint and the URL. A raid or dungeon page returns its package ladder with card prices and modes. Use slugs from find_services.

Inputs: slug.

```json
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Offer slug or lfcarry.com URL, e.g. wow/hourly-coaching"
    }
  },
  "required": [
    "slug"
  ],
  "additionalProperties": false
}
```

### `search_guides` — Search guides

Search LFcarry guides (tier lists, builds, weekly resets, raid and ranked guides, patch explainers) by keywords and/or game.

Inputs: query (optional), game (optional), limit (optional).

```json
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Keywords, e.g. \"tier list\", \"raid\", \"ranked\""
    },
    "game": {
      "type": "string",
      "description": "Game id or guide category, e.g. apex, d2, wow, wow-forever, marvel-rivals"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20
    }
  },
  "additionalProperties": false
}
```

### `read_guide` — Read a guide

The text of one LFcarry guide (sections, FAQ, dated current state, the priced cards the guide shows). Use slugs from search_guides.

Inputs: slug.

```json
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Guide slug, e.g. apex-legends-tier-list"
    }
  },
  "required": [
    "slug"
  ],
  "additionalProperties": false
}
```

### `apex_player_stats` — Apex player stats

Current ranked tier and most-used legends of an Apex Legends player by EA ID and platform (data by Apex Legends Status).

Inputs: player, platform (optional).

```json
{
  "type": "object",
  "properties": {
    "player": {
      "type": "string",
      "description": "EA ID as shown in game"
    },
    "platform": {
      "type": "string",
      "enum": [
        "PC",
        "PS4",
        "X1"
      ],
      "description": "PC, PS4 (PlayStation) or X1 (Xbox)"
    }
  },
  "required": [
    "player"
  ],
  "additionalProperties": false
}
```

### `apex_ranked_snapshot` — Apex ranked snapshot

Dated Apex Legends ranked facts: Predator RP cutoff per platform and Master / Predator counts, with sources.

Inputs: no inputs.

```json
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
```

### `find_lfg_communities` — Find teammates

Where to find teammates for a game: active LFG communities with live member / online counts (Apex Legends), otherwise a link to the LFcarry assistant that finds teammates.

Inputs: game.

```json
{
  "type": "object",
  "properties": {
    "game": {
      "type": "string",
      "description": "Game id or name as players say it, e.g. apex, wow, d2, eft (Tarkov), cod, gta-6, valorant — see list_games"
    }
  },
  "required": [
    "game"
  ],
  "additionalProperties": false
}
```

### `list_pro_players` — Pro players

Public profiles of current Apex Legends pro players: team, region, league, mains and channels. Filter by region (na, eu, apac…) or legend.

Inputs: game (optional), region (optional), legend (optional), limit (optional).

```json
{
  "type": "object",
  "properties": {
    "game": {
      "type": "string",
      "enum": [
        "apex"
      ]
    },
    "region": {
      "type": "string"
    },
    "legend": {
      "type": "string",
      "description": "Legend id, e.g. wraith, bangalore"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    }
  },
  "additionalProperties": false
}
```

### `weekly_reset` — Weekly reset

This week’s reset for Destiny 2 (featured raids and dungeons, rotations) or World of Warcraft (affixes, vault, events), from LFcarry’s weekly trackers, dated.

Inputs: game.

```json
{
  "type": "object",
  "properties": {
    "game": {
      "type": "string",
      "enum": [
        "d2",
        "wow"
      ],
      "description": "d2 (Destiny 2) or wow (World of Warcraft)"
    }
  },
  "required": [
    "game"
  ],
  "additionalProperties": false
}
```

### `talk_to_lfcarry` — Talk to an LFcarry pro

Links to start a chat with the LFcarry assistant and a pro player or coach (coaching, play-together sessions, team finding, help with an order) for any game, plus the game hub, its coaching page when it has one, and the support contact.

Inputs: game (optional), intent (optional).

```json
{
  "type": "object",
  "properties": {
    "game": {
      "type": "string",
      "description": "Game id or name (optional) — any game LFcarry covers"
    },
    "intent": {
      "type": "string",
      "enum": [
        "coaching",
        "play_with_pros",
        "find_teammates",
        "order_help",
        "other"
      ]
    }
  },
  "additionalProperties": false
}
```

The signed-in tools — after [sign in](#sign-in-oauth-21--pkce):

### `whoami` — Who am I

Whether the request carries a signed-in LFcarry user (OAuth), their account id, a masked e-mail and the client the sign-in was granted to. Sign in first: a call without a token answers 401 with the sign-in flow.

Inputs: no inputs.

```json
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
```

### `start_conversation` — Start a conversation with LFcarry

Opens a conversation with the LFcarry assistant and pro players FOR THE SIGNED-IN USER: coaching, a play-together session, team finding, a consultation or help with an order, in any game. Creates a normal LFcarry request as that user (first line "Source: mcp:<client>"), so the LFcarry assistant answers inside it within about a minute; then call get_replies. Give the user’s own words as message (1–700 characters), the game when known, and the lfcarry.com page they were looking at when there is one. Requires sign-in (OAuth).

Inputs: message, game (optional), page (optional).

```json
{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "minLength": 1,
      "maxLength": 700,
      "description": "What the user wants, in their words"
    },
    "game": {
      "type": "string",
      "description": "Game id or name (optional), e.g. wow, apex, d2 — see list_games"
    },
    "page": {
      "type": "string",
      "description": "The lfcarry.com page the user was on, if any (URL or path, e.g. https://lfcarry.com/wow/hourly-coaching)"
    }
  },
  "required": [
    "message"
  ],
  "additionalProperties": false
}
```

### `get_replies` — Read replies

The replies in a conversation started with start_conversation (or any of the user’s orders): what the LFcarry assistant and pros wrote after the user’s last message, oldest first, and any offer card (name, USD total, the link to accept it on lfcarry.com). A reply marked preliminary is the assistant’s quick first line; the full answer follows. status is agent_typing while an answer is expected. Pass sinceMessageId (the last id you saw) to get only what is new. Poll every 8–15 seconds for up to about two minutes after sending.

Inputs: conversationId, sinceMessageId (optional).

```json
{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string",
      "description": "The conversation id start_conversation returned (an LFcarry order code, e.g. A4A55A)"
    },
    "sinceMessageId": {
      "type": "string",
      "description": "Return only messages after this message id (from a previous get_replies)"
    }
  },
  "required": [
    "conversationId"
  ],
  "additionalProperties": false
}
```

### `send_message` — Send a message

Sends the user’s message (1–700 characters) into a conversation as the user; the LFcarry assistant or the pro on the order answers there. Then call get_replies. Requires sign-in (OAuth).

Inputs: conversationId, text (optional), message (optional).

```json
{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string",
      "description": "The conversation id start_conversation returned (an LFcarry order code, e.g. A4A55A)"
    },
    "text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 700,
      "description": "The message, in the user’s words"
    },
    "message": {
      "type": "string",
      "minLength": 1,
      "maxLength": 700,
      "description": "Alias of text (accepted so clients that reuse the start_conversation field name succeed)"
    }
  },
  "required": [
    "conversationId"
  ],
  "additionalProperties": false
}
```

### `pay_offer` — Pay for an offer

Opens payment for the offer the LFcarry assistant or a pro made in a conversation: returns a secure Stripe checkout page (checkout.stripe.com) for exactly the offer’s USD total, with what it buys. Nothing is charged by this call. Tell the user the total and what they get; with the user’s explicit approval of that amount you may open checkoutUrl and complete the payment for them (Link pays in one tap; card, Apple Pay and Amazon Pay also work), or give the user the link to pay themselves. Use it when the user says they want to book or pay. After payment the order shows in my_orders and a pro joins the conversation. Requires sign-in (OAuth).

Inputs: conversationId, offerId (optional).

```json
{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string",
      "description": "The conversation id start_conversation returned (an LFcarry order code, e.g. A4A55A)"
    },
    "offerId": {
      "type": "string",
      "description": "Which offer to pay (optional) — the newest open offer in the conversation is used when omitted"
    }
  },
  "required": [
    "conversationId"
  ],
  "additionalProperties": false
}
```

### `my_orders` — My orders

The signed-in user’s LFcarry conversations and orders: code, title, status, the USD price where the order has one, and the chat link on lfcarry.com. Requires sign-in (OAuth).

Inputs: no inputs.

```json
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
```

## Sign in (OAuth 2.1 + PKCE)

Six tools act for a signed-in LFcarry user and need an access token. The flow is the MCP authorization specification: OAuth 2.1 with PKCE (S256), dynamic client registration, resource indicators, discovery documents. A user signs in on lfcarry.com with the e-mail or phone code the site already uses (no password) and approves what the assistant may do; the assistant never sees the code or the account credentials.

- **Protected resource metadata (RFC 9728)** — https://lfcarry.com/.well-known/oauth-protected-resource (also at https://lfcarry.com/.well-known/oauth-protected-resource/api/mcp)
- **Authorization server metadata (RFC 8414)** — https://lfcarry.com/.well-known/oauth-authorization-server
- **Registration (RFC 7591)** — POST https://lfcarry.com/api/oauth/register with {"redirect_uris":[…],"client_name":"…"} — public clients only, token_endpoint_auth_method none; https redirect URIs, http on localhost, or a custom app scheme.
- **Authorization** — https://lfcarry.com/oauth/authorize — response_type=code, code_challenge_method=S256, optional resource=https://lfcarry.com/api/mcp, scope from the list below, state.
- **Token** — POST https://lfcarry.com/api/oauth/token — grant_type=authorization_code with code_verifier, or grant_type=refresh_token (the refresh token rotates on every use).
- **Lifetimes** — Authorization code 5 minutes; access token up to 24 hours (shorter when the LFcarry session behind it ends sooner); refresh token 30 days from the first sign-in. Signing out of LFcarry ends them all.
- **Scopes** — profile, chat, orders — profile: who is signed in; chat: conversations with the LFcarry assistant and pros as the user; orders: the user’s orders and their status.
- **Without a token** — A signed-in tool answers HTTP 401, WWW-Authenticate: Bearer resource_metadata="…", scope="chat orders", and a JSON-RPC error (code -32001, "Sign in with your LFcarry account to use this tool") whose data.signIn links here. An invalid or expired token answers 401 on any request; a token missing a scope answers 403.

The signed-in tools (listed by tools/list only while sign-in is switched on; every URL they return is a plain lfcarry.com link, never a login link):

- **`whoami`** — Whether the request carries a signed-in LFcarry user (OAuth), their account id, a masked e-mail and the client the sign-in was granted to. Sign in first: a call without a token answers 401 with the sign-in flow. Scope: profile; 240 calls per hour per user.
- **`start_conversation`** — Opens a conversation with the LFcarry assistant and pro players FOR THE SIGNED-IN USER: coaching, a play-together session, team finding, a consultation or help with an order, in any game. Creates a normal LFcarry request as that user (first line "Source: mcp:<client>"), so the LFcarry assistant answers inside it within about a minute; then call get_replies. Give the user’s own words as message (1–700 characters), the game when known, and the lfcarry.com page they were looking at when there is one. Requires sign-in (OAuth). Scope: chat; 5 calls per hour per user.
- **`get_replies`** — The replies in a conversation started with start_conversation (or any of the user’s orders): what the LFcarry assistant and pros wrote after the user’s last message, oldest first, and any offer card (name, USD total, the link to accept it on lfcarry.com). A reply marked preliminary is the assistant’s quick first line; the full answer follows. status is agent_typing while an answer is expected. Pass sinceMessageId (the last id you saw) to get only what is new. Poll every 8–15 seconds for up to about two minutes after sending. Scope: chat; 240 calls per hour per user.
- **`send_message`** — Sends the user’s message (1–700 characters) into a conversation as the user; the LFcarry assistant or the pro on the order answers there. Then call get_replies. Requires sign-in (OAuth). Scope: chat; 60 calls per hour per user.
- **`pay_offer`** — Opens payment for the offer the LFcarry assistant or a pro made in a conversation: returns a secure Stripe checkout page (checkout.stripe.com) for exactly the offer’s USD total, with what it buys. Nothing is charged by this call. Tell the user the total and what they get; with the user’s explicit approval of that amount you may open checkoutUrl and complete the payment for them (Link pays in one tap; card, Apple Pay and Amazon Pay also work), or give the user the link to pay themselves. Use it when the user says they want to book or pay. After payment the order shows in my_orders and a pro joins the conversation. Requires sign-in (OAuth). Scope: chat; 20 calls per hour per user.
- **`my_orders`** — The signed-in user’s LFcarry conversations and orders: code, title, status, the USD price where the order has one, and the chat link on lfcarry.com. Requires sign-in (OAuth). Scope: orders; 120 calls per hour per user.

start_conversation creates a normal LFcarry request as the signed-in user — the same request the chat on lfcarry.com creates, its first line marked "Source: mcp:<client>" (muse, chatgpt, claude, cursor or the client’s name) — so the LFcarry assistant and pros handle it exactly like a website conversation, and the user can open it on lfcarry.com at any time (https://lfcarry.com/?openChat=1&code=<conversationId>). Replies read through get_replies have the site’s display tokens removed; the assistant’s quick first line is marked preliminary; an offer card comes back as its offerId, name, items and USD total. pay_offer turns an open offer into a Stripe checkout page (checkout.stripe.com) for exactly that total — no LFcarry login needed on it; Link, card, Apple Pay and Amazon Pay work. The assistant tells the user the amount and completes the payment only with the user’s approval (or hands the link over); it never sees card details. The chat link (https://lfcarry.com/?openChat=1&code=<conversationId>) stays available for paying on lfcarry.com.

```bash
curl -s https://lfcarry.com/api/oauth/register \
  -H 'Content-Type: application/json' \
  -d '{"client_name":"My assistant","redirect_uris":["http://localhost:8080/callback"]}'
```

## What the catalog tools list

find_services and get_offer list every service LFcarry sells for a game — coaching, sessions with a pro, team finding, consultations, self-play carries and every other service (rank, badge, farming, leveling, completions). Two things are never listed: account sales and in-game currency. Every service is delivered in one of two ways, and the page states which: self-play (the customer plays, a pro coaches or plays alongside) or a remote-control session on the customer’s own machine (Parsec or similar) that the customer starts and can end at any moment — never by handing over credentials. The rule set that decides the listing is one configurable list (src/helpers/mcp/scope.ts), applied to every game’s catalog: an item is listed when its name or its page states one of the included kinds, and never when it falls under an excluded one. Sessions with a pro are listed first. Everything else stays one click away: every answer carries the game hub URL.

- **Listed** — coaching; play-together / play-with-pro sessions; team finding; consultation with a pro; self-play carries (you play, pros carry); any other service (rank, badge, farming, leveling, completions) — self-play or a remote-control session on your own machine.
- **Not listed** — sales of game logins and profiles; in-game currency (coins, gold, tokens, points, bucks, credits, shark cards).

## Where the data comes from

- Games, listings and offer pages — the public LFcarry catalog API (api.lfcarry.com/v1: category/list, page), read live and cached in memory for five minutes per game; the fan-out per game is bounded (up to 3 root pages, up to 12 subcategories chosen by scope with sessions first, up to 20 offer pages, up to 4 moved pages), so a cold read costs at most 39 requests.
- Prices — the checkout catalog lfcarry.com charges from. A fixed-price page prints its USD figure; a page priced by options (hours, mode, add-ons) prints priceUsd: null with a priceNote, and raid / dungeon packages whose default mode is not the session mode print the note too. No price is ever estimated.
- Service links and guides — the pages published on lfcarry.com; every guide carries its update date.
- Apex Legends player stats — Apex Legends Status (apexlegendsstatus.com), looked up live.
- LFG member and online counts — the public Discord invite endpoint, cached up to ten minutes.
- Pro profiles and the Predator cutoff — a dated snapshot with its sources listed in every answer.
- Weekly resets — LFcarry’s Destiny 2 and World of Warcraft weekly trackers, dated.

## Limits

- 600 requests per minute per client IP (a soft fence; assistants that route many users through shared IPs are not throttled as one) and 60 per minute per session when the client echoes the Mcp-Session-Id header it received on initialize. A 429 carries Retry-After and a JSON-RPC error body.
- Signed-in tools, per user and hour: 5 start_conversation, 60 send_message, 240 get_replies, 120 my_orders, 240 whoami — a 429 with Retry-After and a JSON-RPC error body. Messages are 1–700 characters.
- Request bodies up to 64 KB; batches up to 20 messages.
- Apex player lookups share the stats provider’s rate limit; when it is reached the tool says so.
- When the catalog API is unavailable the catalog tools answer with an error that carries the game hub URL and the assistant chat link — never with invented data.
- Placing an order on lfcarry.com requires being 18 or older.

## Privacy

The server keeps no user data and no session table. It logs the tool name, duration, outcome and client name for reliability, records on initialize which headers a client sends (names only, never values) and whether an Authorization header was present, logs the outcome of each sign-in (whether a user was attached and the client name, never a token), and holds the client IP, session id and per-user call counts in memory for rate limiting. An access token is an encrypted record of the signed-in session (the user’s LFcarry session token, account id, client and scopes) that only this server can read; conversations started through the connector are ordinary LFcarry conversations, visible to the user on lfcarry.com and handled under the same Privacy Policy. An EA ID sent to apex_player_stats is forwarded to Apex Legends Status to look up that public profile and is not stored by LFcarry. See https://lfcarry.com/privacy-policy and https://lfcarry.com/terms-of-service.

_Operators: set the env var MCP_DIAG_TOKEN and GET https://lfcarry.com/api/mcp?diag=1 with the header x-mcp-diag: <token> to read the last 100 initialize / tool / auth events of a pod (header names only); when the variable is unset the query is ignored. Sign-in runs only while MCP_OAUTH_KEY (base64, 32 bytes) is set on the pod; without it every OAuth endpoint answers 503 temporarily_unavailable and the server is anonymous-only._

## Try it

```bash
curl -s https://lfcarry.com/api/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"find_services","arguments":{"game":"apex","limit":5}}}'
```

## Next

- Checkout inside the assistant with Stripe Link.
- Live stats for more games.
- Notifications to the assistant when a pro answers, instead of polling get_replies.

## Support

Email support@lfcarry.com or see https://lfcarry.com/support.
