Jobven
Server Details
Search job postings and employers from company career sites; each result returns its REST call.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: get_company vs search_companies differentiate by ID lookup vs search, get_job vs search_jobs differentiate by full text vs excerpt/search, and webhook_example is a standalone sample. There is no functional overlap that would cause misselection.
Four of five tools follow a consistent snake_case verb_noun pattern (get_company, get_job, search_companies, search_jobs). webhook_example breaks the verb_noun convention by using a noun_noun form, though it remains readable and uses the same casing style.
Five tools are well-scoped for a public job and company search API plus a webhook sample. Each tool earns its place: two search tools, two lookup tools, and one utility for webhook testing.
The read-only surface covers the core lifecycle for a public search API: search and fetch for both jobs and companies, plus a webhook sample. Minor gaps exist around webhook management or subscription operations, but these may be outside the stated public API scope.
Available Tools
5 toolsget_companyGet a companyBRead-onlyIdempotentInspect
One employer by id (GET /v1/public/companies/{id}). Free.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | A company id from search_companies |
Output Schema
| Name | Required | Description |
|---|---|---|
| company | Yes | |
| request | Yes | The REST call this result came from. curl reads the key from $JOBVEN_API_KEY. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely new context beyond them: the underlying REST endpoint and the "Free" cost signal, which matters for rate/cost budgeting. It says nothing about 404/not-found behavior, but with full annotation coverage a 3 is fair.
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 fragments with zero filler, ending on the cost signal. Slightly telegraphic — a reader has to infer "get" — but it is front-loaded and fails no one.
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 needn't be described, and the single parameter is fully documented in the schema. What remains thin is the relationship to search_companies (the natural entry point for obtaining an id), but for a simple get-by-id tool the definition is close to sufficient.
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?
There is one parameter at 100% schema description coverage, with the schema already explaining that the id comes from search_companies, so the baseline is 3. The description adds no format or provenance detail beyond that, so it neither helps nor hurts.
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?
"One employer by id" names a single, specific resource and makes clear it is a singular lookup keyed by id, which distinguishes it from the sibling search_companies. It is a fragment rather than a full verb+resource sentence, but the meaning is unambiguous and an agent can tell what it returns.
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 or when-not-to-use guidance and never mentions the alternative search_companies. The only hint about usage lives in the input schema ("A company id from search_companies"), which is structured data rather than description text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jobGet a jobARead-onlyIdempotentInspect
One Jobven job posting by id, with the full description (GET /v1/public/jobs/{id}). Counts as one job toward the monthly allowance.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | A job id from search_jobs | |
| descriptionFormat | No | Description as plain text (default) or markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes | |
| request | Yes | The REST call this result came from. curl reads the key from $JOBVEN_API_KEY. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint and non-destructive behavior, so the bar is lower. The description adds genuinely new behavioral context beyond them: the quota cost ('counts as one job toward the monthly allowance') and that the full description is returned, which an agent should factor into call budgeting.
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 front-loads the resource and scope, then appends the endpoint and the quota caveat. No filler; every clause carries information.
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 no explanation, and the schema fully covers parameters. The description covers identity, scope, endpoint and cost, leaving only minor gaps such as error behavior for an unknown id.
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 both parameters (id and descriptionFormat) documented in the schema itself, including the uuid format and the plain/markdown enum. The description adds only 'by id', so baseline 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 and resource ('One Jobven job posting by id, with the full description'), which is clearly distinct from the search_jobs sibling since it retrieves a single posting by identifier. It stops short of explicitly naming search_jobs as the differentiator, but the id-based scope makes the distinction inferable.
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 implies the tool is used to fetch a single job once an id is known, and adds a meaningful operational note that each call consumes one job from the monthly allowance. It does not state when to prefer this over search_jobs or what to do if the id is unknown, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesSearch companiesARead-onlyIdempotentInspect
Search the employers Jobven collects jobs from (GET /v1/public/companies). Free: company searches do not count toward the allowance.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, from 1 | |
| size | No | Company size band, e.g. "51-200" | |
| limit | No | Companies per page, default 10, at most 25 | |
| search | No | Company name or description contains this text | |
| sortBy | No | Sort field | |
| status | No | "active" or "inactive"; both when unset | |
| industry | No | Industry, e.g. "Technology" | |
| sortOrder | No | ||
| isVerified | No | Only verified, or only unverified, companies |
Output Schema
| Name | Required | Description |
|---|---|---|
| request | Yes | The REST call this result came from. curl reads the key from $JOBVEN_API_KEY. |
| companies | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the bar is lower and the description clears it by adding billing/quota behavior: company searches do not count toward the allowance. That is genuine behavioral context an agent cannot get from the annotations or schema. It does not describe result shape, but an output schema exists.
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 sentences, front-loaded with the core action and scoped by the endpoint, then the free-quota note. No filler text.
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 89% param coverage, the description only needs to add distinguishing context, which it does via the endpoint and quota note. It is nearly complete; a brief note on when to prefer it over get_company would close the last gap.
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 89%, so the schema already documents page, size, limit, search, sortBy, status, industry, sortOrder, and isVerified. The description adds no parameter-level meaning beyond that, so the baseline of 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?
The description states a specific verb (Search) and resource (companies/employers Jobven collects jobs from), and even names the underlying endpoint GET /v1/public/companies. It is clearly distinguishable from search_jobs and get_company by resource, though it doesn't explicitly contrast with them.
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 by the search framing and the note that company searches are free, which hints at when this is preferable cost-wise. However, there is no explicit when-to-use guidance, no mention of alternatives like get_company for a single lookup, and no prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_jobsSearch jobsARead-onlyIdempotentInspect
Search Jobven job postings with the filters of GET /v1/public/jobs. Returns 10 jobs by default (at most 25) with a plain-text excerpt of each description; get_job has the full text. Pass nextCursor back as cursor, with the same filters, for the next page. Each job returned counts toward the monthly allowance.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search job titles by whole word. Words are ANDed in any order; "double quotes" match an exact phrase, OR matches either side, and a leading - excludes a word. Case-insensitive. Does not search descriptions (see descriptionQuery). | |
| city | No | City, comma-separated; case and accents are ignored | |
| limit | No | Jobs per page, default 10, at most 25 | |
| order | No | Default DESC | |
| state | No | State, province or region, comma-separated: full name ("Ontario") or, for the US and Canada, the postal code ("ON") | |
| cursor | No | nextCursor from the previous search_jobs result, same filters | |
| skills | No | Skills, any of (up to 10), e.g. ["typescript", "react"] | |
| sortBy | No | Sort field (default postedAt) | |
| status | No | "active" (the default) or "closed" | |
| country | No | ISO 3166-1 alpha-2 country code, e.g. "US", "CA", "GB". "XX" matches jobs with no location at all. | |
| industry | No | Industries, any of (up to 10) | |
| language | No | Required spoken language, ISO 639-1 code, e.g. "fr" | |
| location | No | Free-text location: city, region or country | |
| maxSalary | No | Maximum stated salary | |
| minSalary | No | Minimum stated salary | |
| remoteType | No | Remote type, any of | |
| listedAfter | No | Listed at or after (Unix seconds), by listedAt: for incremental sync | |
| postedAfter | No | Posted at or after (Unix seconds) | |
| includeTotal | No | Also count every match (slower) | |
| postedBefore | No | Posted before (Unix seconds) | |
| hasRelocation | No | true: postings that offer relocation help; false: postings that say they do not | |
| employmentType | No | Employment type, any of | |
| experienceLevel | No | Experience level, any of | |
| descriptionQuery | No | Search job descriptions for a whole-word phrase, matched literally, case-insensitive. Slower than the other filters; pair it with postedAfter. | |
| hasVisaSponsorship | No | true: postings that offer visa sponsorship; false: postings that say they do not |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobs | Yes | |
| total | No | |
| hasMore | Yes | |
| request | Yes | The REST call this result came from. curl reads the key from $JOBVEN_API_KEY. |
| nextCursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description earns credit for the context it adds instead: results are truncated to a plain-text excerpt, pagination is cursor-based, and every returned job consumes the monthly allowance. Quota cost and result truncation are exactly the traits an agent cannot infer from annotations, though return shape details are left to the output schema.
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?
Three tight sentences with no waste, front-loading what the tool does and following with the two constraints (truncated text, cursor paging) an agent must know before calling. Nothing is repeated from the schema.
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 25-parameter search tool with an output schema and full schema coverage, the description supplies the few things structured fields cannot: result truncation, the get_job escape hatch, cursor reuse rules and quota impact. An agent has everything needed to call it correctly and continue paginating.
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 25 parameters, so the schema already documents filters, defaults, bounds and formats thoroughly. The description only restates the limit default/max and the cursor meaning, adding no syntax or semantics beyond the schema; 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 and resource ('Search Jobven job postings') plus the filter surface it mirrors. It also distinguishes itself from the sibling get_job by explaining that this tool returns only a plain-text excerpt, so an agent can route between them without opening either schema.
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?
Gives concrete operational guidance: default and maximum page size, how to paginate (pass nextCursor back as cursor with the same filters), and where to go for full text (get_job). It stops short of stating when not to use it, or when search_companies would be the better sibling, so it is clear context rather than full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webhook_exampleWebhook exampleARead-onlyIdempotentInspect
A sample Jobven webhook delivery for one event: the raw body and headers exactly as a receiver gets them, signed with an example secret, plus the signature verifier from the webhook docs in TypeScript, Python or Go. The verifier accepts the sample, so a receiver can be tested end to end. No API call, no key needed, free.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | The event to show a delivery of | |
| language | Yes | Language of the signature verifier |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| event | Yes | |
| headers | Yes | |
| rawBody | Yes | |
| language | Yes | |
| verifier | Yes | |
| exampleSecret | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower. The description adds genuinely useful context beyond them: the payload is signed with an 'example secret', the included verifier is guaranteed to accept the sample, and no key or API call is required. It stops short of describing payload size or exact return shape, but the output schema covers that.
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 sentences, front-loaded with what is returned before the supporting detail. Every clause earns its place: the payload contents, the verifier, the languages, and the no-auth/no-call fact are all decision-relevant.
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 two-parameter sample-fetch tool with full schema coverage, annotations, and an output schema, nothing an agent needs is missing. Return-value details are covered by the output schema, and the free/no-key nature is stated explicitly.
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 both parameters documented and enum-constrained, so the schema does the heavy lifting. The description repeats the language choices (TypeScript, Python, Go) and the event concept but adds no new syntax or constraint detail — 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+resource+scope: returns a sample webhook delivery (raw body and headers) for one event, plus a signature verifier in one of three languages. It is unmistakably distinct from the sibling read tools (get_company, get_job, search_*), which query live API data rather than static sample payloads.
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?
Explains the motivating context clearly — 'so a receiver can be tested end to end' — and notes 'No API call, no key needed, free', which tells the agent this needs no auth and has no side effects. It doesn't explicitly contrast against the sibling tools, but the use case is unambiguous.
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.
5 tool updates
- First observed
get_company - First observed
get_job - First observed
search_companies - First observed
search_jobs - First observed
webhook_example
Related MCP Connectors
Search open jobs from employers' own career sites: roles, companies and posting status.
Job postings search: find, count and read open jobs from employer career sites, with pay and links.
Job search over employers' own hiring systems. Search with no key; a free key opens every read tool.
Search real, recent job postings from company career pages and ATS boards, scored for fit.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceEnables searching across all companies hiring on JazzHR to retrieve structured job postings, employer directories, and delta feeds of new openings without needing individual career page URLs.-
- AlicenseNot gradedqualityBmaintenanceEnables searching live job postings pulled directly from 10 applicant-tracking-system APIs — including Greenhouse, Lever, Ashby, Workday, Personio, Recruitee, Teamtailor, Workable, SmartRecruiters and Breezy HR — using just a company website, domain or ATS handle, with filters for keywords, location, remote work and posting date. Also supports multi-company lookups, ATS detection, and stateless "only new since last call" monitoring for scheduled agents.MIT
- FlicenseNot gradedqualityCmaintenanceEnables users to retrieve live job postings from any iCIMS career site, providing structured data including title, requisition ID, employer, locations, employment type, dates, salary, and apply links.-
- AlicenseAqualityBmaintenanceSearches official public job APIs such as Remotive and Adzuna, returning normalized job postings and optionally scoring them against your capability keywords.3MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.