Land the LabLand the Lab
CompaniesQuestionsBlogPricing
Sign in
CompaniesQuestionsBlogPricingSign in

Land the Lab in your AI assistant

Connector tool documentation

Land the Lab MCP server · version 1.0.0 · updated October 21, 2026

On this page
  1. Overview
  2. Setup
  3. Authentication
  4. Permissions
  5. Tools
  6. Locked questions and credits
  7. Status handling and errors
  8. Rate limits
  9. Data and privacy
  10. Support

Overview

Land the Lab has interview questions, loops and worked answers for top AI labs and tech companies, reported by engineers who were asked them. The connector brings them into an AI assistant. The assistant acts as the member's interviewer: it walks the company's loop, gives one question at a time, and shows the answer once the member has tried it.

  • Server URL: https://landthelab.com/mcp
  • Transport: MCP Streamable HTTP, stateless. Each JSON-RPC message is one POST, answered as application/json. No sessions and no event stream: GET and DELETE answer 405.
  • Protocol versions: 2025-06-18 (latest), 2025-03-26 and 2024-11-05. Batches are accepted.
  • Methods: initialize, ping, tools/list, tools/call. resources/list, resources/templates/list and prompts/list answer empty lists. Notifications get 202.
  • Who can use it: any Land the Lab member. Accounts are free. New accounts get 3 credits; a paid plan opens every question and answer.
  • Regions: no restrictions. The connector works wherever landthelab.com does.
  • Cost: the connector is free. It never charges money.

Setup

  1. In the assistant, add a custom connector (remote MCP server) with the URL https://landthelab.com/mcp.
  2. Leave authentication on OAuth. There is no key or client secret to paste.
  3. The assistant opens Land the Lab. Sign in (or sign up) and choose Allow.
  4. Ask it about a company's loop or a question.

Step-by-step instructions for Claude, ChatGPT, Grok and Meta Muse are on Land the Lab in your AI assistant.

Authentication

OAuth 2.1 with the authorization code flow and PKCE, following the MCP authorization spec (2025-06-18).

  • Protected resource metadata (RFC 9728): https://landthelab.com/.well-known/oauth-protected-resource/mcp
  • Authorization server metadata (RFC 8414): https://landthelab.com/.well-known/oauth-authorization-server (also at /.well-known/openid-configuration)
  • Dynamic client registration (RFC 7591): POST https://landthelab.com/oauth/register. Public clients (none) by default; client_secret_post and client_secret_basic get a secret. Redirect URIs: any https URI, http on a loopback host (any port), or an app's own scheme.
  • Authorize: GET https://landthelab.com/oauth/authorize with response_type=code and PKCE code_challenge_method=S256 (required; plain is refused).
  • Consent: the member signs in on landthelab.com and sees "<Assistant> wants to use Land the Lab as <you>", what it can do, and where it goes back to. Allow issues a code; Cancel returns access_denied.
  • Token: POST https://landthelab.com/oauth/token with authorization_code or refresh_token (form or JSON body).
  • Scope: prep (the only one).
  • Lifetimes: authorization code 10 minutes, used once; access token 24 hours; refresh token 90 days, used once and replaced on every refresh.
  • Revoking: the connection shows under Settings → API tokens as "<Assistant> (connector)". Revoking it there ends its access and refresh tokens at once. Removing the connector in the assistant also stops it.
  • Tokens from a connection work on /mcp only, not on the site's other APIs.
  • Never put a token, password or other secret in a prompt. The connector never asks for one, and the assistant never receives the member's password.

Permissions

The connector acts as the member who allowed it, with the same access they have on the site. It can:

  • See their prep target and progress, and their credit balance.
  • Read companies, loops and questions, and the answers they've unlocked.
  • Unlock a question with one of their credits, when they ask it to.

It can't change the account, settings, prep target or the member's work, post anything, see other members' private work, or make payments.

Tools

Six tools. Every result has a short Markdown text for the model and the same facts as structuredContent, always with a url on landthelab.com. Every tool is annotated with destructiveHint: false, idempotentHint: true and openWorldHint: false; readOnlyHint is true for all but unlock_question.

ToolClassSensitiveRead limit
get_company_loopReadNo—
search_questionsReadNo—
get_questionReadNoCounts
get_answerReadNoCounts
get_my_prepReadNo—
unlock_questionWriteNo—

None of the tools is sensitive. unlock_question is the only write: it spends one of the member's own credits, never money, and is idempotent. get_my_prep returns the member's own prep target and credit balance, to the member who connected it.

Question row (get_company_loop): { slug, title, type, round, last_asked, possibly_retired, locked, url }.

get_company_loopCompany interview loop

ReadNot sensitive

