Remoet Mcp

io.github.remoet-labs由 GitHub 账号 remoet-labs 发布v1.0.0更新于 Oct 24, 2026

Job platform for AI agents. Track tech jobs from companies that match your stack.

已验证Streamable HTTP可网页运行效率与工作流网页搜索与抓取

概览

AI 生成的概览

Remoet 的托管求职服务器,让助手按技术栈查找职位与公司、收藏公司、保存职位,并维护公开的求职者档案。

可以做什么
  • 按名称或技术栈搜索公开招聘板上的职位与公司,并查看公司详情
  • 收藏或取消收藏公司,读取收藏公司的新职位动态流以及已保存职位和备注
  • 保存、添加备注和移除职位,投递平台内合作职位或获取雇主的投递链接
  • 读取并编辑公开档案,包括工作经历、项目和教育经历,并设置可见性
  • 创建、列出和删除可分享的链接页,并查看浏览与点击统计
  • 查看账户额度与限制,并列出平台上已批准的第三方应用
适用场景
适合正在找技术岗位的人:让助手按技术栈检索职位、跨会话维护目标公司与已保存职位清单,或起草并维护公开的求职者档案和链接页。
运行要求
远程 HTTP 端点,无需安装。目录类工具(search_jobs、search_listings、get_listing)无需密钥即可使用。个人工具需要免费账户:以 Authorization Bearer 头传入 API 密钥,或在浏览器客户端通过 /oauth 端点进行 OAuth 登录。随附的本地 stdio 服务器无法执行工具调用。
安装前请注意
个人工具会写入真实账户:档案修改、收藏、保存职位、链接页和投递。服务器不强制征得同意,写入前应确认,尤其是 apply_to_job 和删除操作。档案以及工作、项目、教育经历均为公开,可见性设置决定哪些公司能看到你作为候选人。取消收藏会消耗每 30 天有限的额度,且存在每日请求上限。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Remoet Mcp,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.remoet-labs%2Fremoet-mcp/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "remoet": {
      "type": "http",
      "url": "https://api.remoet.dev/mcp/oauth"
    }
  }
}

README

Remoet MCP server

Track tech jobs from companies you love, by asking your AI agent. No account needed to start.

bash
claude mcp add --transport http --scope user remoet https://api.remoet.dev/mcp

What it will and will not do

  • It searches the public job board and, with a free account, keeps your starred companies and saved jobs on file.
  • Every write is a tool call your agent makes. The server does not enforce consent: write tools carry annotations your client can use to ask you first, and apply_to_job tells the agent to get your consent before submitting. For scraped roles (most of the board) it only returns the employer's link, and you apply there.
  • Your profile (name, photo, summary, location, links) and the work, project and education entries you save are public: the profile page shows the profile, work and projects, and education is returned by the public profile API. visibility (NONE, STARRED or ALL) separately controls which companies can see you as a candidate.

Try this first:

I work in Rails, React, and Postgres. Find open roles that use that stack and tell me which companies are hiring for it.

The board, counted 2026-10-06: 11,704 open tech roles at 762 hiring companies, counting a role posted in many cities once. Free for job seekers, no paid plans, and a fixed cap on active stars that get_account reports.

No key vs. free account

The hosted server at https://api.remoet.dev/mcp answers the read-only catalogue tools with no key at all:

  • search_jobs: every role on the open board at remoet.dev/jobs, across all companies.
  • search_listings: companies by name or by the tech stack they hire for.
  • get_listing: one company in detail.

Everything personal (profile, stars, saved jobs, your feed, applications) needs a free account. Get an API key at remoet.dev/onboarding, or sign in with OAuth from a browser client. The same key works for MCP and the REST API. See tools.md for the full tool catalog.

Quick install

Claude Code

Keyless, for searching:

bash
claude mcp add --transport http --scope user remoet https://api.remoet.dev/mcp

With a key, for the personal tools. If you already added the keyless server, remove it first, or the add fails with "already exists" and you stay keyless:

bash
claude mcp remove remoet --scope userclaude mcp add --transport http --scope user remoet https://api.remoet.dev/mcp --header "Authorization: Bearer YOUR_KEY"

Then restart Claude Code (exit and relaunch) so the new server's tools load in a fresh session.

Cursor, VS Code, Windsurf

Add to your client's MCP config (the JSON in .mcp.json works as a template). Drop the headers block to search without a key; to upgrade later, add it back and reload the client:

json
{  "mcpServers": {    "remoet": {      "type": "http",      "url": "https://api.remoet.dev/mcp",      "headers": { "Authorization": "Bearer YOUR_KEY" }    }  }}

