Skip to main content
Glama
Hassan220022

harvestapi-mcp

by Hassan220022

harvestapi-mcp

CI License: MIT Node >=20 MCP

MCP server for HarvestAPI — LinkedIn profiles, companies, posts, jobs, leads, ads, groups, and platform account data over the Model Context Protocol (stdio).

All 25 tools are read-only. No message sending, no connection automation, no billing mutations.

This server is a thin wrapper over the HarvestAPI LinkedIn-data API. You are responsible for complying with LinkedIn's Terms of Service, HarvestAPI's Terms, and applicable data-protection laws (GDPR, etc.) when using LinkedIn-sourced data. Do not use harvested data to spam, harass, or violate privacy. The maintainers provide no warranty and accept no liability for how you use the tool.

HarvestAPI is a third-party scraping/enrichment service — it is not affiliated with LinkedIn.

Related MCP server: linkedin-mcp-pro

Prerequisites

Install

git clone https://github.com/Hassan220022/harvestapi-mcp
cd harvestapi-mcp
npm ci
npm run build

Or run without cloning (after npm publish or via npx from the repo):

npx --yes github:Hassan220022/harvestapi-mcp

Environment

Variable

Required

Default

Description

HARVESTAPI_KEY

yes

Your HarvestAPI API key. Sent as X-API-Key.

HARVESTAPI_BASE_URL

no

https://api.harvestapi.io

Override base URL (rarely needed).

HARVESTAPI_TIMEOUT_MS

no

30000

Request timeout in ms.

HARVESTAPI_MAX_RETRIES

no

2

Max retries for transient 5xx / 429 / timeout. Never retried for 401/403/422.

Copy .env.example to .env for local dev — but do not commit .env.

cp .env.example .env
# edit .env

Configure

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "harvestapi": {
      "command": "node",
      "args": ["/absolute/path/to/harvestapi-mcp/dist/index.js"],
      "env": {
        "HARVESTAPI_KEY": "your_key_here"
      }
    }
  }
}

Generic MCP (any stdio client)

{
  "command": "node",
  "args": ["/path/to/harvestapi-mcp/dist/index.js"],
  "env": { "HARVESTAPI_KEY": "your_key_here" }
}

Using npx (no local build)

{
  "mcpServers": {
    "harvestapi": {
      "command": "npx",
      "args": ["-y", "github:Hassan220022/harvestapi-mcp"],
      "env": { "HARVESTAPI_KEY": "your_key_here" }
    }
  }
}

Tools

25 tools, all harvest_*. Every tool maps to a verified HarvestAPI endpoint — see docs/tool-mapping.md and docs/harvestapi-endpoint-inventory.json.

Tool

Description

Required params

harvest_get_profile

Get LinkedIn profile

one of url, publicIdentifier, profileId

harvest_search_profiles

Search LinkedIn profiles

— (all filters optional)

harvest_get_profile_posts

Get posts by a profile

one of profile, profileId, profilePublicIdentifier

harvest_get_profile_comments

Get comments by a profile

one of profile, profileId, profilePublicIdentifier

harvest_get_profile_reactions

Get reactions by a profile

one of profile, profileId, profilePublicIdentifier

harvest_get_company

Get LinkedIn company

one of url, universalName, search

harvest_search_companies

Search companies

harvest_get_company_posts

Get posts by a company

one of company, companyId, companyUniversalName

harvest_get_group

Get LinkedIn group

one of url, groupId

harvest_search_groups

Search groups

harvest_search_geo_id

Resolve LinkedIn Geo ID by text

search

harvest_get_post

Get a LinkedIn post

url

harvest_search_posts

Search LinkedIn posts

harvest_get_post_comments

Get comments on a post

post

harvest_get_post_reactions

Get reactions on a post

post

harvest_get_comment_reactions

Get reactions on a comment

commentId or commentUrl

harvest_get_comment_replies

Get replies to a comment

commentId or commentUrl

harvest_get_job

Get LinkedIn job

one of jobId, url

harvest_search_jobs

Search LinkedIn jobs

harvest_search_leads

Search leads (Sales Navigator)

harvest_search_services

Search LinkedIn services

search

harvest_get_ad

Get LinkedIn ad

one of adId, url

harvest_search_ads

Search LinkedIn ad library

harvest_get_my_api_user

Get your HarvestAPI user/account

harvest_get_my_private_account_pools

Get your private LinkedIn account pools

Intentionally excluded (5 endpoints): accept-connection, send-connection, send-message, received-connections, sent-connections — they automate LinkedIn user actions. See tool-mapping.

Examples

Profile lookup

{ "tool": "harvest_get_profile", "arguments": { "publicIdentifier": "williamhgates" } }

Profile with enrichment flags

{ "tool": "harvest_get_profile", "arguments": { "url": "https://www.linkedin.com/in/williamhgates", "findEmail": "true", "skipSmtp": "true" } }

Company

{ "tool": "harvest_get_company", "arguments": { "universalName": "google" } }

Search profiles

{ "tool": "harvest_search_profiles", "arguments": { "search": "staff engineer", "currentCompany": "google", "page": "1" } }

Post comments

{ "tool": "harvest_get_post_comments", "arguments": { "post": "https://www.linkedin.com/posts/.../..." } }

Error & Rate-Limit Behavior

HTTP

Behavior

401/403

HarvestApiError with hint — never retried. Check HARVESTAPI_KEY.

404/422

HarvestApiError — never retried.

429

HarvestApiError with Retry-After surfaced in message and retryAfter field. Retried with backoff respecting Retry-After up to HARVESTAPI_MAX_RETRIES.