A company's interview loop: its rounds in order (length, format, AI-tool policy, notes) and the three most asked questions of each round. Use it first when the member names a company.

Inputs

NameTypeRequiredNotes
companystringYesCompany name or slug, e.g. "Anthropic" or "openai".

Output

  • Text: the loop as Markdown, with the company page link, the question count and the last report date, then one heading per round with its top questions (title, slug, type, last asked, [locked]).
  • When no loop is confirmed yet, the rounds are grouped from reported questions, and the text says so.

structuredContent: { company: {name, slug}, url, summary, loop_known, counts: {questions, last_reported}, rounds: [{ key, name, minutes, format, ai_policy, notes, questions_count, top_questions: [question row] }], prep_plan: {title, url} | null }

Side effects

None. Reads only.

Errors

  • `company` is required.
  • `company` must be a string.
  • No company called '<name>' on Land the Lab. Browse them at https://landthelab.com/companies.

search_questionsSearch interview questions

ReadNot sensitive

Searches the questions, recently asked first. Filters by company, question type and, with a company, loop round. Locked questions show only a short teaser.

Inputs

NameTypeRequiredNotes
querystringNoWords in the title (or a company name).
companystringNoCompany name or slug.
typestring (enum)NoOne of: coding, system_design, ml_design, ood, behavioral.
roundstringNoA round key from get_company_loop, e.g. phone_screen or system_design. Needs company.
limitintegerNo1 to 50. Default 20.

Output

  • Text: "N questions found", then one line per question (title, [locked], slug, type, round or companies, last asked) and its excerpt, then a link to see more.
  • A locked question's excerpt is its teaser: the first lines of the prompt, never the whole of it.

structuredContent: { total, url, questions: [{ slug, title, type, round | companies, last_asked, locked, excerpt, url }] }

Side effects

None. Reads only.