Claude Web / Desktop (custom connector)

Add a custom connector pointing at https://api.remoet.dev/mcp/oauth and complete the browser sign-in. No API key to paste.

Remoet also ships as an agentskills.io skill, with short installs on Hermes and OpenClaw.

Hermes

bash
hermes skills tap add remoet-labs/agent-skillshermes skills install remoet-labs/agent-skills/skills/remoet

OpenClaw

bash
openclaw skills install @remoet/remoet

What it does

Remoet derives each company's tech stack from the roles it is hiring for right now, not from self-reported adoption lists that go stale, so an agent can match you to companies by the technologies they actually build on today. Star the ones that fit and their new jobs land in your feed, with the company's full stack unlocked. get_feed is the one stream your agent polls for what landed since: new roles from your starred companies, the daily pick, platform posts. A roundup of the same feed goes out by email on the schedule you set.

One set of limits applies to every account, and get_account reports where you stand against them.

Works with

Claude Code, Claude Desktop, Claude Web, Cursor, VS Code, Windsurf, Codex, and any MCP-compatible client. Also installable as an agentskills.io skill on OpenClaw (via ClawHub) and Hermes Agent.

Auth

Two endpoints, same tools, different auth:

  • https://api.remoet.dev/mcp accepts an API key as a Bearer header (Authorization: Bearer <key>), or none for the catalogue tools. Best for CLI and always-on agents.
  • https://api.remoet.dev/mcp/oauth runs OAuth 2.1 with PKCE and dynamic client registration. Best for browser clients like Claude Web and Desktop custom connectors.

Links

Run locally (not working yet)

This repo ships a local stdio MCP server (Node + TypeScript) plus the metadata MCP clients and directory registries need. The hosted MCP at https://api.remoet.dev/mcp is closed source and remains the source of truth for execution; use it as shown in Quick install.

The local stdio server builds and runs, and it answers tools/list from the snapshot, which is what directory build and scan systems need. It cannot execute a tool call. The proxy demands an mcp-session-id header on the hosted server's initialize response, and the hosted server has been stateless since June 2026, so it never sends one and every call fails at that check. Fixing the proxy is a separate piece of work.

For the catalog-only use:

bash
npm installnpm run buildREMOET_API_KEY="<your-key>" node dist/index.js