5xx

Retried with exponential backoff (400 ms × 2^attempt, max 5 s) up to HARVESTAPI_MAX_RETRIES.

timeout

HarvestTimeoutError — retried with backoff up to HARVESTAPI_MAX_RETRIES.

HarvestAPI has no per-minute rate limit; concurrency limits are per plan (Free 1, Starter 5, Basic 10, Pro 20, Business 40) with queue size 10 — see https://docs.harvestapi.io/guides/concurrency.md. Exceeding queue returns an error; the client surfaces 429 with Retry-After when present.

Validation errors (missing required identifier, requireAtLeastOne) are local HarvestValidationError before any request.

Raw API payloads are preserved in responses. Email fields are only marked verified if the API says so.

Development

npm ci
npm run lint        # eslint
npm run typecheck   # tsc --noEmit
npm run build       # tsc
npm test            # vitest
npm run test:coverage
npm run check       # lint + typecheck + build + test

Needs Node 20+.

Project Docs

Security

  • HARVESTAPI_KEY is only read from env (HARVESTAPI_KEY). Never logged, never included in error bodies beyond redacted hints.

  • Never commit .env. .env.example contains placeholders only. .gitignore covers .env, node_modules, dist, coverage.

  • Report security issues via GitHub Issues (do not post keys in issues).

Contributing

PRs welcome. Run npm run check before submitting. See docs/research-notes.md for how endpoints are sourced and validated.

License

MIT — see LICENSE.

Available Tools

25 tools
harvest_get_adA

Get LinkedIn Ad by ID — requires at least one of adId or url.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoThe URL of the LinkedIn Ad
adIdNoThe unique identifier of the LinkedIn Ad

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool is a read operation ('Get') and adds a constraint about parameters. However, it does not mention return format, error behavior, or authentication needs. For a simple retrieval tool, this is adequate but leaves clear gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded with the action and resource, then adds the critical parameter requirement. Every word earns its place; no unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward get tool with two optional parameters and no output schema, the description covers the essential context. It states the core function and the key constraint. It lacks explicit return-value details, but that is often implicit for a 'Get' tool. Overall, it is complete enough for a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully describes both parameters (100% coverage). The description adds meaningful relational semantics by clarifying that at least one of adId or url is required, which is not evident from the schema (no required fields). This goes beyond mere parameter definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get LinkedIn Ad by ID' — a specific verb and resource. It distinguishes from sibling harvest_search_ads by indicating it fetches a single ad by identifier or URL, rather than searching.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a prerequisite ('requires at least one of adId or url') which tells users when the tool can be invoked, but it does not explicitly compare to alternatives like harvest_search_ads. Usage context is implied by the name and parameter requirement, but no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_comment_reactionsA

Get reactions of a LinkedIn post comment by comment URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL of the LinkedIn comment (required)
pageNoPage number (default 1)

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavioral traits. It only restates the purpose without mentioning pagination behavior (despite the page parameter), rate limits, authentication requirements, or what the response contains. This is a significant gap for a tool that may return paginated results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that immediately conveys the tool's purpose. Every word earns its place, and there is no unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with only two well-documented parameters, but there is no output schema. The description does not explain the return format or pagination behavior, leaving a gap in completeness. Still, for a straightforward fetch operation, the description is minimally viable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage, describing both the 'url' (required) and 'page' (default 1) parameters. The description adds no extra semantic detail beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'reactions of a LinkedIn post comment', with the scope defined by 'comment URL'. It distinguishes from sibling tools like harvest_get_post_reactions (post reactions) and harvest_get_comment_replies (replies), making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you have a LinkedIn comment URL and need its reactions. However, it does not explicitly mention alternatives or exclusions, such as using harvest_get_post_reactions for post-level reactions. This leaves usage guidance implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_comment_repliesA

Get replies of a LinkedIn post comment by comment URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL of the LinkedIn comment (required)
paginationTokenNoToken from previous page

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only restates the purpose and does not mention pagination behavior, rate limits, or return format. For a read operation this is less severe than a mutation, but still lacks meaningful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words, front-loading the action and the target. It is appropriately concise for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has only two parameters, one required, and the schema covers them fully. The description states the operation clearly. However, the absence of an output schema and annotations means a brief note on pagination or return value would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description's mention of 'comment URL' adds no extra meaning beyond what the schema already states. The paginationToken parameter is not elaborated beyond its schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies a concrete verb ('get') and resource ('replies of a LinkedIn post comment') with a clear input criterion ('by comment URL'). It distinguishes itself from sibling tools like harvest_get_post_comments and harvest_get_comment_reactions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use the tool (when you want replies to a specific comment URL), but it does not explicitly state when not to use it or mention alternative tools. Context is clear enough, though exclusions are missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_companyA

Get LinkedIn company — requires at least one of url, universalName, search.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL of the LinkedIn company, e.g. https://www.linkedin.com/company/google/
searchNoCompany name; uses LinkedIn search and returns most relevant result
universalNameNoUniversal name (last part of LinkedIn company URL), e.g. google

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry behavioral disclosure. It only states the input requirement and does not explain behavior when multiple parameters are provided, error handling, authentication needs, or return format. Minimal context beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the action and the key requirement without any filler. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with three optional parameters and no output schema. The description plus schema provide the essential information for a basic getter tool. Missing details like precedence when multiple params are given or what the response contains slightly reduce completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% since each parameter has a description. The description adds value by specifying the cross-parameter constraint that at least one of the three must be provided, which is not enforced by the schema (all are optional). This helps the agent avoid invalid calls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Get LinkedIn company' with a specific verb and resource. It distinguishes itself from sibling tools like harvest_search_companies by implying direct retrieval by identifier rather than search, and the requirement clause adds specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a clear usage constraint: 'requires at least one of url, universalName, search.' However, it does not explicitly mention when to use this tool instead of alternatives like harvest_search_companies, leaving the comparison implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_company_postsA

