Token导航 LogoToken导航TokenDH.com
Visa Jobs MCP logo
搜索检索stdio官方级别未说明来源级核验

Visa Jobs MCP

MCP Server

一个帮助用户根据LinkedIn搜索匹配签证偏好职位的本地化MCP服务器,支持雇主赞助历史筛选和隐私保护数据存储。

工具数

40

提示词数

0

GitHub Stars

3

资源数

0
Go隐私保护搜索

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

neosh11

提供方

neosh11

最后核验

2026/5/17 20:21

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

python3 scripts/generate_contract_docs.py

详细介绍

visa-jobs-mcp 是一个MCP服务器,可帮助代理从新的LinkedIn搜索中找到相关工作,并具有可选的签证感知过滤功能。

它是为速度和实际结果而构建的:

  • 在某个位置搜索工作,
  • 将雇主与赞助历史进行匹配,
  • 返回带有链接和联系信息的可操作结果,
  • 将用户数据保存在本地。

开始使用

1.在macOS上安装(Homebrew)

brew tap neosh11/visa-jobs-mcp
brew install neosh11/visa-jobs-mcp/visa-jobs-mcp

2.在macOS/Linux上安装(bash安装程序)

curl -fsSL https://raw.githubusercontent.com/neosh11/visa-jobs-mcp/main/scripts/install.sh | bash

固定特定版本:

curl -fsSL https://raw.githubusercontent.com/neosh11/visa-jobs-mcp/main/scripts/install.sh | bash -s -- --version 0.3.1

3.在Windows上安装(PowerShell安装程序)

irm https://raw.githubusercontent.com/neosh11/visa-jobs-mcp/main/scripts/install.ps1 | iex

固定特定版本:

$env:VISA_JOBS_MCP_VERSION = "0.3.1"
irm https://raw.githubusercontent.com/neosh11/visa-jobs-mcp/main/scripts/install.ps1 | iex

4.在Codex(macOS/Linux)中注册

codex mcp add visa-jobs-mcp --env VISA_JOB_SITES=linkedin -- visa-jobs-mcp

在Codex(Windows PowerShell)中注册:

codex mcp add visa-jobs-mcp --env VISA_JOB_SITES=linkedin -- "$env:LOCALAPPDATA\\Programs\\visa-jobs-mcp\\bin\\visa-jobs-mcp.exe"

验证:

codex mcp list
codex mcp get visa-jobs-mcp

5.在聊天中使用它

在新的食典会议上,自然地问:

  • Find IT jobs in Delhi for my skills.
  • Set my visa preference to E3 and find software engineer jobs in New York that sponsor E3.

从源代码构建(可选)

go build -o visa-jobs-mcp ./cmd/visa-jobs-mcp
./visa-jobs-mcp --version

如果你需要刷新 data/companies.csv 从源代码运行:

./scripts/run_internal_pipeline.sh

注意:MCP运行时仅支持Go。Python只需要用于运行内部数据集管道的维护人员。

实时LinkedIn E2E(手册)

对LinkedIn进行真正的端到端搜索(不是简单的测试):

./scripts/run_live_linkedin_e2e.sh

可选超时覆盖:

VISA_E2E_TEST_TIMEOUT=8m ./scripts/run_live_linkedin_e2e.sh

可选现场测试参数:

VISA_E2E_VISA_TYPE=E3 \
VISA_E2E_LOCATION="New York, NY" \
VISA_E2E_JOB_TITLE="Software Engineer" \
./scripts/run_live_linkedin_e2e.sh

它支持什么

  • 仅限LinkedIn搜索。
  • 一般技能/地点求职,无需签证设置。
  • 可选的签证偏好匹配 preferred_visa_types 已设置。
  • 支持分页和恢复的搜索会话。
  • 保存的作业和忽略的作业。
  • 雇主联系人提取(如有)。
  • 本地第一私有数据存储。
  • 不使用代理。
  • MCP运行时内没有LLM调用(代理处理推理)。

