# Job104 Mcp

> MCP server for searching 104 (Taiwan) job listings with natural-language filters

- **Type:** MCP server
- **Install:** `agentstack add mcp-mozzan-job104-mcp`
- **Verified:** Pending review
- **Seller:** [mozzan](https://agentstack.voostack.com/s/mozzan)
- **Installs:** 0
- **Category:** [Integrations](https://agentstack.voostack.com/c/integrations)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [mozzan](https://github.com/mozzan)
- **Source:** https://github.com/mozzan/job104-mcp

## Install

```sh
agentstack add mcp-mozzan-job104-mcp
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# job104-mcp

An MCP server for searching [104 人力銀行](https://www.104.com.tw) job listings with
natural-language filters. Works with any MCP client — Claude, Cursor, Windsurf, Cline,
Zed, VS Code, and others.

> **Disclaimer:** This is an unofficial, educational/personal-use tool. It is **not
> affiliated with, endorsed by, or sponsored by 104 Corporation**. It calls 104's
> public web endpoints; please respect 104's Terms of Service and use it at a
> reasonable, low frequency. No scraped job data is distributed with this project.

## How it works

104 sits behind Cloudflare bot protection — a plain HTTP request to its JSON API
returns 403. This server uses [`curl_cffi`](https://github.com/lexiforest/curl_cffi)
with `impersonate="chrome"` to match a real browser's TLS fingerprint, so the same
public endpoints return their normal JSON. The AI sees clean structured results; the
104 category/area codes are resolved from Chinese names automatically.

## Prerequisite: install uv

Every install path runs the server through [uv](https://docs.astral.sh/uv/), so it must
be installed first (`uvx` ships with uv):

    # macOS / Linux
    curl -LsSf https://astral.sh/uv/install.sh | sh
    # Windows (PowerShell)
    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

## Install in any MCP client (Cursor, Windsurf, Cline, Zed, VS Code, …)

MCP is an open protocol, so any MCP-capable client works — not just Claude. Add this to
the client's MCP config (e.g. Cursor's `~/.cursor/mcp.json`); the `command`/`args` form is
what most clients accept:

    {
      "mcpServers": {
        "job104": { "command": "uvx", "args": ["job104-mcp@latest"] }
      }
    }

## Install in Claude Code (User scope)

    claude mcp add job104 -s user -- uvx job104-mcp@latest

Or from a local clone (no PyPI required):

    claude mcp add job104 -- uv run --project /absolute/path/to/job104-mcp -m job104_mcp

## Install in Claude Desktop (.mcpb bundle)

The `.mcpb` bundle is a Claude-Desktop-only convenience (other clients use the JSON config
above). Download `job104-mcp-vX.Y.Z.mcpb` from the
[Releases](https://github.com/mozzan/job104-mcp/releases) page and double-click it (or drag
it into Claude Desktop → Settings → Extensions).

To build the bundle yourself:

    npx @anthropic-ai/mcpb pack .   # produces job104-mcp.mcpb

## Run manually (stdio)

    uv run job104-mcp
    # or
    uv run python -m job104_mcp

## Tools

- `search_jobs` — search with keyword, area, job category, salary floor, remote,
  recency, experience, education, sort, paging. Use Chinese names for `area`/`jobcat`
  (e.g. `["台北市大安區"]`, `["軟體工程師"]`); they resolve to 104 codes automatically.
  Each result carries a `detail_id`.
- `get_job_detail` — full posting for a `detail_id` from `search_jobs`.
- `lookup_code` — resolve a job-category or area name to its 104 code.

## Refresh code tables

The bundled `jobcat.json` / `area.json` come from 104's public category tool. Regenerate:

    uv run python scripts/fetch_codes.py

## Tests

    uv run pytest            # fast unit tests
    uv run pytest -m live    # hits the real 104 site

## Releasing (maintainer)

Releases are automated by `.github/workflows/release.yml`, triggered when the
version in `pyproject.toml` changes on `main`. It publishes to PyPI, builds the
`.mcpb` bundle, and attaches it to a GitHub Release.

One-time PyPI setup (uses [Trusted Publishing](https://docs.pypi.org/trusted-publishers/),
no API token stored): on  add a pending
publisher with project `job104-mcp`, owner `mozzan`, repo `job104-mcp`, workflow
`release.yml`.

To cut a release: bump `version` in `pyproject.toml`, commit to `main`.

## License

MIT — see [LICENSE](LICENSE). Provided as-is, without warranty.

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [mozzan](https://github.com/mozzan)
- **Source:** [mozzan/job104-mcp](https://github.com/mozzan/job104-mcp)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: flagged — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-mozzan-job104-mcp
- Seller: https://agentstack.voostack.com/s/mozzan
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