Get LinkedIn company posts — requires at least one of company, companyId, companyUniversalName.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
companyNoCompany URL, e.g. https://www.linkedin.com/company/google
companyIdNoCompany ID (faster)
postedLimitNoFilter by max posted date: 24h, week, month
paginationTokenNoToken from previous page
scrapePostedLimitNoPost-filter by date: 1h, 24h, week, month, 3months, 6months, year
companyUniversalNameNoCompany universal name (last part of URL)

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states an input requirement and does not mention pagination behavior, rate limits, return format, or any side effects. The lack of disclosure beyond the prerequisite leaves significant behavioral aspects undocumented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the purpose, and includes an essential constraint. Every word earns its place; there is no unnecessary verbosity or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 7 parameters, no output schema, and no annotations, but the schema descriptions are thorough. The description adequately covers the core purpose and the identifier requirement, but it omits any guidance on pagination flow, date filtering nuances, or what the response contains. It is minimally viable but not rich.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds value by specifying that at least one of company, companyId, or companyUniversalName is required, which is not encoded in the schema (all parameters are optional). This clarifies the parameter selection logic beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: retrieving LinkedIn company posts. It uses a specific verb ('Get') and resource ('LinkedIn company posts'), distinguishing it from sibling tools like harvest_get_profile_posts or harvest_search_posts. The mention of required identifiers further clarifies the target.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a necessary prerequisite (at least one of company, companyId, companyUniversalName) but does not explain when to use this tool instead of alternatives like search_posts or get_post. The usage context is implied by the tool name and description, but no explicit exclusions or alternative guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_groupA

Get LinkedIn group — requires at least one of url or groupId.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL of the LinkedIn group
groupIdNoID of the LinkedIn group

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavior. It adds an important constraint—'requires at least one of url or groupId'—that is not evident from the schema's zero required parameters. However, it does not explain what happens if both are provided, error behavior, or explicitly confirm the operation is read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the purpose and includes only the essential requirement. Every word earns its place with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter get tool with no output schema and no annotations, the description covers the core invocation logic and the key constraint. It does not mention return format or authorization, but these are minor gaps given the simplicity of the operation and the absence of structured annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes both parameters with 100% coverage, but the description adds critical semantic meaning by clarifying that at least one of url or groupId must be supplied. This relationship is not captured in the schema and helps the agent understand parameter dependencies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get LinkedIn group' clearly states the action (get) and resource (LinkedIn group), distinguishing it from sibling tools like harvest_get_company or harvest_search_groups. The mention of 'url or groupId' further specifies the scope of what is retrieved.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives such as harvest_search_groups for finding groups. The description only states a parameter requirement, not contextual usage or conditions for preferring this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_jobA

Get LinkedIn job details — requires at least one of jobId or url.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL of the LinkedIn job
jobIdNoID of the LinkedIn job

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description is the only source of behavioral disclosure. It discloses the input requirement but says nothing about output shape, error handling, or whether both parameters can be used. The verb 'Get' implies a read operation, but additional context would be helpful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence that leads with the action and immediately states the key constraint. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter getter, the description provides enough information to invoke the tool correctly. The lack of an output schema means the return type isn't detailed, but 'job details' is understandable; still, slightly more detail about the output or error cases would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with each parameter described, but the description adds the crucial relationship that at least one is required, which the schema does not convey. This goes beyond the structured field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get LinkedIn job details' with a specific verb and resource, and the requirement 'requires at least one of jobId or url' adds scope. This distinguishes it from sibling search tools like harvest_search_jobs and getters for other resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear prerequisite condition ('requires at least one of jobId or url') that tells the agent when to use this tool. It does not explicitly name alternatives, but the sibling tool names make the use case inferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_my_api_userA

Get details about the API user associated with the provided API key.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. It discloses read-only behavior via 'Get' and clarifies the API key association, but lacks details on return structure, rate limits, or error cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single clear sentence with no superfluous information, perfectly concise and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read-only operation, the description is sufficient to convey the tool's purpose and operation. It could specify what 'details' include, but the low complexity makes it mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the baseline is 4. The description adds the context that the API key (likely from request headers) is used to identify the user, which clarifies how the tool operates without needing parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves details about the API user associated with the API key, using a specific verb+resource. It distinguishes from sibling tools that target companies, ads, or other entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when one needs the authenticated user's info, but provides no explicit guidance on when to use it versus alternatives, nor any exclusions or alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_my_private_account_poolsA

Get details about private account pools associated with the API user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden of behavioral disclosure. It only says 'Get details,' implying a read operation, but does not mention auth requirements, rate limits, pagination, or return format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that directly states the tool's purpose with no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (no parameters, no output schema), the description provides a clear scope but lacks detail on what 'details' includes or potential usage nuances, making it minimally sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is nothing to document beyond what the schema shows. The baseline of 4 applies because no parameter semantics are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get details' and the specific resource 'private account pools associated with the API user.' This distinguishes the tool from sibling tools focused on companies, profiles, and groups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided. The description does not indicate when to use this tool versus alternatives, nor does it mention any prerequisites or typical scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_postA