核心MCP工具

  • start_job_search
  • get_job_search_status
  • get_job_search_results
  • set_user_preferences
  • start_visa_job_search
  • get_visa_job_search_status
  • get_visa_job_search_results
  • save_job_for_later
  • ignore_job
  • list_saved_jobs
  • list_ignored_jobs
  • get_mcp_capabilities

提示:让客服打电话 get_mcp_capabilities 首先是机器可读的合同。

MCP合同(已生成)

Expand MCP Contract (auto-generated)

生成自 get_mcp_capabilities() 通过 scripts/generate_contract_docs.py.

服务器

  • server: visa-jobs-mcp
  • version: 0.3.1
  • capabilities_schema_version: 1.2.0
  • confidence_model_version: v1.1.0-rules-go

搜索前需要

  • tool: start_job_search
  • required_fields: user_id

设计决策

  • agent_is_reasoning_layer: True
  • background_search_runs_local_persistence: True
  • data_not_shared_or_sold: True
  • first_class_job_management: True
  • free_forever: True
  • fresh_job_search_per_query: True
  • ignored_companies_local_persistence: True
  • ignored_jobs_local_persistence: True
  • license: MIT
  • llm_api_keys_required_by_mcp: False
  • llm_runtime_inside_mcp: False
  • no_fake_reviews_or_bot_marketing: True
  • proxies_used: False
  • rate_limit_backoff_retries: True
  • saved_jobs_local_persistence: True
  • search_sessions_local_persistence: True
  • strict_user_visa_match: False
  • strictness_modes_supported: ['balanced', 'strict']
  • supported_job_sites: ['linkedin']
  • visa_matching_optional: True

默认值

  • dataset_stale_after_days: 30
  • job_db_path: data/app/visa_jobs.db
  • max_scan_results: 1200
  • max_search_sessions_per_user: 20
  • rate_limit_initial_backoff_seconds: 2
  • rate_limit_max_backoff_seconds: 30
  • rate_limit_retry_window_seconds: 180
  • scan_multiplier: 8
  • search_run_ttl_seconds: 21600
  • search_session_ttl_seconds: 21600
  • strictness_mode: strict
  • tool_call_soft_timeout_seconds: 48

工具