Set REMOET_API_KEY to a free key from remoet.dev/onboarding. REMOET_MCP_URL overrides the upstream endpoint (defaults to https://api.remoet.dev/mcp). Docker works the same way, with the stdio server as the container entrypoint:

bash
docker build -t remoet-mcp .docker run --rm -i -e REMOET_API_KEY="<your-key>" remoet-mcp

The published tool catalog lives in data/tools.json, snapshotted from the hosted server's live tools/list. Refresh it from a real tools/list response whenever the hosted tool surface changes, and keep tools.md in step. The snapshot shows the signed-in schema; read the note at the top of tools.md before regenerating.

License

MIT. The wrapper is open; the Remoet backend it points at is a hosted service.

来源:README.md,提交 41cbd54

工具

24

get_profile

View Profile

The user's complete Remoet profile in one call: profile core (summary, links, location, avatar), workExperience, projects, and education (each section entry carries an id for update/delete) plus the current visibility setting. The ids it returns are the ones the save_* and delete_profile_item tools take. What the fields affect: the summary is the first thing companies read; the technologies arrays on work entries and projects feed job matching, so an empty array drops that entry out of matching; visibility NONE hides the user from every company's candidate list, STARRED shows them to the companies they have starred, ALL to every company.

无需输入参数。

update_profile

Update Profile

Update the user's Remoet profile core and/or their visibility. Only provide the fields you want to change. Omitted fields are left as-is; pass null to clear a field. If the source data (CV, website, etc.) is missing a field, ask the user rather than guessing. Never copy placeholder text like "lorem ipsum". VISIBILITY: pass visibility to control who can see the profile in company candidate lists: NONE (hidden), STARRED (only companies the user has starred, the recommended two-way match), or ALL (every company). Explain the trade-off before changing it. SUMMARY WRITING GUIDE: the summary is the most important field, the first thing companies read. Pattern: [Role] with [X years] experience in [core tech stack]. [One differentiator or achievement]. Example: "Senior Full-Stack Developer with 8 years of experience in React, Node.js, and AWS. Built and scaled a SaaS platform serving 200K users." Under 500 characters. Avoid generic fluff like "passionate developer". Be specific and quantifiable.

输入参数urlnameslugemailphonesummarylocationavatarUrlgithubUrltwitterUrlvisibilityyoutubeUrl另有 2 个

save_work_experience

Save Work Experience

Add or update a work experience entry (upsert). Omit id to create a new entry (title and startDate are required); pass an id (from get_profile) to update an existing one, changing only the fields you send. Every description should cover WHAT was built, HOW (technologies), IMPACT (users served, performance gains, revenue, uptime), and SCOPE (team size, scale). Push for measurable outcomes ("Built React frontend" -> "...serving 50K users, 40% faster"). The technologies array feeds job matching. Saving without an id always creates a new entry. Saved entries appear on the user's public profile, so they should describe real experience. Ask the user to confirm vague dates or fill real gaps.

输入参数idtitleendDateisRemoteisCurrentstartDatecompanyUrlcompanyNamedescriptiontechnologies

save_project

Save Project

Add or update a portfolio project (upsert). Omit id to create (title and shortDescription are required); pass an id (from get_profile) to update, changing only the fields you send. Projects are the #1 differentiator for junior/mid developers. Help the user recognize work they might not think of: side projects, open-source contributions, hackathon entries, internal tools, time-saving scripts, blogs, personal apps. Saving without an id always creates a new entry. Saved entries appear on the user's public profile, so they should describe real work.

输入参数idroletitledemoUrlendDaterepoUrlisRemoteisCurrentstartDatedescriptionisOpenSourcetechnologies另有 1 个

save_education

Save Education

Add or update an education entry (upsert). Omit id to create (institution is required); pass an id (from get_profile) to update, changing only the fields you send. Ask about degrees, bootcamps, and notable certifications. Confirm approximate dates with the user rather than guessing; don't fabricate. Saving without an id always creates a new entry.

输入参数idendDateisCurrentstartDatestudyLeveldescriptioninstitutionfieldOfStudyinstitutionUrl

delete_profile_item

Delete Profile Item

Delete a profile item: a work experience entry, a project, or an education entry (set type accordingly). Use this to clean up duplicates, placeholder/test entries, or clearly wrong data. Ids come from get_profile. Always confirm with the user before deleting anything that could be real.

输入参数id必填type必填

search_listings

Search Companies

Works without a Remoet account, except starred: true. Search companies on Remoet, or list the user's starred companies (starred: true). Returns a summary per result. Full detail (description, perks, URLs) is on get_listing, by slug. Job boards and aggregators are excluded; talent networks that post direct roles (e.g. Toptal) appear as companies. CRITICAL, star quality: only star companies whose tech stack OVERLAPS the user's skills (a JavaScript dev should not star a Go/Rust-only shop). Stars are the user's job-feed noise filter, so an irrelevant star pollutes their feed with jobs they can't use. Judge overlap by each result's matchedTechStack: the technologies from your techStack filter that the company actually uses, checked against its FULL stack (not the capped preview), so do NOT skip a company just because the visible preview omits the user's skills. An empty matchedTechStack means the result matched on text, not tags. techStackCount is the company's true tag total; the full stack unlocks on starring. techStack matches AT LEAST ONE filtered technology by default; set techStackMatch:"all" to require every one. starred: true limits results to the user's starred companies; combined with techStack it returns matchedTechStack per starred company, which shows any star with zero overlap. Example: search_listings({ searchQuery: "payments", techStack: ["TypeScript", "React"], experienceLevel: ["mid"] }).

输入参数pagesortBystarredpageSizetechStacksearchQuerytechStackMatchexperienceLevel

get_listing

View Company Details

Works without a Remoet account. Get detailed information about a specific company listing by its slug. Use this to review a company before deciding whether to star it. Returns the company's full description, perks, job count, and URLs. NOTE: the tech stack is a small preview unless the company is starred. Starring unlocks the full stack (techStackCount shows the true total, e.g. a 3-tag preview of 147). Pass checkTechStack with the user's technologies to verify overlap against the FULL stack. Matched ones come back in matchedTechStack and lead the preview, same contract as search_listings. The star budget is reported by get_account.

输入参数slug必填checkTechStack

star_listing

Star Company

Star/save a company listing. Starring subscribes you to their job postings. Starred company jobs appear in get_starred_jobs. Starring also unlocks the company's FULL tech stack (unstarred listings only show a small preview). Starring is FREE. It does not consume budget. However, there is a limit on how many active stars you can have at once. Remaining star slots are reported by get_account. CRITICAL: Only star companies where the user's tech stack genuinely overlaps with the company's tech stack. A React/Node developer should NOT star a company that only uses Go or Java. Irrelevant stars pollute the job feed with noise. Every star must be a deliberate, high-quality match. A company returned by a techStack-filtered search_listings call confirms the technologies in its matchedTechStack field (the filter checks the full stack, including the part hidden from the preview), so judge overlap by matchedTechStack, not the visible preview.

输入参数listingId必填

unstar_listing

Unstar Company

Remove a star from a company listing. WARNING: Unstarring consumes from your unstar budget (per 30-day period), EXCEPT when the user is over their star cap (then trimming back to the limit is free). This prevents unlimited cycling of stars. The remaining unstar budget is reported by get_account. Only unstar if the company is truly not relevant. Do NOT mass-unstar to get a user under their cap unless they explicitly ask. If they are over cap, surface the choice and let them decide which to keep.

输入参数listingId必填

search_jobs

Search Public Jobs

Works without a Remoet account. Search Remoet's PUBLIC job catalogue: every role on the open board at remoet.dev/jobs, across all companies, not just the ones the user has starred. No star is needed and none is consumed. Use this to answer "what is out there" for any technology, title or company; use get_starred_jobs instead for the user's own curated feed. Each result carries the role's public Remoet URL, which is a real page anyone can open, plus applyUrl (the employer's own posting, where an application actually happens) and companySlug (the same slug get_listing takes, for company detail). Roles that Remoet is not permitted to publish never appear here. Duplicate postings of one role at a company are collapsed into a single result, so totalCount is the number of distinct roles, not raw postings. duplicateCount is how many postings collapsed into it; boards usually duplicate a role per location, but nothing guarantees that, so do NOT report it as a number of locations. firstSeenAt is when Remoet first saw the role, not when the employer posted it, and lastVerifiedAt is the last time Remoet confirmed it was still open. Filters are searchQuery (title, Remoet summary and tech stack), techStack (ANY of the given technologies, or EVERY one under techStackMatch: "all", which is how you express a must-have stack), companySlug, location, remotePolicy, experienceLevel and salaryMin. A salaryMin floor drops every role Remoet holds no numeric salary for, which is roughly 45% of the board, so use it when salary is a hard requirement and leave it off otherwise. location matches the canonical places Remoet stores per role rather than the free-text location string, so a country also finds roles that name only one of its cities; searchQuery does NOT read location, so filter by place with location and not by typing the place into searchQuery. When a search returns nothing, the hint says which filter emptied it and how many roles dropping that one filter would return, so act o