Get LinkedIn post details by URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL of the LinkedIn post (required)

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavior. It only states that it gets post details, but does not mention authentication requirements, return format, rate limits, potential errors (e.g., invalid/private post), or whether it is read-only. The description is too thin to provide meaningful behavioral transparency beyond the basic operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundant words. It directly states the action, resource, and input method. Every word earns its place, making it highly concise and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter get-by-URL tool, the description is minimally adequate but leaves gaps. It does not clarify what 'details' includes (e.g., content, author, metrics) and does not mention error cases or that this complements siblings like harvest_get_post_comments. The lack of an output schema and annotations means the description should provide more context, but given the tool's simplicity, it meets a minimum viability threshold.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers the 'url' parameter with a clear description ('URL of the LinkedIn post (required)'). The description's mention of 'by URL' adds no new meaning. With 100% schema coverage, the baseline of 3 applies; the description does not enhance parameter understanding further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') with a clear resource ('LinkedIn post details') and the method of identification ('by URL'). It distinguishes itself from siblings like harvest_search_posts (search-based) and harvest_get_post_comments (comments only) by focusing on the post itself via a URL. This is a clear, non-tautological statement of purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by URL' implies the tool is meant to be used when you have a specific post URL. However, it does not explicitly state when to use this over alternatives (e.g., harvest_search_posts for discovery) or any exclusions. Usage is implied but not elaborated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_post_commentsB

Get comments of a LinkedIn post by post URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
postYesURL of the LinkedIn post (required)
sortByNoSort by: relevance, date
paginationTokenNoToken for page>1 when sortBy=relevance

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It only states a read action ('get comments') and does not mention pagination, sorting behavior, potential errors, or limitations. This is insufficient for a tool with multiple parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, clear sentence that front-loads the core purpose without redundancy. It is appropriately concise for a simple tool description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations or output schema, the description is too sparse. It does not explain the return format, pagination mechanics, or how 'sortBy' and 'paginationToken' interact. Given the complexity of nearby tools, this description is not complete enough for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% coverage of parameter descriptions, including 'post', 'page', 'sortBy', and 'paginationToken'. The tool description adds no extra meaning beyond the schema, meeting the baseline but not enhancing understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get comments of a LinkedIn post by post URL' uses a specific verb and resource, clearly distinguishing it from sibling tools like 'get_post_reactions' or 'get_comment_replies'. The purpose is immediately obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when needing comments for a specific post, but provides no explicit guidance on when to choose this over alternatives or any prerequisites. The usage is clear from the purpose but lacks alternative differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_post_reactionsA

Get reactions of a LinkedIn post by post URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
postYesURL of the LinkedIn post (required)

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only states the action without disclosing response format, pagination behavior (though the page parameter hints at it), or any side effects. As a get operation, it is likely read-only, but key behavioral details are missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundant words, conveying the essential operation and input efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the basic purpose and required input, but with no output schema, it should clarify what the response contains. Pagination is only implied by the page parameter, so the tool's return structure and behavior are incomplete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters described (post URL and page number). The description only reiterates the post URL input, adding no new semantic meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ("Get") and resource ("reactions of a LinkedIn post"), and clearly states the required input (post URL). This distinguishes it from sibling tools like harvest_get_post_comments or harvest_get_comment_reactions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when you need reactions for a specific LinkedIn post. However, it does not explicitly name alternatives or exclusion criteria, so it falls short of a full 5 but is still clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_profileA

Get LinkedIn profile — requires at least one of url, publicIdentifier, profileId. Flags: main, findEmail, skipSmtp, includeAboutProfile.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL of the LinkedIn profile, e.g. https://www.linkedin.com/in/williamhgates
mainNoSet to true to return only main profile sections (fewer credits)
skipSmtpNoSet to true together with findEmail to skip SMTP verification (fewer credits)
findEmailNoSet to true to find and validate the profile email (more credits). Performs SMTP checks; catch-all domains marked risky
profileIdNoID of the LinkedIn profile
publicIdentifierNoPublic identifier (last part of profile URL), e.g. williamhgates
includeAboutProfileNoSet to true to scrape the About this profile popup

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description provides no detail on side effects, authentication, rate limits, or credit implications of flags like findEmail. It merely lists flags without explaining their behavioral consequences, leaving the agent underinformed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with a compact flag list, front-loading the action and avoiding redundancy. Every word serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core action and lists flags but does not describe the return structure, error conditions, or credit costs. Since there is no output schema and no annotations, the agent is left without expectations for what the tool returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides thorough descriptions for all 7 parameters, so the description adds little per-parameter meaning. However, the one-of requirement for url, publicIdentifier, or profileId is a valuable cross-parameter constraint not captured in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a LinkedIn profile using a specific verb and resource. It distinguishes from sibling tools like harvest_search_profiles by indicating direct retrieval given an identifier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies a prerequisite (one of url, publicIdentifier, profileId) but does not explicitly contrast with search_profiles or other alternatives. Usage is implied by the tool's purpose rather than explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_profile_commentsB

