WeJob
Server Details
Read-only MCP server for public WeJob jobs, formations, and companies.
- Status
- Healthy
- Uptime
- 100.0% over 73 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- WeJob-IT/WeJob-MCP
- GitHub Stars
- 1
- Server Listing
- WeJob-MCP
TDQS
Scored across 8 tools
The generic fetch and search tools directly overlap with the three wejob_get_* and three wejob_search_* tools, since fetch can retrieve jobs, formations, and companies and search can find all three types. An agent has no clear reason to prefer one over the other, creating multiple ambiguous tool pairs.
Naming mixes two conventions: unprefixed fetch/search and prefixed wejob_get_*/wejob_search_* tools. Even within the same operation, the verb differs (fetch vs get), so the pattern is not predictable.
Eight tools is a reasonable count for a read-only public API covering jobs, formations, and companies, but the set is inflated by redundant generic and per-type tools that could be collapsed.
For a public read-only domain, the surface covers both search and retrieval for every entity type (jobs, formations, companies), and the generic fetch/search provide cross-type access. No obvious lifecycle gaps remain.
Available Tools
8 toolsfetchFetch WeJob itemARead-onlyInspect
Fetch a public WeJob item by id. Supported id prefixes: job:, formation:, company:.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Result id returned by search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| jobs | No | |
| logo | No | |
| price | No | |
| title | Yes | |
| salary | No | |
| values | No | |
| company | No | |
| contact | No | |
| culture | No | |
| mission | No | |
| profile | No | |
| program | No | |
| website | No | |
| benefits | No | |
| duration | No | |
| end_date | No | |
| industry | No | |
| location | No | |
| languages | No | |
| locations | No | |
| work_mode | No | |
| categories | No | |
| formations | No | |
| founded_at | No | |
| start_date | No | |
| tech_stack | No | |
| active_jobs | No | |
| description | No | |
| company_size | No | |
| activity_rate | No | |
| prerequisites | No | |
| contract_types | No | |
| formation_mode | No | |
| business_sector | No | |
| experience_level | No | |
| responsibilities | No | |
| active_formations | No | |
| expertise_domains | No | |
| learning_outcomes | No | |
| certification_type | No | |
| nice_to_have_skills | No | |
| application_deadline | No | |
| required_hard_skills | No | |
| required_soft_skills | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and closed-world scope, so the safety profile is covered. The description adds genuinely new behavioral context: the item must be public (so private/non-public ids will not resolve) and the id must carry one of three supported prefixes. Error handling for unsupported prefixes is left unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the core action front-loaded and the constraint clause appended. No filler and nothing repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations carrying the safety profile, the description does not need to explain return values. For a one-parameter read tool it is nearly complete; only the failure mode for an unsupported prefix is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the sole parameter is documented as the result id returned by search, so the baseline would be 3. The description goes beyond the schema by specifying the accepted id prefix syntax (job:, formation:, company:), which is real added meaning the schema does not carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (public WeJob item) scoped by id, and the prefix list (job:, formation:, company:) signals that this is the generic, multi-type getter rather than one of the type-specific siblings. It stops short of explicitly naming wejob_get_job/company/formation as alternatives, but an agent can still distinguish it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the three type-specific getters or the search tool; the only implicit hint is the supported-prefix list. No prerequisites or exclusions are given, so the agent must infer routing from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch WeJobARead-onlyInspect
Search public WeJob jobs, formations, and companies. Returns ids usable with fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | One-based result page number. | |
| sort | No | Optional public result sort order. | |
| limit | No | Maximum number of results. | |
| query | Yes | Search query. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds that results are public and return chained ids, which is helpful, but says nothing about pagination, limits, or result shape beyond the id note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the core purpose and the fetch-handoff front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, yet the description supplies the key chaining detail (ids usable with fetch). The remaining gap is not clarifying its relationship to the specialized search siblings, but it is otherwise complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents query, page, limit, and sort (with an enum). The description adds no parameter-level syntax or defaults, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: searching public WeJob jobs, formations, and companies. The scope hints it is the multi-type search versus the type-specific siblings, but the distinction is left implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Adds a useful handoff note that results are usable with fetch, implying a search-then-fetch flow. However, it gives no explicit when-to-use guidance versus the type-specific searches (wejob_search_jobs/formations/companies), so selection between them is inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wejob_get_companyGet WeJob companyARead-onlyInspect
Fetch one public WeJob company profile by public id (raw id or the company: returned by search/fetch).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Public company id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| jobs | No | |
| logo | No | |
| price | No | |
| title | Yes | |
| salary | No | |
| values | No | |
| company | No | |
| contact | No | |
| culture | No | |
| mission | No | |
| profile | No | |
| program | No | |
| website | No | |
| benefits | No | |
| duration | No | |
| end_date | No | |
| industry | No | |
| location | No | |
| languages | No | |
| locations | No | |
| work_mode | No | |
| categories | No | |
| formations | No | |
| founded_at | No | |
| start_date | No | |
| tech_stack | No | |
| active_jobs | No | |
| description | No | |
| company_size | No | |
| activity_rate | No | |
| prerequisites | No | |
| contract_types | No | |
| formation_mode | No | |
| business_sector | No | |
| experience_level | No | |
| responsibilities | No | |
| active_formations | No | |
| expertise_domains | No | |
| learning_outcomes | No | |
| certification_type | No | |
| nice_to_have_skills | No | |
| application_deadline | No | |
| required_hard_skills | No | |
| required_soft_skills | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds only that the profile is 'public' (no private/authenticated data), which is modest value, and says nothing about rate limits or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the action and resource, with the id-format clarification in parentheses. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, a fully documented single parameter, and annotations covering safety, the description is nearly complete for this simple lookup. Only minor gap is the absence of explicit routing guidance against the sibling search tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema only says 'Public company id.', but the description adds real meaning: the id may be a raw id or the 'company:<id>' form returned by search/fetch. That accepted-input detail is not derivable from the schema and genuinely helps invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (one public WeJob company profile) with clear scope ('one public'). The resource noun 'company' implicitly separates it from siblings like wejob_get_job and wejob_get_formation, but it never explicitly delineates itself from wejob_search_companies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: fetch a single company profile rather than search. It explains where the id comes from (search/fetch output), which is helpful context, but there is no explicit when-to-use vs when-to-use-search statement or exclusion of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wejob_get_formationGet WeJob formationARead-onlyInspect
Fetch one public active WeJob formation by public id (raw id or the formation: returned by search/fetch).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Public formation id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| jobs | No | |
| logo | No | |
| price | No | |
| title | Yes | |
| salary | No | |
| values | No | |
| company | No | |
| contact | No | |
| culture | No | |
| mission | No | |
| profile | No | |
| program | No | |
| website | No | |
| benefits | No | |
| duration | No | |
| end_date | No | |
| industry | No | |
| location | No | |
| languages | No | |
| locations | No | |
| work_mode | No | |
| categories | No | |
| formations | No | |
| founded_at | No | |
| start_date | No | |
| tech_stack | No | |
| active_jobs | No | |
| description | No | |
| company_size | No | |
| activity_rate | No | |
| prerequisites | No | |
| contract_types | No | |
| formation_mode | No | |
| business_sector | No | |
| experience_level | No | |
| responsibilities | No | |
| active_formations | No | |
| expertise_domains | No | |
| learning_outcomes | No | |
| certification_type | No | |
| nice_to_have_skills | No | |
| application_deadline | No | |
| required_hard_skills | No | |
| required_soft_skills | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds real behavioral context beyond that: only 'public active' formations are retrievable, and the id may be raw or carry a 'formation:' prefix, which affects how the call must be formed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the verb, resource, key, and accepted id formats; no filler or redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with annotations and an output schema, the essentials are present: scope, lookup key, and id format. The only minor gap is not stating the behavior when the id is missing or the formation is inactive, though 'active' implies that case exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema only says 'Public formation id.', so baseline is 3. The description earns a point above baseline by documenting the two accepted id forms (raw id or formation:<id>), which the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch), resource (WeJob formation), and cardinality/scope (one, public, active), and pins the lookup key (public id). The singular 'one ... by public id' cleanly separates it from the sibling wejob_search_formations without needing to name it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent when this tool applies: when you already hold an id, and it explicitly states the id originates from search/fetch, which routes the agent to the right siblings. It stops short of an explicit when-not or a named alternative for discovering ids.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wejob_get_jobGet WeJob jobARead-onlyInspect
Fetch one public active WeJob job offer by public id (raw id or the job: returned by search/fetch).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Public job id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| jobs | No | |
| logo | No | |
| price | No | |
| title | Yes | |
| salary | No | |
| values | No | |
| company | No | |
| contact | No | |
| culture | No | |
| mission | No | |
| profile | No | |
| program | No | |
| website | No | |
| benefits | No | |
| duration | No | |
| end_date | No | |
| industry | No | |
| location | No | |
| languages | No | |
| locations | No | |
| work_mode | No | |
| categories | No | |
| formations | No | |
| founded_at | No | |
| start_date | No | |
| tech_stack | No | |
| active_jobs | No | |
| description | No | |
| company_size | No | |
| activity_rate | No | |
| prerequisites | No | |
| contract_types | No | |
| formation_mode | No | |
| business_sector | No | |
| experience_level | No | |
| responsibilities | No | |
| active_formations | No | |
| expertise_domains | No | |
| learning_outcomes | No | |
| certification_type | No | |
| nice_to_have_skills | No | |
| application_deadline | No | |
| required_hard_skills | No | |
| required_soft_skills | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/non-destructive/openWorld=false, so the safety profile is covered. The description adds real context beyond that: only "public active" offers are returned, which signals preconditions and what an agent can expect for inactive or private ids.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste; the fetch action and the id-format clarification are packed without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations, full schema coverage, and an output schema handling return values, the definition covers everything needed to call it correctly. Only the behavior on a nonexistent/inactive id is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the single id parameter is already documented. The description still adds meaning by specifying the accepted id forms (raw id or job:<id>), which the schema's "Public job id." does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ("Fetch one public active WeJob job offer") and scopes it to a single record, making it distinguishable from the singular/plural search siblings. It does not name a specific alternative tool, so full sibling differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context for use: single-offer lookup by id, with the id sourcing path spelled out ("raw id or the job:<id> returned by search/fetch"). No explicit when-not-to-use or named alternative is given, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wejob_search_companiesSearch WeJob companiesBRead-onlyInspect
Search public WeJob company profiles.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | One-based result page number. | |
| sort | No | Optional public result sort order. | |
| limit | No | Maximum number of results. | |
| query | No | Free-text search over company names and descriptions. | |
| sizes | No | Comma-separated company sizes (employees): 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5000+. | |
| location | No | City or canton, e.g. Genève, Vaud, Lausanne, Zurich. Comma-separate several places. | |
| industries | No | Comma-separated business sectors, e.g. technologies, finance, sante, education, commerce, marketing, consulting, industrie, telecommunications. | |
| technologies | No | Comma-separated technologies, e.g. React, AWS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety and scope profile is covered structurally. The description's only added behavioral signal is 'public' profiles, and it says nothing about pagination limits beyond the schema, rate limits, or result shape. Adequate but thin given the annotations carry most of the load.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste, which is ideal for a tool whose parameters are fully self-documenting. It is arguably under-specified rather than padded, but nothing in it is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the schema fully documents all 8 optional parameters. What is missing is routing context relative to wejob_get_company and wejob_search_jobs, which the agent needs to select correctly among seven siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter (page, limit, sort enum, query, sizes, location, industries, technologies) is documented inline with formats and examples. The description adds no parameter meaning whatsoever, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (public WeJob company profiles), so the agent knows this is a discovery/list operation rather than a single-entity lookup. It does not explicitly differentiate itself from the sibling wejob_get_company or from the generic 'search'/'fetch' tools, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no exclusions, and never mentions the alternatives among its siblings (wejob_get_company for a single profile, wejob_search_jobs for job discovery). The word 'public' hints at a scope boundary but no condition for choosing this tool is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wejob_search_formationsSearch WeJob formationsCRead-onlyInspect
Search public active WeJob formations.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | One-based result page number. | |
| sort | No | Optional public result sort order. | |
| limit | No | Maximum number of results. | |
| query | No | Free-text search over titles, descriptions and programs, e.g. cybersécurité. | |
| skills | No | Comma-separated hard skills, e.g. Java, SQL. Only matches skills listed on the offer: prefer query for a broad search. | |
| company | No | Company name filter, e.g. WeJob Sàrl. | |
| location | No | City or canton, e.g. Genève, Vaud, Lausanne, Zurich. Comma-separate several places. | |
| tarif_max | No | Maximum price as a number, e.g. 3000. | |
| tarif_min | No | Minimum price as a number, e.g. 500. | |
| categories | No | Comma-separated category names, e.g. Développement & IT. | |
| duration_max | No | Maximum duration in days, e.g. 30. | |
| duration_min | No | Minimum duration in days, e.g. 5. | |
| technologies | No | Comma-separated technologies, e.g. React, AWS. | |
| formation_mode | No | Comma-separated training mode: presentiel, distanciel, hybride (on-site, online, hybrid are accepted). | |
| certification_type | No | Comma-separated certification: certificat, diplome, attestation, bootcamp, aucun (certificate, diploma, none are accepted). |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description contributes one genuinely useful behavioral fact - that only *active* and *public* records are matched - but says nothing about pagination behavior, result caps, or rate limits beyond what the schema shows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with zero padding, which is structurally clean. But at five words it is under-specified rather than concise - the brevity removes information an agent needs rather than removing waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema and annotations exist, so return format and safety need not be described. But for a 15-parameter search tool sitting among seven siblings including two other search tools, the description omits the sibling routing and the active/public filtering nuances that would let an agent choose and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 15 parameters, and several field descriptions already carry examples and cross-field advice (e.g. skills vs. query). The description adds no parameter-level meaning on top of that, which is the expected baseline-3 outcome when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a concrete verb and resource ('Search ... WeJob formations') plus a scope qualifier ('public active'), so the agent knows roughly what it returns. However, it draws no distinction from its near-identical siblings wejob_search_jobs and wejob_search_companies, and 'formations' (training programs) is not clarified for a non-French reader.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus wejob_get_formation or the other search_* siblings, no mention of prerequisites, and no guidance on paging through large result sets despite a page/limit schema. Usage is only implied by the word 'Search'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wejob_search_jobsSearch WeJob jobsBRead-onlyInspect
Search public active WeJob job offers.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | One-based result page number. | |
| sort | No | Optional public result sort order. | |
| limit | No | Maximum number of results. | |
| query | No | Free-text search over titles, descriptions, skills, companies and places. Words are OR-ed: one or two keywords work best, e.g. Java or data engineer. | |
| skills | No | Comma-separated hard skills, e.g. Java, SQL. Only matches skills listed on the offer: prefer query for a broad search. | |
| company | No | Company name filter, e.g. WeJob Sàrl. | |
| location | No | City or canton, e.g. Genève, Vaud, Lausanne, Zurich. Comma-separate several places. | |
| languages | No | Comma-separated language filter, for example Anglais, English, en. | |
| work_mode | No | Comma-separated work mode: on_site, hybrid, remote (sur site, hybride, télétravail are accepted). | |
| categories | No | Comma-separated category names, e.g. Développement & IT. | |
| salary_max | No | Maximum salary as a number, in the offer currency (CHF), e.g. 140000. | |
| salary_min | No | Minimum salary as a number, in the offer currency (CHF), e.g. 100000. | |
| technologies | No | Comma-separated technologies, e.g. React, AWS. | |
| employment_type | No | Comma-separated contract or workload: full_time, part_time, CDI, CDD, contract, internship, apprenticeship, freelance. French terms are accepted (temps plein, temps partiel, stage, alternance). | |
| experience_level | No | Comma-separated level: junior, intermediate, senior, expert (entry, mid, confirmé, lead are accepted). |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the useful scoping fact that only public, active offers are returned, but says nothing about pagination limits, result caps, or behavior when filters conflict — adequate given the lower bar annotations set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with zero filler, front-loading the core action and scope. It is efficient, though arguably terse to the point of omitting useful guidance for a 15-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations cover the safety profile. However, for a 15-parameter search tool the description offers no hint about how filters compose or which are preferred (e.g. query over skills), leaving that entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of the 15 fields carrying detailed descriptions (query OR-semantics, comma-separated conventions, CHF salary, accepted French terms). The description adds no parameter guidance beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search') and resource ('public active WeJob job offers'), clearly distinguishing it from the sibling searchers wejob_search_companies and wejob_search_formations by resource domain. It stops short of naming those siblings explicitly, so it earns a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus wejob_get_job for a single offer, or versus the other search_* tools. The only contextual hint is the word 'public', leaving the agent to infer routing from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
- Changed
fetch5 fields changed- added
Output schema / properties / active_formationsAdded value: +{ + "type": "number" +} - added
Output schema / properties / active_jobsAdded value: +{ + "type": "number" +} - added
Output schema / properties / formations / items / properties / locationAdded value: +{ + "type": "string" +} - added
Output schema / properties / jobs / items / properties / locationAdded value: +{ + "type": "string" +} - added
Output schema / properties / salary / properties / currencyAdded value: +{ + "type": "string" +}
- Changed
search2 fields changed- changed
Input schema / properties / sort / enumPrevious value: -[ - "newest", - "oldest", - "deadline_soon", - "deadline_later", - "price_asc", - "price_desc", - "smallest", - "largest", - "founded_newest", - "founded_oldest", - "most_jobs" -]New value: +[ + "newest", + "oldest", + "deadline_soon", + "deadline_later", + "level_asc", + "price_asc", + "price_desc", + "duration_asc", + "smallest", + "largest", + "founded_newest", + "founded_oldest", + "most_jobs" +] - added
Output schema / properties / results / items / properties / locationAdded value: +{ + "type": "string" +}
- Changed
wejob_get_company5 fields changed- added
Output schema / properties / active_formationsAdded value: +{ + "type": "number" +} - added
Output schema / properties / active_jobsAdded value: +{ + "type": "number" +} - added
Output schema / properties / formations / items / properties / locationAdded value: +{ + "type": "string" +} - added
Output schema / properties / jobs / items / properties / locationAdded value: +{ + "type": "string" +} - added
Output schema / properties / salary / properties / currencyAdded value: +{ + "type": "string" +}
- Changed
wejob_get_formation5 fields changed- added
Output schema / properties / active_formationsAdded value: +{ + "type": "number" +} - added
Output schema / properties / active_jobsAdded value: +{ + "type": "number" +} - added
Output schema / properties / formations / items / properties / locationAdded value: +{ + "type": "string" +} - added
Output schema / properties / jobs / items / properties / locationAdded value: +{ + "type": "string" +} - added
Output schema / properties / salary / properties / currencyAdded value: +{ + "type": "string" +}
- Changed
wejob_get_job5 fields changed- added
Output schema / properties / active_formationsAdded value: +{ + "type": "number" +} - added
Output schema / properties / active_jobsAdded value: +{ + "type": "number" +} - added
Output schema / properties / formations / items / properties / locationAdded value: +{ + "type": "string" +} - added
Output schema / properties / jobs / items / properties / locationAdded value: +{ + "type": "string" +} - added
Output schema / properties / salary / properties / currencyAdded value: +{ + "type": "string" +}
- Changed
wejob_search_companies19 fields changed- removed
Input schema / properties / categoriesRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / certification_typeRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / duration_maxRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / duration_minRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / employment_typeRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / experience_levelRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / formation_modeRemoved value: -{ - "type": "string" -} - added
Input schema / properties / industries / descriptionAdded value: +"Comma-separated business sectors, e.g. technologies, finance, sante, education, commerce, marketing, consulting, industrie, telecommunications." - changed
Input schema / properties / location / descriptionPrevious value: -"Location filter."New value: +"City or canton, e.g. Genève, Vaud, Lausanne, Zurich. Comma-separate several places." - changed
Input schema / properties / query / descriptionPrevious value: -"Search query."New value: +"Free-text search over company names and descriptions." - removed
Input schema / properties / salary_maxRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / salary_minRemoved value: -{ - "type": "string" -} - added
Input schema / properties / sizes / descriptionAdded value: +"Comma-separated company sizes (employees): 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5000+." - changed
Input schema / properties / sort / enumPrevious value: -[ - "newest", - "oldest", - "deadline_soon", - "deadline_later", - "price_asc", - "price_desc", - "smallest", - "largest", - "founded_newest", - "founded_oldest", - "most_jobs" -]New value: +[ + "newest", + "oldest", + "most_jobs", + "largest", + "smallest", + "founded_newest", + "founded_oldest" +] - removed
Input schema / properties / tarif_maxRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / tarif_minRemoved value: -{ - "type": "string" -} - added
Input schema / properties / technologies / descriptionAdded value: +"Comma-separated technologies, e.g. React, AWS." - removed
Input schema / properties / work_modeRemoved value: -{ - "type": "string" -} - added
Output schema / properties / results / items / properties / locationAdded value: +{ + "type": "string" +}
- Changed
wejob_search_formations21 fields changed- added
Input schema / properties / categories / descriptionAdded value: +"Comma-separated category names, e.g. Développement & IT." - added
Input schema / properties / certification_type / descriptionAdded value: +"Comma-separated certification: certificat, diplome, attestation, bootcamp, aucun (certificate, diploma, none are accepted)." - changed
Input schema / properties / company / descriptionPrevious value: -"Company filter."New value: +"Company name filter, e.g. WeJob Sàrl." - added
Input schema / properties / duration_max / descriptionAdded value: +"Maximum duration in days, e.g. 30." - added
Input schema / properties / duration_min / descriptionAdded value: +"Minimum duration in days, e.g. 5." - removed
Input schema / properties / employment_typeRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / experience_levelRemoved value: -{ - "type": "string" -} - added
Input schema / properties / formation_mode / descriptionAdded value: +"Comma-separated training mode: presentiel, distanciel, hybride (on-site, online, hybrid are accepted)." - removed
Input schema / properties / industriesRemoved value: -{ - "type": "string" -} - changed
Input schema / properties / location / descriptionPrevious value: -"Location filter."New value: +"City or canton, e.g. Genève, Vaud, Lausanne, Zurich. Comma-separate several places." - changed
Input schema / properties / query / descriptionPrevious value: -"Search query."New value: +"Free-text search over titles, descriptions and programs, e.g. cybersécurité." - removed
Input schema / properties / salary_maxRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / salary_minRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / sizesRemoved value: -{ - "type": "string" -} - changed
Input schema / properties / skills / descriptionPrevious value: -"Comma-separated skills filter."New value: +"Comma-separated hard skills, e.g. Java, SQL. Only matches skills listed on the offer: prefer query for a broad search." - changed
Input schema / properties / sort / enumPrevious value: -[ - "newest", - "oldest", - "deadline_soon", - "deadline_later", - "price_asc", - "price_desc", - "smallest", - "largest", - "founded_newest", - "founded_oldest", - "most_jobs" -]New value: +[ + "newest", + "oldest", + "deadline_soon", + "deadline_later", + "price_asc", + "price_desc", + "duration_asc" +] - added
Input schema / properties / tarif_max / descriptionAdded value: +"Maximum price as a number, e.g. 3000." - added
Input schema / properties / tarif_min / descriptionAdded value: +"Minimum price as a number, e.g. 500." - added
Input schema / properties / technologies / descriptionAdded value: +"Comma-separated technologies, e.g. React, AWS." - removed
Input schema / properties / work_modeRemoved value: -{ - "type": "string" -} - added
Output schema / properties / results / items / properties / locationAdded value: +{ + "type": "string" +}
- Changed
wejob_search_jobs21 fields changed- added
Input schema / properties / categories / descriptionAdded value: +"Comma-separated category names, e.g. Développement & IT." - removed
Input schema / properties / certification_typeRemoved value: -{ - "type": "string" -} - changed
Input schema / properties / company / descriptionPrevious value: -"Company filter."New value: +"Company name filter, e.g. WeJob Sàrl." - removed
Input schema / properties / duration_maxRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / duration_minRemoved value: -{ - "type": "string" -} - added
Input schema / properties / employment_type / descriptionAdded value: +"Comma-separated contract or workload: full_time, part_time, CDI, CDD, contract, internship, apprenticeship, freelance. French terms are accepted (temps plein, temps partiel, stage, alternance)." - added
Input schema / properties / experience_level / descriptionAdded value: +"Comma-separated level: junior, intermediate, senior, expert (entry, mid, confirmé, lead are accepted)." - removed
Input schema / properties / formation_modeRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / industriesRemoved value: -{ - "type": "string" -} - changed
Input schema / properties / location / descriptionPrevious value: -"Location filter."New value: +"City or canton, e.g. Genève, Vaud, Lausanne, Zurich. Comma-separate several places." - changed
Input schema / properties / query / descriptionPrevious value: -"Search query."New value: +"Free-text search over titles, descriptions, skills, companies and places. Words are OR-ed: one or two keywords work best, e.g. Java or data engineer." - added
Input schema / properties / salary_max / descriptionAdded value: +"Maximum salary as a number, in the offer currency (CHF), e.g. 140000." - added
Input schema / properties / salary_min / descriptionAdded value: +"Minimum salary as a number, in the offer currency (CHF), e.g. 100000." - removed
Input schema / properties / sizesRemoved value: -{ - "type": "string" -} - changed
Input schema / properties / skills / descriptionPrevious value: -"Comma-separated skills filter."New value: +"Comma-separated hard skills, e.g. Java, SQL. Only matches skills listed on the offer: prefer query for a broad search." - changed
Input schema / properties / sort / enumPrevious value: -[ - "newest", - "oldest", - "deadline_soon", - "deadline_later", - "price_asc", - "price_desc", - "smallest", - "largest", - "founded_newest", - "founded_oldest", - "most_jobs" -]New value: +[ + "newest", + "oldest", + "deadline_soon", + "deadline_later", + "level_asc" +] - removed
Input schema / properties / tarif_maxRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / tarif_minRemoved value: -{ - "type": "string" -} - added
Input schema / properties / technologies / descriptionAdded value: +"Comma-separated technologies, e.g. React, AWS." - added
Input schema / properties / work_mode / descriptionAdded value: +"Comma-separated work mode: on_site, hybrid, remote (sur site, hybride, télétravail are accepted)." - added
Output schema / properties / results / items / properties / locationAdded value: +{ + "type": "string" +}
4 tool updates
- Changed
search2 fields changed- added
Input schema / properties / pageAdded value: +{ + "default": 1, + "description": "One-based result page number.", + "minimum": 1, + "type": "integer" +} - added
Output schema / properties / paginationAdded value: +{ + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "limit": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "total": { + "type": "integer" + } + }, + "required": [ + "page", + "limit", + "has_more" + ], + "type": "object" +}
- Changed
wejob_search_companies2 fields changed- added
Input schema / properties / pageAdded value: +{ + "default": 1, + "description": "One-based result page number.", + "minimum": 1, + "type": "integer" +} - added
Output schema / properties / paginationAdded value: +{ + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "limit": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "total": { + "type": "integer" + } + }, + "required": [ + "page", + "limit", + "has_more" + ], + "type": "object" +}
- Changed
wejob_search_formations2 fields changed- added
Input schema / properties / pageAdded value: +{ + "default": 1, + "description": "One-based result page number.", + "minimum": 1, + "type": "integer" +} - added
Output schema / properties / paginationAdded value: +{ + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "limit": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "total": { + "type": "integer" + } + }, + "required": [ + "page", + "limit", + "has_more" + ], + "type": "object" +}
- Changed
wejob_search_jobs2 fields changed- added
Input schema / properties / pageAdded value: +{ + "default": 1, + "description": "One-based result page number.", + "minimum": 1, + "type": "integer" +} - added
Output schema / properties / paginationAdded value: +{ + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "limit": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "total": { + "type": "integer" + } + }, + "required": [ + "page", + "limit", + "has_more" + ], + "type": "object" +}
3 tool updates
- Changed
wejob_search_companies15 fields changed- added
Input schema / properties / categoriesAdded value: +{ + "type": "string" +} - added
Input schema / properties / certification_typeAdded value: +{ + "type": "string" +} - added
Input schema / properties / duration_maxAdded value: +{ + "type": "string" +} - added
Input schema / properties / duration_minAdded value: +{ + "type": "string" +} - added
Input schema / properties / employment_typeAdded value: +{ + "type": "string" +} - added
Input schema / properties / experience_levelAdded value: +{ + "type": "string" +} - added
Input schema / properties / formation_modeAdded value: +{ + "type": "string" +} - added
Input schema / properties / industriesAdded value: +{ + "type": "string" +} - added
Input schema / properties / salary_maxAdded value: +{ + "type": "string" +} - added
Input schema / properties / salary_minAdded value: +{ + "type": "string" +} - added
Input schema / properties / sizesAdded value: +{ + "type": "string" +} - added
Input schema / properties / tarif_maxAdded value: +{ + "type": "string" +} - added
Input schema / properties / tarif_minAdded value: +{ + "type": "string" +} - added
Input schema / properties / technologiesAdded value: +{ + "type": "string" +} - added
Input schema / properties / work_modeAdded value: +{ + "type": "string" +}
- Changed
wejob_search_formations15 fields changed- added
Input schema / properties / categoriesAdded value: +{ + "type": "string" +} - added
Input schema / properties / certification_typeAdded value: +{ + "type": "string" +} - added
Input schema / properties / duration_maxAdded value: +{ + "type": "string" +} - added
Input schema / properties / duration_minAdded value: +{ + "type": "string" +} - added
Input schema / properties / employment_typeAdded value: +{ + "type": "string" +} - added
Input schema / properties / experience_levelAdded value: +{ + "type": "string" +} - added
Input schema / properties / formation_modeAdded value: +{ + "type": "string" +} - added
Input schema / properties / industriesAdded value: +{ + "type": "string" +} - added
Input schema / properties / salary_maxAdded value: +{ + "type": "string" +} - added
Input schema / properties / salary_minAdded value: +{ + "type": "string" +} - added
Input schema / properties / sizesAdded value: +{ + "type": "string" +} - added
Input schema / properties / tarif_maxAdded value: +{ + "type": "string" +} - added
Input schema / properties / tarif_minAdded value: +{ + "type": "string" +} - added
Input schema / properties / technologiesAdded value: +{ + "type": "string" +} - added
Input schema / properties / work_modeAdded value: +{ + "type": "string" +}
- Changed
wejob_search_jobs15 fields changed- added
Input schema / properties / categoriesAdded value: +{ + "type": "string" +} - added
Input schema / properties / certification_typeAdded value: +{ + "type": "string" +} - added
Input schema / properties / duration_maxAdded value: +{ + "type": "string" +} - added
Input schema / properties / duration_minAdded value: +{ + "type": "string" +} - added
Input schema / properties / employment_typeAdded value: +{ + "type": "string" +} - added
Input schema / properties / experience_levelAdded value: +{ + "type": "string" +} - added
Input schema / properties / formation_modeAdded value: +{ + "type": "string" +} - added
Input schema / properties / industriesAdded value: +{ + "type": "string" +} - added
Input schema / properties / salary_maxAdded value: +{ + "type": "string" +} - added
Input schema / properties / salary_minAdded value: +{ + "type": "string" +} - added
Input schema / properties / sizesAdded value: +{ + "type": "string" +} - added
Input schema / properties / tarif_maxAdded value: +{ + "type": "string" +} - added
Input schema / properties / tarif_minAdded value: +{ + "type": "string" +} - added
Input schema / properties / technologiesAdded value: +{ + "type": "string" +} - added
Input schema / properties / work_modeAdded value: +{ + "type": "string" +}
4 tool updates
- Changed
search1 field changed- added
Input schema / properties / sortAdded value: +{ + "description": "Optional public result sort order.", + "enum": [ + "newest", + "oldest", + "deadline_soon", + "deadline_later", + "price_asc", + "price_desc", + "smallest", + "largest", + "founded_newest", + "founded_oldest", + "most_jobs" + ], + "type": "string" +}
- Changed
wejob_search_companies1 field changed- added
Input schema / properties / sortAdded value: +{ + "description": "Optional public result sort order.", + "enum": [ + "newest", + "oldest", + "deadline_soon", + "deadline_later", + "price_asc", + "price_desc", + "smallest", + "largest", + "founded_newest", + "founded_oldest", + "most_jobs" + ], + "type": "string" +}
- Changed
wejob_search_formations1 field changed- added
Input schema / properties / sortAdded value: +{ + "description": "Optional public result sort order.", + "enum": [ + "newest", + "oldest", + "deadline_soon", + "deadline_later", + "price_asc", + "price_desc", + "smallest", + "largest", + "founded_newest", + "founded_oldest", + "most_jobs" + ], + "type": "string" +}
- Changed
wejob_search_jobs1 field changed- added
Input schema / properties / sortAdded value: +{ + "description": "Optional public result sort order.", + "enum": [ + "newest", + "oldest", + "deadline_soon", + "deadline_later", + "price_asc", + "price_desc", + "smallest", + "largest", + "founded_newest", + "founded_oldest", + "most_jobs" + ], + "type": "string" +}
8 tool updates
- First observed
fetch - First observed
search - First observed
wejob_get_company - First observed
wejob_get_formation - First observed
wejob_get_job - First observed
wejob_search_companies - First observed
wejob_search_formations - First observed
wejob_search_jobs
Related MCP Connectors
Public MCP server for discovering open jobs. Search, filter, and get application links.
MCP server for French (BOAMP) + EU (TED) public procurement data via TenderAPI.
Public, read-only MCP server for FarmNeural company facts, packages, and capabilities.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceRead-only MCP server for the public EasyHire job board. Enables searching job openings, retrieving full postings, filtering by criteria, and listing countries with open roles.MIT- FlicenseNot gradedqualityDmaintenanceA read-only MCP server for accessing Mobilize public API data, including organizations, events, and enums.-
- AlicenseNot gradedqualityDmaintenanceMCP server to query French Open Data from data.gouv.frMIT
- AlicenseNot gradedqualityDmaintenanceMCP server that exposes French public APIs (Data Inclusion, Légifrance, La Bonne Alternance) as tools for LLMs, enabling social, legal, and employment assistance.4MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.