输入参数pagesortBylocationpageSizesalaryMinsortOrdertechStackcompanySlugsearchQueryremotePolicytechStackMatchexperienceLevel

get_starred_jobs

View Job Feed

Get job postings from the user's starred companies. This is the user's own curated feed. If the user has no stars, this returns nothing. In that case, use search_jobs instead: it reads the public catalogue. Supports filtering by search query, location, tech stack, remote policy, experience level, and minimum salary. Results are paginated. Same-title postings from one company are grouped into a single row: postingCount and postingLocations show how many raw postings it represents and where (boards often post one role per location). Results can be bookmarked with save_job. A single filtered query can miss good roles; an unfiltered call returns the whole feed, paginated. The techStack filter uses OR logic: specifying ["React", "TypeScript", "Node.js"] returns jobs matching AT LEAST ONE of them (technologies are auto-normalized and matched across spelling variants), so filter by the technologies that genuinely matter and judge each job's fit from its own techStack field. Use searchQuery for role-based searches ("senior engineer", "frontend", "platform") and techStack for technology-based filtering. OVER-CAP WARNING: if the response includes a "starsOverCap" field, the user has more starred companies than the limit allows and the surplus is scheduled for PERMANENT deletion on the given date. Proactively tell the user (count + date) and let them choose which companies to unstar down to the limit. NEVER unstar companies on the user's behalf just to get under the limit unless they explicitly ask you to.

输入参数pagesortBypageSizesalaryMinsortOrdertechStacksearchQueryremotePolicylocationQuerytechStackMatchexperienceLevel

save_job

Save Job

Save a job to the user's list for later. Supports both AI-extracted jobs (from search_jobs or get_starred_jobs) and internal partner jobs. This gives the agent memory across sessions. Saved jobs persist so the user doesn't lose track of interesting roles. Optionally attach a note (e.g. "Great fit for React skills", "Follow up next week"). Each job can only be saved once.

输入参数notejobId必填jobType

get_saved_jobs

View Saved Jobs

Get the user's saved jobs list. This is the user's job search memory: shows all jobs they've bookmarked across sessions, with notes and job details. Includes both AI-extracted jobs and internal partner jobs (see jobType field). It shows the user's existing pipeline, so jobs they have already saved can be told apart from new ones. Paginated, newest saves first. Each saved job includes isActive and deactivatedAt fields. If isActive is false, the job is no longer appearing on the company's careers page. This usually means it was filled or expired, but could also be a temporary scraper issue (there is a grace period before deactivation). A saved job the user can no longer see (its company is no longer starred, or a partner role was unpublished) keeps its entry but comes back with job: null, locked: true and a lockedReason to pass on. If job is null without locked, the listing was deleted entirely. A deactivated job may still be open on the company's careers page.