Get comments of a LinkedIn profile — requires at least one of profile or profileId.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
profileNoURL of the LinkedIn profile
profileIdNoProfile ID (faster)
postedLimitNoFilter by max posted date: 24h, week, month
paginationTokenNoToken for page>1

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the transparency burden. It adds a crucial behavioral constraint—that at least one of profile or profileId must be provided—which is not enforced by the schema's empty required list. However, it does not disclose the return format, pagination behavior, or confirm the read-only nature of the operation, leaving gaps in what the agent can expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the core action and the key requirement. Every word earns its place, with no filler or redundancy, making it highly scannable for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (5 optional params, no output schema), the description is minimal but covers the essential identifier requirement. However, it lacks clarity on the scope of 'comments' (by vs. on the profile) and does not mention pagination or response characteristics, leaving the agent with unresolved questions that annotations or a fuller description could address.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers all five parameters with descriptions, so the baseline is 3. The description adds value by specifying a logical relationship between profile and profileId—namely that one is required—which the schema's optional flags do not convey. This is meaningful semantic information for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get comments') and resource ('LinkedIn profile'), making the tool's basic purpose unmistakable. It also differentiates from sibling tools by referencing profile-level comments rather than post or reaction-level data, though it does not explicitly clarify whether these are comments authored by the profile or received on its posts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like harvest_get_post_comments or harvest_get_comment_replies. It only states a prerequisite ('requires at least one of profile or profileId'), which is a constraint but not a usage guideline, so agents receive no context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_profile_postsB

Get LinkedIn profile posts — requires at least one of profile, profileId, profilePublicIdentifier.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
profileNoProfile URL, e.g. https://www.linkedin.com/in/williamhgates
profileIdNoProfile ID (faster)
postedLimitNoFilter by max posted date: 24h, week, month
paginationTokenNoToken from previous page
scrapePostedLimitNoPost-filter by date: 1h, 24h, week, month, 3months, 6months, year
profilePublicIdentifierNoPublic identifier (last part of URL)

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It only states the identifier requirement and the basic action, omitting details like read-only nature, pagination behavior, error handling, or that it returns a list of posts. This is a thin disclosure for a tool with 7 parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the primary action, and includes the key prerequisite. There is no redundant or irrelevant text, every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 7 parameters and no output schema, the description does not explain return values, pagination, or how the filtering parameters relate to the result. The schema covers parameter meanings but the agent lacks high-level context about the tool's behavior, making the description insufficient for a complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover 100% of parameters, so baseline is 3. The description adds a cross-parameter constraint (at least one of profile, profileId, profilePublicIdentifier is required), which is not evident from the schema where all params are optional. This adds meaning about parameter relationships.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the resource ('LinkedIn profile posts'), distinguishing it from sibling tools like get_company_posts or get_post. It also notes the required identifier, adding specificity. The name itself is descriptive, but the description reinforces the tool's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a prerequisite (requires at least one of three identifiers) but gives no guidance on when to choose this tool over alternatives like search_posts or get_profile_comments. It does not mention exclusion cases or alternative tools for similar tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_get_profile_reactionsA

Get reactions of a LinkedIn profile — requires at least one of profile or profileId.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
profileNoURL of the LinkedIn profile
profileIdNoProfile ID (faster)
paginationTokenNoToken for page>1

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only mentions the requirement for profile/profileId and does not disclose behaviors such as pagination handling, rate limits, or the response structure. With no annotations to fall back on, this leaves security and operational details undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the core function and the key usage constraint. No filler or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of an output schema, the description does not explain what a response contains (e.g., reaction counts by type, list of reactors). Pagination is implied by the 'page' and 'paginationToken' parameters but not described. The description covers the essential operation but leaves out expected return details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes all parameters, but the description adds the critical constraint that at least one of profile or profileId is needed, which is not captured by the schema's required fields. This helps the agent select the right parameter combination.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: fetching reactions for a LinkedIn profile using either 'profile' or 'profileId'. It distinguishes from sibling tools that target post or comment reactions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies that at least one of 'profile' or 'profileId' is required, giving a clear precondition. It does not explicitly compare to sibling tools like harvest_get_post_reactions, but the resource name makes the context obvious. No exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_search_adsB

Search LinkedIn Ad Library by keyword, advertiser, country, date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
enddateNoEnd date YYYY-MM-DD for custom-date-range
keywordNoSearch by keyword
countriesNoComma-separated country codes (e.g. US,GB,FR) or ALL
searchUrlNoAd Library search URL, e.g. https://www.linkedin.com/ad-library/search?accountOwner=test&keyword=test
startdateNoStart date YYYY-MM-DD for custom-date-range
dateOptionNoDate filter: last-30-days, current-month, current-year, last-year, custom-date-range
accountOwnerNoSearch by company or advertiser name
paginationTokenNoToken from previous page

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does not disclose read-only behavior, return format, pagination mechanics, or any side effects. The presence of a paginationToken parameter is not explained, leaving the agent to infer behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently summarizes the tool's purpose without redundant words. Every word contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 optional parameters and no output schema, the description is too minimal. It fails to explain how parameters combine, what a typical result looks like, or how pagination works. The agent is left without enough context to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, giving a baseline of 3. The description adds no additional semantic meaning beyond listing the same filter fields. It does not explain parameter interactions, defaults, or optionality constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Search') and the specific resource ('LinkedIn Ad Library') with key search dimensions (keyword, advertiser, country, date range). It is specific and distinct from sibling tools like harvest_get_ad, which retrieves a single ad.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for searching LinkedIn ads but provides no explicit guidance on when to use this vs. alternatives (e.g., harvest_get_ad for a specific ad). There are no exclusions or context clues beyond the resource name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_search_companiesA