工具描述必需输入可选输入
get_mcp_capabilities返回MCP功能、工具和代理自我发现合同。--
set_user_preferences保存用户的签证偏好,以便进行可选的签证特定匹配。user_id, preferred_visa_types-
set_user_constraints保存用于个性化指导的紧迫性和工作模式限制。user_id-
get_user_preferences获取已保存的用户首选项和约束。user_id-
get_user_readiness报告用户和本地数据集是否已准备好进行搜索。user_id-
find_related_titles返回相邻的角色头衔以扩大低收益搜索。job_title-
add_user_memory_line添加一条个人资料记忆行(技能、目标、恐惧、限制)。user_id, content-
query_user_memory_blob使用可选的文本过滤查询用户的本地内存blobuser_id-
delete_user_memory_line从本地blob中按id删除一行内存。user_id, line_id-
save_job_for_later将作业保存到用户的本地候选名单中以供跟进。user_idjob_url, result_id, session_id
list_saved_jobs按逆时间顺序列出已保存的作业。user_id-
delete_saved_job从本地候选名单中删除一个已保存的作业。user_id, saved_job_id-
ignore_job从此用户的未来结果中隐藏一个作业。user_idjob_url, result_id, session_id
list_ignored_jobs按逆时间顺序列出忽略的作业。user_id-
unignore_job按id取消隐藏以前忽略的作业user_id, ignored_job_id-
ignore_company在以后的搜索中隐藏公司的所有工作。user_id-
list_ignored_companies按逆时间顺序列出被忽略的公司。user_id-
unignore_company从忽略列表中删除一家公司。user_id, ignored_company_id-
mark_job_applied将作业标记为已应用并保持管道状态。user_id-
update_job_stage更新跟踪作业的生命周期阶段(保存/申请/面试等)。user_id, stage-
list_jobs_by_stage列出按生命周期阶段筛选的跟踪作业。user_id, stage-
add_job_note在跟踪的作业记录中附加或追加注释。user_id, note-
list_recent_job_events列出最近的阶段转换和生命周期事件。user_id-
get_job_pipeline_summary按阶段汇总一个用户的跟踪管道计数。user_id-
clear_search_session删除用户的一个缓存搜索会话或所有会话。user_id-
export_user_data跨商店导出用户的所有本地记录。user_id-
delete_user_data永久删除用户的所有本地记录。user_id, confirm-
get_best_contact_strategy为工作推荐最佳的外联渠道/联系人。user_id-
generate_outreach_message根据用户和角色制定一份实用的外联草案。user_id-
start_job_search无需签证偏好即可开始后台求职。location, job_title, user_id-
get_job_search_status轮询后台作业搜索运行的增量进度/事件。user_id, run_id-
get_job_search_results从后台作业搜索运行中获取当前结果页面。user_id, run_id-
cancel_job_search请求取消正在进行的后台作业搜索运行。user_id, run_id-
start_visa_job_search启动长扫描的后台搜索运行。location, job_title, user_id-
get_visa_job_search_status轮询后台搜索运行的增量进度/事件。user_id, run_id-
get_visa_job_search_results从后台搜索运行中获取当前结果页面。user_id, run_id-
cancel_visa_job_search请求取消正在进行的后台运行。user_id, run_id-
discover_latest_dol_disclosure_urls发现最新的DOL LCA/PERM披露来源。--
run_internal_dol_pipeline运行内部管道以刷新赞助商公司数据集。--
refresh_company_dataset_cache清除并重新加载内存中的公司数据集缓存。--

搜索响应字段

  • run
  • status
  • stats
  • guidance
  • dataset_freshness
  • pagination
  • recovery_suggestions
  • jobs[].result_id
  • jobs[].job_url
  • jobs[].title
  • jobs[].company
  • jobs[].location
  • jobs[].site
  • jobs[].date_posted
  • jobs[].description_fetched
  • jobs[].description
  • jobs[].description_excerpt
  • jobs[].salary_text
  • jobs[].salary_currency
  • jobs[].salary_interval
  • jobs[].salary_min_amount
  • jobs[].salary_max_amount
  • jobs[].salary_source
  • jobs[].job_type
  • jobs[].job_level
  • jobs[].company_industry
  • jobs[].job_function
  • jobs[].job_url_direct
  • jobs[].is_remote
  • jobs[].employer_contacts
  • jobs[].visa_counts
  • jobs[].visas_sponsored
  • jobs[].visa_match_strength
  • jobs[].eligibility_reasons
  • jobs[].confidence_score
  • jobs[].confidence_model_version
  • jobs[].agent_guidance

路径

  • dataset_default: data/companies.csv
  • ignored_companies_default: data/config/ignored_companies.json
  • ignored_jobs_default: data/config/ignored_jobs.json
  • job_management_db_default: data/app/visa_jobs.db
  • pipeline_manifest_default: data/pipeline/last_run.json
  • saved_jobs_default: data/config/saved_jobs.json
  • search_runs_store_default: data/config/search_runs.json
  • search_session_store_default: data/config/search_sessions.json
  • user_memory_blob_default: data/config/user_memory_blob.json
  • user_preferences_default: data/config/user_preferences.json

反对

  • build_company_dataset_from_dol_disclosures -> run_internal_dol_pipeline (soft_deprecated)

Raw Capabilities JSON