输入参数pagepageSize

update_saved_job_note

Update Saved Job Note

Update the note on a saved job. Use this to add context, track application status, or record follow-up reminders. Pass null to clear the note.

输入参数note必填savedJobId必填

unsave_job

Remove Saved Job

Remove a job from the user's saved list. Saved job ids come from get_saved_jobs. Confirm with the user before removing.

输入参数savedJobId必填

get_feed

View Feed

The user's dashboard feed as ONE composed stream, chronological newest first. Each entry has a kind: 'item' (per-company job items from their starred companies - the company, when it landed, role snapshots with job id/title/application URL/salary/remote policy/experience level/tech stack, and per-role flags isActive, savedJobId, matchesFilters, plus per-item isStarred: false means the user unstarred that company since), 'job_of_the_day' (one daily editorial pick from anywhere on the platform - a discovery candidate worth surfacing), 'blog' and 'broadcast' (platform content; usually skim). Pass nextCursor back to page deeper; omit it for the newest page.

输入参数cursorpageSize

get_digests

View Digests

HISTORICAL ONLY: the user's archived job digests, the email summaries Remoet used to send about new jobs from their starred companies. No new digest has been generated since 2026-07-06, when the feed roundup replaced that pipeline, so this returns nothing at all for an account created since then. What carries new roles now is get_feed (the composed dashboard stream, and what the roundup emails are built from); for searching, use get_starred_jobs or search_jobs. Reach for this tool only when the user asks about their old email summaries by name. Without an id: the 20 most recent as lightweight summaries (id, title, frequency, jobCount, createdAt). With an id: that digest's full markdown body (each job's title, application URL, salary, remote policy, experience level, tech stack).

输入参数id

get_apps

Browse Apps

List approved apps built on the Remoet platform. These are community and official apps that extend Remoet's functionality. Each app has a repo URL for deployment and a demo URL to try it out. Use this to help users discover tools that complement their Remoet workflow, e.g. portfolio sites, CV generators, job trackers, etc. You can filter by category or tag.

输入参数tagpagecategorypageSize

get_linktrees

View Link Trees

The user's link tree pages: shareable single-page URLs for a CV, email signature, or job application, with per-link view/click tracking so recruiter engagement is measurable. Without a slug: all of the user's link trees (each with its id and slug). With a slug: that page's content plus its engagement data (views, clicks per link), which answers "has anyone looked at my link tree?".

输入参数slug

create_linktree

Create Link Tree

Create a link tree page: a shareable page with the user's links (social media, portfolio, GitHub, etc.). Each account can create up to 10. The slug becomes the public URL. Slug rules: 5-20 characters, lowercase letters, numbers, and hyphens only, cannot start/end with a hyphen. Must be unique. Use the user's name or handle as a base for the slug. The usual links are the ones on the user's profile (githubUrl, linkedinUrl, twitterUrl, url), which get_profile returns. Remoet tracks views and link clicks on each link tree, so a link tree URL on a CV or application shows whether a recruiter opened it.

输入参数slug必填links必填title必填description必填

delete_linktree

Delete Link Tree

Delete a link tree page. Link tree ids come from get_linktrees. Confirm with the user before deleting.

输入参数id必填

apply_to_job

Apply to Job

Apply to a job on behalf of the user, or get its application link. Two outcomes by job type: internal jobs (posted directly through Remoet's partner system) are applied to end-to-end and return the created application; scraped jobs (most of the platform) return applicationType "external" with the applicationUrl where the user applies on the company's site. Share that link with the user; Remoet cannot submit external applications for them. Applying to an internal job submits a real application in the user's name, so it needs the user's explicit consent. Internal jobs must be published and not expired, and the user can only apply once per job: duplicate applications are rejected.

输入参数jobId必填

get_account

View Account

The user's account status in one call: every budget the platform enforces (active stars vs cap, unstars used vs the 30-day unstar budget, MCP requests today vs daily cap, REST API requests today vs daily cap, each with a resetsAt), the remaining limits (link-tree cap), and any over-cap/grace state. Calling it is free and never counts against a cap. Every limit is a plain number. Remoet is free. There is nothing to upgrade to and nothing to sell: if the user is at a limit, help them work within it.

无需输入参数。

版本历史

1
  1. v1.0.0最新Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分