Search LinkedIn companies by keywords, location, size, industry.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
geoIdNoFilter by LinkedIn Geo ID (overrides location). Use harvest_search_geo_id to find it
searchNoKeywords to search for in company names
locationNoFilter by location (e.g. Australia)
industryIdNoIndustry ID(s) comma-separated. List: https://github.com/HarvestAPI/linkedin-industry-codes-v2
companySizeNoCompany size filter. Values: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+ (comma-separated)

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits itself. It only states the action and filters; it does not mention that the operation is read-only, how results are paginated, what fields are returned, or any authentication/rate-limit implications. This under-disclosure leaves significant uncertainty for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence: 'Search LinkedIn companies by keywords, location, size, industry.' It is concise, with no filler, and clearly communicates the core purpose without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters and no output schema, the description is minimally viable. The schema covers parameter semantics well, but the description lacks details on return format, pagination, or typical usage scenarios. It meets the basic bar but leaves measurable gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema includes detailed descriptions for all 6 parameters (100% coverage), including geoId override and companySize value ranges. The description only lists a subset of filter dimensions without adding new meaning beyond the schema, so a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches LinkedIn companies by keywords, location, size, and industry, which are meaningful filter criteria. It distinguishes itself from sibling search tools (e.g., search_jobs, search_posts) by explicitly targeting companies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for searching/finding companies via the verb 'search', but it does not explicitly contrast with alternatives like harvest_get_company for retrieving a specific company or other search tools. There is no when-to-use guidance or exclusionary language.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_search_geo_idA

Search LinkedIn Geo ID by location text — use to resolve geoId for other search endpoints.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchYesLocation text to search Geo ID for, e.g. New York

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only states the basic function but does not disclose likely behavior such as whether it returns a single ID or list, error handling, rate limits, or data source specifics. This is insufficient for full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys the purpose and usage context without wasted words. It is concise and to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one parameter, no output schema), but the description does not explicitly state what the return value looks like or what happens on no match. It implies resolution but leaves gaps, making it not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the 'search' parameter is described with an example ('New York'). The description's 'by location text' adds no extra meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Search') and the resource ('LinkedIn Geo ID'), and adds that it is used to resolve geoId for other search endpoints, which distinguishes it from sibling search tools. It is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use it to resolve geoId for other search endpoints, giving clear context on when to use it. However, it does not mention exclusions or alternatives, so it falls 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.

harvest_search_groupsA

Search LinkedIn Groups by keywords.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
searchNoKeywords to search for

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must carry the behavioral burden. It only states a search action without mentioning pagination, result limits, search matching behavior, authentication, or output format. For a search tool, such details are important but omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence with no fluff. It front-loads the action and resource, making it highly scannable and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple search tool with two documented parameters and no output schema, the description is functionally adequate but feels thin. It does not explain what the response contains or whether pagination is required, yet the tool's simplicity lowers the risk of misuse. Overall, it is minimally sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers both parameters with descriptions ('Page number (default 1)' and 'Keywords to search for'), so schema coverage is 100%. The tool description adds no extra meaning beyond the schema; it only paraphrases the keyword parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is very clear: 'Search LinkedIn Groups by keywords.' It uses a specific verb ('search') and a specific resource ('LinkedIn Groups'), distinguishing it from sibling search tools for ads, companies, jobs, profiles, etc. The purpose is immediately understandable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit when-to-use guidance or alternatives. However, the resource name 'Groups' implicitly signals its use case compared to siblings. No exclusions or contextual hints are given, but the purpose itself offers basic guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_search_jobsC

Search LinkedIn jobs by title, company, location, filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
geoIdNoFilter by LinkedIn Geo ID (overrides location)
salaryNoSalary range filter
searchNoKeywords to search for in job titles
sortByNoSort by: relevance, date
locationNoFilter by location
companyIdNoFilter by company ID or URL (comma-separated)
easyApplyNoFilter jobs with Easy Apply
functionIdNoJob function ID filter
industryIdNoIndustry ID filter
postedLimitNoPosted date filter: 24h, week, month
workplaceTypeNoWorkplace type: on-site, remote, hybrid
employmentTypeNoEmployment type: full-time, part-time, contract, temporary, volunteer, internship
experienceLevelNoExperience level filter
under10ApplicantsNoFilter jobs with under 10 applicants

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does not mention output format, pagination, rate limits, permissions, or any potential side effects. The description only restates the basic search operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It is concise and easy to parse, though it sacrifices informative depth for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (15 parameters, no output schema, no annotations), the description is inadequate. It does not explain what a successful search returns, how the 'page' parameter works, or any behavioral caveats, leaving significant gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of the 15 parameters with descriptive text. The description's mention of 'title, company, location, filters' summarizes some parameters but adds no new semantic detail beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the verb 'Search' and the resource 'LinkedIn jobs', with specific fields 'title, company, location, filters'. This differentiates it from sibling search tools by resource, though 'filters' is somewhat generic and doesn't enumerate them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool compared to alternatives like harvest_search_companies or harvest_search_profiles. It simply describes the action without any context, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_search_leadsB