{
  "capabilities_schema_version": "1.2.0",
  "confidence_model_version": "v1.1.0-rules-go",
  "defaults": {
    "dataset_stale_after_days": 30,
    "job_db_path": "data/app/visa_jobs.db",
    "max_scan_results": 1200,
    "max_search_sessions_per_user": 20,
    "rate_limit_initial_backoff_seconds": 2,
    "rate_limit_max_backoff_seconds": 30,
    "rate_limit_retry_window_seconds": 180,
    "scan_multiplier": 8,
    "search_run_ttl_seconds": 21600,
    "search_session_ttl_seconds": 21600,
    "strictness_mode": "strict",
    "tool_call_soft_timeout_seconds": 48
  },
  "deprecations": [
    {
      "name": "build_company_dataset_from_dol_disclosures",
      "replacement": "run_internal_dol_pipeline",
      "status": "soft_deprecated"
    }
  ],
  "design_decisions": {
    "agent_is_reasoning_layer": true,
    "background_search_runs_local_persistence": true,
    "data_not_shared_or_sold": true,
    "first_class_job_management": true,
    "free_forever": true,
    "fresh_job_search_per_query": true,
    "ignored_companies_local_persistence": true,
    "ignored_jobs_local_persistence": true,
    "license": "MIT",
    "llm_api_keys_required_by_mcp": false,
    "llm_runtime_inside_mcp": false,
    "no_fake_reviews_or_bot_marketing": true,
    "proxies_used": false,
    "rate_limit_backoff_retries": true,
    "saved_jobs_local_persistence": true,
    "search_sessions_local_persistence": true,
    "strict_user_visa_match": false,
    "strictness_modes_supported": [
      "balanced",
      "strict"
    ],
    "supported_job_sites": [
      "linkedin"
    ],
    "visa_matching_optional": true
  },
  "pagination_contract": {
    "next_step": "use pagination.next_offset to request the next page",
    "offset_model": "offset is applied to accepted jobs, not raw scraped jobs",
    "result_id_aliases": "use jobs[].result_id in save_job_for_later/ignore_job to avoid URL copy friction",
    "scan_behavior": "server can increase raw scan depth when auto_expand_scan=true",
    "session_behavior": "pass search_session.session_id for stable paging without redundant rescans"
  },
  "paths": {
    "dataset_default": "data/companies.csv",
    "ignored_companies_default": "data/config/ignored_companies.json",
    "ignored_jobs_default": "data/config/ignored_jobs.json",
    "job_management_db_default": "data/app/visa_jobs.db",
    "pipeline_manifest_default": "data/pipeline/last_run.json",
    "saved_jobs_default": "data/config/saved_jobs.json",
    "search_runs_store_default": "data/config/search_runs.json",
    "search_session_store_default": "data/config/search_sessions.json",
    "user_memory_blob_default": "data/config/user_memory_blob.json",
    "user_preferences_default": "data/config/user_preferences.json"
  },
  "rate_limit_contract": {
    "failure_message": "asks agent to retry shortly when the retry window is exhausted",
    "max_retry_window_seconds": 180,
    "retry_behavior": "automatic exponential backoff on rate-limit errors (429/Too Many Requests)"
  },
  "required_before_search": {
    "required_fields": [
      "user_id"
    ],
    "tool": "start_job_search"
  },
  "search_response_fields_for_agents": [
    "run",
    "status",
    "stats",
    "guidance",
    "dataset_freshness",
    "pagination",
    "recovery_suggestions",
    "jobs[].result_id",
    "jobs[].job_url",
    "jobs[].title",
    "jobs[].company",
    "jobs[].location",
    "jobs[].site",
    "jobs[].date_posted",
    "jobs[].description_fetched",
    "jobs[].description",
    "jobs[].description_excerpt",
    "jobs[].salary_text",
    "jobs[].salary_currency",
    "jobs[].salary_interval",
    "jobs[].salary_min_amount",
    "jobs[].salary_max_amount",
    "jobs[].salary_source",
    "jobs[].job_type",
    "jobs[].job_level",
    "jobs[].company_industry",
    "jobs[].job_function",
    "jobs[].job_url_direct",
    "jobs[].is_remote",
    "jobs[].employer_contacts",
    "jobs[].visa_counts",
    "jobs[].visas_sponsored",
    "jobs[].visa_match_strength",
    "jobs[].eligibility_reasons",
    "jobs[].confidence_score",
    "jobs[].confidence_model_version",
    "jobs[].agent_guidance"
  ],
  "server": "visa-jobs-mcp",
  "tools": [
    {
      "description": "Return MCP capabilities, tools, and contracts for agent self-discovery.",
      "name": "get_mcp_capabilities",
      "required_inputs": []
    },
    {
      "description": "Save the user's visa preferences for optional visa-specific matching.",
      "name": "set_user_preferences",
      "required_inputs": [
        "user_id",
        "preferred_visa_types"
      ]
    },
    {
      "description": "Save urgency and work-mode constraints used for personalized guidance.",
      "name": "set_user_constraints",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "Fetch the saved user preferences and constraints.",
      "name": "get_user_preferences",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "Report whether the user and local dataset are ready for search.",
      "name": "get_user_readiness",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "Return adjacent role titles to widen low-yield searches.",
      "name": "find_related_titles",
      "required_inputs": [
        "job_title"
      ]
    },
    {
      "description": "Append a profile memory line (skills, goals, fears, constraints).",
      "name": "add_user_memory_line",
      "required_inputs": [
        "user_id",
        "content"
      ]
    },
    {
      "description": "Query the user's local memory blob with optional text filtering.",
      "name": "query_user_memory_blob",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "Delete one memory line by id from the local blob.",
      "name": "delete_user_memory_line",
      "required_inputs": [
        "user_id",
        "line_id"
      ]
    },
    {
      "description": "Save a job to the user's local shortlist for follow-up.",
      "name": "save_job_for_later",
      "optional_inputs": [
        "job_url",
        "result_id",
        "session_id"
      ],
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "List saved jobs in reverse-chronological order.",
      "name": "list_saved_jobs",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "Remove one saved job from the local shortlist.",
      "name": "delete_saved_job",
      "required_inputs": [
        "user_id",
        "saved_job_id"
      ]
    },
    {
      "description": "Hide one job from future results for this user.",
      "name": "ignore_job",
      "optional_inputs": [
        "job_url",
        "result_id",
        "session_id"
      ],
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "List ignored jobs in reverse-chronological order.",
      "name": "list_ignored_jobs",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "Unhide a previously ignored job by id.",
      "name": "unignore_job",
      "required_inputs": [
        "user_id",
        "ignored_job_id"
      ]
    },
    {
      "description": "Hide all jobs from a company in future searches.",
      "name": "ignore_company",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "List ignored companies in reverse-chronological order.",
      "name": "list_ignored_companies",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "Remove one company from the ignored list.",
      "name": "unignore_company",
      "required_inputs": [
        "user_id",
        "ignored_company_id"
      ]
    },
    {
      "description": "Mark a job as applied and persist pipeline state.",
      "name": "mark_job_applied",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "Update lifecycle stage for a tracked job (saved/applied/interview/etc).",
      "name": "update_job_stage",
      "required_inputs": [
        "user_id",
        "stage"
      ]
    },
    {
      "description": "List tracked jobs filtered by lifecycle stage.",
      "name": "list_jobs_by_stage",
      "required_inputs": [
        "user_id",
        "stage"
      ]
    },
    {
      "description": "Attach or append a note to a tracked job record.",
      "name": "add_job_note",
      "required_inputs": [
        "user_id",
        "note"
      ]
    },
    {
      "description": "List recent stage transitions and lifecycle events.",
      "name": "list_recent_job_events",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "Summarize tracked pipeline counts by stage for one user.",
      "name": "get_job_pipeline_summary",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "Delete one cached search session or all sessions for a user.",
      "name": "clear_search_session",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "Export all local records for a user across stores.",
      "name": "export_user_data",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "Permanently delete all local records for a user.",
      "name": "delete_user_data",
      "required_inputs": [
        "user_id",
        "confirm"
      ]
    },
    {
      "description": "Suggest best outreach channel/contact for a job.",
      "name": "get_best_contact_strategy",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "Generate a practical outreach draft tailored to user and role.",
      "name": "generate_outreach_message",
      "required_inputs": [
        "user_id"
      ]
    },
    {
      "description": "Start a background job search without requiring visa preferences.",
      "name": "start_job_search",
      "required_inputs": [
        "location",
        "job_title",
        "user_id"
      ]
    },
    {
      "description": "Poll incremental progress/events for a background job search run.",
      "name": "get_job_search_status",
      "required_inputs": [
        "user_id",
        "run_id"
      ]
    },
    {
      "description": "Fetch current result page from a background job search run.",
      "name": "get_job_search_results",
      "required_inputs": [
        "user_id",
        "run_id"
      ]
    },
    {
      "description": "Request cancellation of an in-progress background job search run.",
      "name": "cancel_job_search",
      "required_inputs": [
        "user_id",
        "run_id"
      ]
    },
    {
      "description": "Start a background search run for long scans.",
      "name": "start_visa_job_search",
      "required_inputs": [
        "location",
        "job_title",
        "user_id"
      ]
    },
    {
      "description": "Poll incremental progress/events for a background search run.",
      "name": "get_visa_job_search_status",
      "required_inputs": [
        "user_id",
        "run_id"
      ]
    },
    {
      "description": "Fetch current result page from a background search run.",
      "name": "get_visa_job_search_results",
      "required_inputs": [
        "user_id",
        "run_id"
      ]
    },
    {
      "description": "Request cancellation of an in-progress background run.",
      "name": "cancel_visa_job_search",
      "required_inputs": [
        "user_id",
        "run_id"
      ]
    },
    {
      "description": "Discover latest DOL LCA/PERM disclosure sources.",
      "name": "discover_latest_dol_disclosure_urls",
      "required_inputs": []
    },
    {
      "description": "Run internal pipeline to refresh sponsor-company dataset.",
      "name": "run_internal_dol_pipeline",
      "required_inputs": []
    },
    {
      "description": "Clear and reload in-memory company dataset cache.",
      "name": "refresh_company_dataset_cache",
      "required_inputs": []
    }
  ],
  "version": "0.3.1"
}