Errors

  • `type` must be one of coding, system_design, ml_design, ood, behavioral.
  • `limit` must be a number.
  • `round` needs `company` (rounds belong to a company's loop).
  • No company called '<name>' on Land the Lab. Browse them at https://landthelab.com/companies.
  • `query`, `company`, `type` or `round` must be a string.

get_questionInterview question

ReadNot sensitiveCounts toward the read limit

One question by slug. When it is open or unlocked for the member: the full prompt, with any starter files and tests. When it is locked: its teaser and the lock card. A merged question answers with the question it was merged into.

Inputs

NameTypeRequiredNotes
slugstringYesThe question's slug, from the other tools.

Output

  • Text: title, type, round, companies, last asked and the question's link, then the prompt as Markdown. Diagrams are replaced with a link to the question page.
  • Then one line on the answer: open (use get_answer once the member has tried it), locked (with the lock card's message), or none yet.
  • Locked: the teaser, the lock card's message, and an instruction not to guess or rebuild the prompt.

structuredContent: { slug, title, type, companies, round, last_asked, locked, prompt_markdown | null, teaser | null, answer_available, answer_lock: lock card | null, lock: lock card | null, url }

Side effects

Counts as one question read for the rate limit, like opening the question on the site.

Errors

  • `slug` is required.
  • No question '<slug>'. Find one with search_questions.
  • Too many questions too fast. Wait N seconds.

get_answerOfficial answer

ReadNot sensitiveCounts toward the read limit

The official worked answer, in Markdown, when the member has unlocked the question (with a credit or a paid plan). Otherwise the lock card. Call it only after the member has tried the question or asks for the answer.

Inputs

NameTypeRequiredNotes
slugstringYesThe question's slug.

Output

  • Text: the answer chapter by chapter, headed "Official answer" (or "Top community answer" when no official one is endorsed). Diagrams are replaced with a link to the question page.
  • Locked: "The answer is locked." and the lock card's message. No official answer yet: says so.

structuredContent: { slug, title, url, unlocked, answer_markdown | null, official, minutes }, or when locked { slug, title, url, unlocked: false, lock: lock card }

Side effects

Counts as one question read for the rate limit.

Errors

  • `slug` is required.
  • No question '<slug>'. Find one with search_questions.
  • Too many questions too fast. Wait N seconds.

get_my_prepMy prep

ReadNot sensitive

The member's own prep: target company, interview date and days left, level, how many of the company's questions they have done, the next question to work on, and their credits.

Inputs

No inputs.

Output

  • Text: the target, the date and days left, the level, "Done N of M", the credit balance (or "Paid plan: every question and answer is open.") and the next question.
  • No target yet: says so and links My prep. After the interview date: suggests the debrief.

structuredContent: { url, credits | null, unlimited, target: { company, company_slug, interview_on, days_left, level, role, done, total, prep_plan } | null, next: { slug, title, locked, url } | null }

Side effects

None. Reads only.

Errors

  • None of its own. The common errors below still apply.

unlock_questionUnlock a question

WriteNot sensitive

Spends one of the member's credits to unlock a question for good: its prompt and its answers, on the site and in the assistant. Call it only when the member asks to unlock that question.

Inputs

NameTypeRequiredNotes
slugstringYesThe question's slug. A merged question unlocks the question it was merged into.

Output

  • Unlocked: "Unlocked “<title>” for good: prompt and answers. N credits left."
  • Already unlocked (an earlier unlock, a paid plan): "“<title>” is already open to the member. No credit spent."
  • No credits: "Not unlocked." and the lock card, which points to the plans. This is a normal result, not an error.

structuredContent: { unlocked: true, created, credits, url }, or with no credits { unlocked: false, lock: lock card, url }

Side effects

Writes one unlock record and takes one credit from the member's balance. Credits are free and earned on the site; no money moves. Idempotent: a second call costs nothing. Nothing is deleted.

Errors

  • `slug` is required.
  • No question '<slug>'. Find one with search_questions.

Locked questions and credits

The connector follows the site's rules exactly. A question asked recently or among a company's most asked is premium. Until the member unlocks it, every tool shows only its title, companies, type, round, last asked date and a teaser (the first lines of its prompt). Answers need an unlock on every question.

A member unlocks a question with one credit (prompt and answers, for good) or with a paid plan (everything). New accounts get 3 credits and earn more on the site. A locked result is a normal result, not an error. It carries a lock card:

{ state: "unlock" | "plans" | "sign_in", question_locked, credits, unlock_url, plans_url, message }

  • unlock: the member has credits. The message offers unlock_question (only if they ask) or the question page.
  • plans: no credits left. The message links /pricing.
  • question_locked is true when the prompt itself is locked, false when only the answers are.

The server tells the assistant never to guess, rebuild or paste a locked prompt or answer, and to offer an unlock only when the member says yes.

Status handling and errors

  • Success: HTTP 200 with a JSON-RPC result. For tools/call: { content: [{type: "text", text}], structuredContent, isError: false }.
  • Tool errors: HTTP 200 with isError: true and the message as text (no structuredContent). The messages are written to show the member: a missing or wrong argument, an unknown company or question, an unknown tool (Unknown tool: <name>), arguments that aren't an object, or the read limit. The assistant can fix the call and try again.
  • Protocol errors: JSON-RPC errors. -32700 Parse error (HTTP 400), -32600 Invalid Request, -32602 params must be an object, -32601 Method not found.
  • Not signed in: HTTP 401 with WWW-Authenticate: Bearer resource_metadata="https://landthelab.com/.well-known/oauth-protected-resource/mcp". A token that is unknown, expired or revoked also gets error="invalid_token". Refresh the token, or connect again.
  • Too fast: past the read limit, get_question and get_answer return a tool error Too many questions too fast. Wait N seconds. The same limit on the site answers HTTP 429 with code slow_down, retry_after and a Retry-After header. Wait that long, then try again.
  • Locked: not an error. See Locked questions and credits.
  • OAuth errors: standard {error, error_description} bodies, for example invalid_grant when a code or refresh token is unknown, used or expired (connect again).
  • Wrong method: GET or DELETE /mcp answers 405 with Allow: POST.

Rate limits

  • Opening a question counts as a read, whether on the site or through get_question and get_answer. Both share one count per member.
  • Free accounts: 20 reads a minute and 300 an hour.
  • Paid plans: 60 reads a minute and 900 an hour.
  • The other tools (get_company_loop, search_questions, get_my_prep, unlock_question) don't count.
  • Over a limit, reads wait for the time the error gives. Hitting the hourly limit three times in a day keeps an account on the free limits and stops it earning credits, to stop scraping.

Data and privacy

The connector reads only what the member asks the assistant to look up: companies' interview loops and questions, the prompts and answers their account can open, their prep target and progress, and their credit balance. It writes only the unlock record when they ask to unlock a question. It never receives their password.

We keep a record of the connection (its name and when it was last used) and count tool calls like visits to the site. What the assistant does with the results is governed by the company that runs it. See AI assistants you connect in our privacy policy and our terms.

Support

Questions, problems or a report: hello@landthelab.com.

Land the LabWhat the top AI labs actually ask engineers.
Explore
QuestionsCompaniesAI engineer questionsCompareBlogPricingUse in your AI assistant
Contribute
Share a question
About
Privacy policyTerms of serviceContact
© 2026 Land the Lab
XLinkedInYouTubeBlueskyThreadsInstagram
Esc
Question types