Search LinkedIn leads (Sales Navigator) with advanced inclusion/exclusion filters. Supports 30+ filter params.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (clamped at 100)
geoIdsNoLinkedIn Geo IDs, comma-separated
searchNoSearch query (fuzzy, supports LinkedIn operators)
schoolsNoSchool IDs or URLs, comma-separated (max 50)
lastNamesNoLast names, comma-separated (max 70)
locationsNoLocation text, comma-separated (max 70)
sessionIdNoSession ID for the search
firstNamesNoFirst names, comma-separated (max 70)
functionIdsNoJob function IDs, comma-separated
industryIdsNoIndustry IDs, comma-separated (max 70)
salesNavUrlNoSales Navigator search URL (overrides other params except page)
excludeGeoIdsNoGeo IDs to exclude, comma-separated (max 70)
pastCompaniesNoPast company IDs or URLs, comma-separated (max 50)
pastJobTitlesNoPast job titles, comma-separated (max 70)
excludeSchoolsNoSchools to exclude, comma-separated (max 50)
usePrivatePoolNoSet to true to use private pool
companyHeadcountNoCompany headcount filter, comma-separated
currentCompaniesNoCurrent company IDs or URLs, comma-separated (max 50)
currentJobTitlesNoCurrent job titles, comma-separated (max 70)
excludeLocationsNoLocations to exclude, comma-separated (max 70)
postedOnLinkedinNoLeads who posted on LinkedIn (last 30 days)
profileLanguagesNoProfile languages, comma-separated
requiredAccountIdNoPrivate pool account ID to use
seniorityLevelIdsNoSeniority level IDs, comma-separated
excludeFunctionIdsNoFunction IDs to exclude, comma-separated (max 30)
excludeIndustryIdsNoIndustry IDs to exclude, comma-separated (max 70)
recentlyChangedJobsNoLeads who recently changed jobs (last 90 days)
excludePastCompaniesNoPast companies to exclude, comma-separated (max 50)
excludePastJobTitlesNoPast job titles to exclude, comma-separated (max 70)
yearsOfExperienceIdsNoYears of experience IDs, comma-separated
excludeCurrentCompaniesNoCurrent companies to exclude, comma-separated (max 50)
excludeCurrentJobTitlesNoCurrent job titles to exclude, comma-separated (max 70)
excludeSeniorityLevelIdsNoSeniority level IDs to exclude, comma-separated (max 20)
yearsAtCurrentCompanyIdsNoYears at current company IDs, comma-separated
companyHeadquarterLocationsNoCompany HQ location text, comma-separated (max 70)
excludeCompanyHeadquarterLocationsNoCompany HQ locations to exclude, comma-separated (max 70)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that the tool 'supports 30+ filter params' without mentioning pagination, result limits, authentication requirements, or return format. This leaves the agent without critical context for invoking the tool correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, with two sentences that directly state the purpose and scope. The second sentence about '30+ filter params' is a bit redundant with 'advanced inclusion/exclusion filters' but still adds a quantitative detail. No unnecessary filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (36 parameters, no output schema), the description is too sparse. It provides no high-level guidance on constructing searches, typical use cases, or return values. The schema handles parameter details, but the description fails to give the agent a broader behavioral and usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage of all 36 parameters with detailed descriptions, so the baseline is 3. The description adds no specific parameter semantics beyond a vague count of filters; it does not clarify relationships like salesNavUrl overriding other parameters (which is already in the schema).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Search') and resource ('LinkedIn leads (Sales Navigator)'), clearly distinguishing it from sibling tools like harvest_search_profiles or harvest_search_companies. It also mentions the key feature of advanced inclusion/exclusion filters, which helps the agent understand the tool's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for searching LinkedIn leads, but it does not explicitly state when to use it over alternatives or mention exclusions. Sibling tool names differentiate by resource type, but no explicit guidance is given about selecting this tool versus others or about handling Sales Navigator URLs versus individual filters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_search_postsB

Search LinkedIn posts by keywords, author, company, group, content type, date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
groupNoGroup LinkedIn URL or Group ID
searchNoKeywords to search for in posts
sortByNoSort by: relevance, date
companyNoFilter by company URL(s) (comma-separated)
profileNoFilter by author's profile URL (comma-separated)
companyIdNoFilter by company ID(s) (comma-separated, faster)
profileIdNoFilter by author's profile ID(s) (comma-separated, faster)
contentTypeNoContent type: videos, images, live_videos, documents, collaborative_articles, jobs
postedLimitNoFilter by max posted date: 24h, week, month
authorKeywordsNoKeywords in authors' profiles
authorsCompanyNoCompanies where authors work (URLs/IDs, comma-separated)
paginationTokenNoToken from previous page
mentioningMemberNoFilter posts mentioning profile URL/ID (comma-separated)
authorsIndustryIdNoIndustry IDs of authors' companies (comma-separated)
mentioningCompanyNoFilter posts mentioning company URL/ID (comma-separated)
scrapePostedLimitNoPost-filter by date: 1h, 24h, week, month, 3months, 6months, year

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, but it only states the action without revealing pagination behavior, return format, authentication requirements, rate limits, or side effects. The presence of a paginationToken parameter and multiple filtering options implies complexity that is not explained, leaving significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the tool's purpose and main filter types. Every word contributes to clarity, with no filler or redundant information. It is highly efficient and appropriately sized for a search tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex search tool with 17 parameters, no output schema, and no annotations. A one-sentence description is insufficient to convey overall behavior such as pagination handling, sorting, or the combination of filters. The schema covers parameters individually, but the description does not provide the higher-level context needed to fully understand the tool's capabilities and usage patterns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% parameter description coverage, so the description need not redefine parameters. It does add marginal value by grouping filters into human-readable categories (keywords, author, company, group, content type, date range), which helps an agent quickly grasp the primary filtering dimensions. However, it does not add meaning beyond the already detailed schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Search LinkedIn posts' with a specific verb and resource, listing key filter dimensions (keywords, author, company, group, content type, date range). This distinguishes it from sibling search tools like harvest_search_profiles or harvest_search_companies, which target different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when searching for LinkedIn posts, and the listed filters provide context for common use cases. However, it does not explicitly mention when not to use this tool or point to alternatives such as harvest_get_profile_posts for profile-specific post retrieval. There is no exclusion or alternative guidance, so it falls short of the higher bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_search_profilesA

Search LinkedIn profiles by name, company, school, location, title, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
geoIdNoFilter by LinkedIn Geo ID (overrides location)
titleNoFilter by title
schoolNoFilter by school ID/URL (comma-separated)
searchNoSearch profiles by name
lastNameNoFilter by last name
locationNoFilter by location text
firstNameNoFilter by first name
followerOfNoFilter profiles that are followers of a LinkedIn profile (URL/ID, comma-separated)
industryIdNoFilter by industry ID (comma-separated)
pastCompanyNoFilter by past company ID/URL (comma-separated)
currentCompanyNoFilter by current company ID/URL (comma-separated)
keywordsSchoolNoFilter by keywords in school name
keywordsCompanyNoFilter by keywords in company name

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It only repeats filter capabilities and does not mention pagination behavior, result format, rate limits, or any other operational characteristics. This is a significant gap for a search tool with 14 optional parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that clearly states the action and resource. There is no clutter or redundant information, making it easy to scan and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lacks critical context for a complex tool: no output schema, no pagination guidance, no indication of result limits, and no explanation of how multiple filters work together. Given the 14-parameter input and no annotations, the description is incomplete for an AI agent to invoke confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 14 parameters in detail. The tool description adds minimal value beyond listing a few filter types, but it does not clarify how parameters interact (e.g., geoId overrides location) or combine filters effectively. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Search LinkedIn profiles' with specific filter dimensions (name, company, school, location, title, etc.). This verb+resource combination distinguishes it from sibling tools that search other entities like companies, jobs, or posts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this tool when you need to find LinkedIn profiles based on various criteria. It provides a clear context but does not explicitly mention alternatives or when not to use it, such as when to use harvest_search_leads or harvest_get_profile instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

harvest_search_servicesB

Search LinkedIn profile services by keywords and location.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
geoIdNoFilter by LinkedIn Geo ID (overrides location)
searchYesKeywords to search for (required)
locationNoFilter by location text

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, but it only states the search action. It does not mention pagination behavior, output format, authentication requirements, rate limits, or whether the operation is read-only. The description adds no context beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, succinct sentence with no redundant wording. It states the core purpose without any filler, making it highly concise and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is insufficient for a complete understanding. It does not explain pagination behavior, the relationship between geoId and location, or the structure of results. A tool with this simplicity should still mention such details to be fully contextualized.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add meaning beyond what the schema already provides for 'search' and 'location', and it omits 'geoId' and 'page'. However, it does correctly identify keywords and location as the primary filtering dimensions, which is a minor interpretive aid.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: searching LinkedIn profile services by keywords and location. The verb 'search' and the resource 'LinkedIn profile services' are specific, and the scope (keywords, location) is conveyed. This distinguishes it from sibling tools like search_profiles or search_ads, which target different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description does not mention exclusions, prerequisites, or contrast with sibling search tools. Users are left to infer that this is for searching services specifically, but no explicit direction is given.

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. Dates show when Glama detected each change.

  1. 25 tool updatesv1.0.0
    • First observedharvest_get_ad
    • First observedharvest_get_comment_reactions
    • First observedharvest_get_comment_replies
    • First observedharvest_get_company
    • First observedharvest_get_company_posts
    • First observedharvest_get_group
    • First observedharvest_get_job
    • First observedharvest_get_my_api_user
    • First observedharvest_get_my_private_account_pools
    • First observedharvest_get_post
    • First observedharvest_get_post_comments
    • First observedharvest_get_post_reactions
    • First observedharvest_get_profile
    • First observedharvest_get_profile_comments
    • First observedharvest_get_profile_posts
    • First observedharvest_get_profile_reactions
    • First observedharvest_search_ads
    • First observedharvest_search_companies
    • First observedharvest_search_geo_id
    • First observedharvest_search_groups
    • First observedharvest_search_jobs
    • First observedharvest_search_leads
    • First observedharvest_search_posts
    • First observedharvest_search_profiles
    • First observedharvest_search_services

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a distinct LinkedIn resource-action pair, with clear separation between searching and getting entities. Within sub-resources, getters for posts, comments, reactions, and replies are unambiguous.

Naming Consistency5/5

All tools follow the harvest_<verb>_<resource> pattern, using only 'get' and 'search' as verbs. Multi-word resources are hyphenated consistently, and there are no mixed naming conventions.

Tool Count4/5

25 tools is on the higher end but appropriate for the broad scope of LinkedIn entities covered (ads, companies, groups, jobs, leads, posts, profiles, services, and account info). Each tool adds a distinct capability.

Completeness4/5

The read-only harvesting scope is well covered, with both search and get operations for most entities. Minor gaps include the absence of get_lead and get_service endpoints, but search results likely satisfy most needs.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Fully featured MCP server that provides automation tools for LinkedIn, supporting browser-based scraping and API-based operations for content management, media uploads, and reactions.
    6
    3
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Self-hosted, ban-safe MCP server for LinkedIn that provides 22 tools for profiles, search, jobs, posts, connections, and messages. Integrates with any MCP-compatible client like Claude Desktop.
    58
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for LinkedIn API integration. Enables authentication, profile access, connections, search, messaging, and feed management via OAuth2.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    A production-ready MCP server for interacting with the LinkedIn API, enabling profile lookup, post creation and deletion, image posting, and organization page management through a secure tool-based interface.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Hassan220022/harvestapi-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server