使用以下命令重新生成此部分和网站合同块:

python3 scripts/generate_contract_docs.py

验证生成的块是否为最新:

python3 scripts/generate_contract_docs.py --check

手动命令行界面(可选)

检查二进制版本:

visa-jobs-mcp --version

直接运行MCP服务器(用于调试):

visa-jobs-mcp

运行内部DOL管道(维护人员工作流程,从源代码检查开始):

./scripts/run_internal_pipeline.sh

故障排除

  • 如果搜索未返回任何工作,请继续轮询 get_visa_job_search_status 并致电 get_visa_job_search_results 再次为相同 run_id.
  • 如果发生上游速率限制,请等待几分钟,然后重试。
  • 如果Homebrew安装因缺少发布资源而失败,请在发布工作流完成后重试。

数据与隐私

  • 默认情况下,数据存储在本地。
  • 不销售遥测或外部数据。
  • 赞助匹配用途 data/companies.csv 以及基于DOL的流水线输出。

对于维护人员

  • Homebrew水龙头存储库: https://github.com/neosh11/homebrew-visa-jobs-mcp
  • 贡献者指南: AGENTS.md
  • 发布工作流程: .github/workflows/build-release-binaries.yml
  • 本地发布工件构建: ./scripts/build_release_binaries.sh (原生Go二进制+捆绑 data/companies.csv)

许可证

MIT。看 LICENSE.

目录标签

目录标签

Go隐私保护搜索职位搜索本地部署签证匹配LinkedIn集成本地数据处理

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

session

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

40

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiosession部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP