harvestapi-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@harvestapi-mcpFind LinkedIn profiles of senior software engineers in Austin, TX."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
harvestapi-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.
Legal / Ethical Notice
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
Node.js 20+
A HarvestAPI key — get one at https://harvestapi.io/admin/api-keys
Install
git clone https://github.com/Hassan220022/harvestapi-mcp
cd harvestapi-mcp
npm ci
npm run buildOr run without cloning (after npm publish or via npx from the repo):
npx --yes github:Hassan220022/harvestapi-mcpEnvironment
Variable | Required | Default | Description |
| yes | — | Your HarvestAPI API key. Sent as |
| no |
| Override base URL (rarely needed). |
| no |
| Request timeout in ms. |
| no |
| 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 .envConfigure
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 |
| Get LinkedIn profile | one of |
| Search LinkedIn profiles | — (all filters optional) |
| Get posts by a profile | one of |
| Get comments by a profile | one of |
| Get reactions by a profile | one of |
| Get LinkedIn company | one of |
| Search companies | — |
| Get posts by a company | one of |
| Get LinkedIn group | one of |
| Search groups | — |
| Resolve LinkedIn Geo ID by text |
|
| Get a LinkedIn post |
|
| Search LinkedIn posts | — |
| Get comments on a post |
|
| Get reactions on a post |
|
| Get reactions on a comment |
|
| Get replies to a comment |
|
| Get LinkedIn job | one of |
| Search LinkedIn jobs | — |
| Search leads (Sales Navigator) | — |
| Search LinkedIn services |
|
| Get LinkedIn ad | one of |
| Search LinkedIn ad library | — |
| Get your HarvestAPI user/account | — |
| 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 |
|
404/422 |
|
429 |
|
5xx | Retried with exponential backoff (400 ms × 2^attempt, max 5 s) up to |
timeout |
|
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 + testNeeds Node 20+.
Project Docs
Endpoint inventory (30 endpoints):
docs/harvestapi-endpoint-inventory.jsonResearch notes & source URLs:
docs/research-notes.mdTool mapping (Implemented / Intentionally Excluded):
docs/tool-mapping.mdRaw docs crawl:
docs/raw/*.md
Security
HARVESTAPI_KEYis only read from env (HARVESTAPI_KEY). Never logged, never included in error bodies beyond redacted hints.Never commit
.env..env.examplecontains placeholders only..gitignorecovers.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 toolsharvest_get_adA
Get LinkedIn Ad by ID — requires at least one of adId or url.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The URL of the LinkedIn Ad | |
| adId | No | The unique identifier of the LinkedIn Ad |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the LinkedIn comment (required) | |
| page | No | Page number (default 1) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the LinkedIn comment (required) | |
| paginationToken | No | Token from previous page |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL of the LinkedIn company, e.g. https://www.linkedin.com/company/google/ | |
| search | No | Company name; uses LinkedIn search and returns most relevant result | |
| universalName | No | Universal name (last part of LinkedIn company URL), e.g. google |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| company | No | Company URL, e.g. https://www.linkedin.com/company/google | |
| companyId | No | Company ID (faster) | |
| postedLimit | No | Filter by max posted date: 24h, week, month | |
| paginationToken | No | Token from previous page | |
| scrapePostedLimit | No | Post-filter by date: 1h, 24h, week, month, 3months, 6months, year | |
| companyUniversalName | No | Company universal name (last part of URL) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL of the LinkedIn group | |
| groupId | No | ID of the LinkedIn group |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL of the LinkedIn job | |
| jobId | No | ID of the LinkedIn job |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the LinkedIn post (required) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| post | Yes | URL of the LinkedIn post (required) | |
| sortBy | No | Sort by: relevance, date | |
| paginationToken | No | Token for page>1 when sortBy=relevance |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| post | Yes | URL of the LinkedIn post (required) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL of the LinkedIn profile, e.g. https://www.linkedin.com/in/williamhgates | |
| main | No | Set to true to return only main profile sections (fewer credits) | |
| skipSmtp | No | Set to true together with findEmail to skip SMTP verification (fewer credits) | |
| findEmail | No | Set to true to find and validate the profile email (more credits). Performs SMTP checks; catch-all domains marked risky | |
| profileId | No | ID of the LinkedIn profile | |
| publicIdentifier | No | Public identifier (last part of profile URL), e.g. williamhgates | |
| includeAboutProfile | No | Set to true to scrape the About this profile popup |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| profile | No | URL of the LinkedIn profile | |
| profileId | No | Profile ID (faster) | |
| postedLimit | No | Filter by max posted date: 24h, week, month | |
| paginationToken | No | Token for page>1 |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| profile | No | Profile URL, e.g. https://www.linkedin.com/in/williamhgates | |
| profileId | No | Profile ID (faster) | |
| postedLimit | No | Filter by max posted date: 24h, week, month | |
| paginationToken | No | Token from previous page | |
| scrapePostedLimit | No | Post-filter by date: 1h, 24h, week, month, 3months, 6months, year | |
| profilePublicIdentifier | No | Public identifier (last part of URL) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| profile | No | URL of the LinkedIn profile | |
| profileId | No | Profile ID (faster) | |
| paginationToken | No | Token for page>1 |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| enddate | No | End date YYYY-MM-DD for custom-date-range | |
| keyword | No | Search by keyword | |
| countries | No | Comma-separated country codes (e.g. US,GB,FR) or ALL | |
| searchUrl | No | Ad Library search URL, e.g. https://www.linkedin.com/ad-library/search?accountOwner=test&keyword=test | |
| startdate | No | Start date YYYY-MM-DD for custom-date-range | |
| dateOption | No | Date filter: last-30-days, current-month, current-year, last-year, custom-date-range | |
| accountOwner | No | Search by company or advertiser name | |
| paginationToken | No | Token from previous page |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| geoId | No | Filter by LinkedIn Geo ID (overrides location). Use harvest_search_geo_id to find it | |
| search | No | Keywords to search for in company names | |
| location | No | Filter by location (e.g. Australia) | |
| industryId | No | Industry ID(s) comma-separated. List: https://github.com/HarvestAPI/linkedin-industry-codes-v2 | |
| companySize | No | Company size filter. Values: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+ (comma-separated) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| search | Yes | Location text to search Geo ID for, e.g. New York |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| search | No | Keywords to search for |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| geoId | No | Filter by LinkedIn Geo ID (overrides location) | |
| salary | No | Salary range filter | |
| search | No | Keywords to search for in job titles | |
| sortBy | No | Sort by: relevance, date | |
| location | No | Filter by location | |
| companyId | No | Filter by company ID or URL (comma-separated) | |
| easyApply | No | Filter jobs with Easy Apply | |
| functionId | No | Job function ID filter | |
| industryId | No | Industry ID filter | |
| postedLimit | No | Posted date filter: 24h, week, month | |
| workplaceType | No | Workplace type: on-site, remote, hybrid | |
| employmentType | No | Employment type: full-time, part-time, contract, temporary, volunteer, internship | |
| experienceLevel | No | Experience level filter | |
| under10Applicants | No | Filter jobs with under 10 applicants |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (clamped at 100) | |
| geoIds | No | LinkedIn Geo IDs, comma-separated | |
| search | No | Search query (fuzzy, supports LinkedIn operators) | |
| schools | No | School IDs or URLs, comma-separated (max 50) | |
| lastNames | No | Last names, comma-separated (max 70) | |
| locations | No | Location text, comma-separated (max 70) | |
| sessionId | No | Session ID for the search | |
| firstNames | No | First names, comma-separated (max 70) | |
| functionIds | No | Job function IDs, comma-separated | |
| industryIds | No | Industry IDs, comma-separated (max 70) | |
| salesNavUrl | No | Sales Navigator search URL (overrides other params except page) | |
| excludeGeoIds | No | Geo IDs to exclude, comma-separated (max 70) | |
| pastCompanies | No | Past company IDs or URLs, comma-separated (max 50) | |
| pastJobTitles | No | Past job titles, comma-separated (max 70) | |
| excludeSchools | No | Schools to exclude, comma-separated (max 50) | |
| usePrivatePool | No | Set to true to use private pool | |
| companyHeadcount | No | Company headcount filter, comma-separated | |
| currentCompanies | No | Current company IDs or URLs, comma-separated (max 50) | |
| currentJobTitles | No | Current job titles, comma-separated (max 70) | |
| excludeLocations | No | Locations to exclude, comma-separated (max 70) | |
| postedOnLinkedin | No | Leads who posted on LinkedIn (last 30 days) | |
| profileLanguages | No | Profile languages, comma-separated | |
| requiredAccountId | No | Private pool account ID to use | |
| seniorityLevelIds | No | Seniority level IDs, comma-separated | |
| excludeFunctionIds | No | Function IDs to exclude, comma-separated (max 30) | |
| excludeIndustryIds | No | Industry IDs to exclude, comma-separated (max 70) | |
| recentlyChangedJobs | No | Leads who recently changed jobs (last 90 days) | |
| excludePastCompanies | No | Past companies to exclude, comma-separated (max 50) | |
| excludePastJobTitles | No | Past job titles to exclude, comma-separated (max 70) | |
| yearsOfExperienceIds | No | Years of experience IDs, comma-separated | |
| excludeCurrentCompanies | No | Current companies to exclude, comma-separated (max 50) | |
| excludeCurrentJobTitles | No | Current job titles to exclude, comma-separated (max 70) | |
| excludeSeniorityLevelIds | No | Seniority level IDs to exclude, comma-separated (max 20) | |
| yearsAtCurrentCompanyIds | No | Years at current company IDs, comma-separated | |
| companyHeadquarterLocations | No | Company HQ location text, comma-separated (max 70) | |
| excludeCompanyHeadquarterLocations | No | Company HQ locations to exclude, comma-separated (max 70) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| group | No | Group LinkedIn URL or Group ID | |
| search | No | Keywords to search for in posts | |
| sortBy | No | Sort by: relevance, date | |
| company | No | Filter by company URL(s) (comma-separated) | |
| profile | No | Filter by author's profile URL (comma-separated) | |
| companyId | No | Filter by company ID(s) (comma-separated, faster) | |
| profileId | No | Filter by author's profile ID(s) (comma-separated, faster) | |
| contentType | No | Content type: videos, images, live_videos, documents, collaborative_articles, jobs | |
| postedLimit | No | Filter by max posted date: 24h, week, month | |
| authorKeywords | No | Keywords in authors' profiles | |
| authorsCompany | No | Companies where authors work (URLs/IDs, comma-separated) | |
| paginationToken | No | Token from previous page | |
| mentioningMember | No | Filter posts mentioning profile URL/ID (comma-separated) | |
| authorsIndustryId | No | Industry IDs of authors' companies (comma-separated) | |
| mentioningCompany | No | Filter posts mentioning company URL/ID (comma-separated) | |
| scrapePostedLimit | No | Post-filter by date: 1h, 24h, week, month, 3months, 6months, year |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination | |
| geoId | No | Filter by LinkedIn Geo ID (overrides location) | |
| title | No | Filter by title | |
| school | No | Filter by school ID/URL (comma-separated) | |
| search | No | Search profiles by name | |
| lastName | No | Filter by last name | |
| location | No | Filter by location text | |
| firstName | No | Filter by first name | |
| followerOf | No | Filter profiles that are followers of a LinkedIn profile (URL/ID, comma-separated) | |
| industryId | No | Filter by industry ID (comma-separated) | |
| pastCompany | No | Filter by past company ID/URL (comma-separated) | |
| currentCompany | No | Filter by current company ID/URL (comma-separated) | |
| keywordsSchool | No | Filter by keywords in school name | |
| keywordsCompany | No | Filter by keywords in company name |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination | |
| geoId | No | Filter by LinkedIn Geo ID (overrides location) | |
| search | Yes | Keywords to search for (required) | |
| location | No | Filter by location text |
TDQS
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.
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.
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.
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.
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.
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.
25 tool updates
v1.0.0- First observed
harvest_get_ad - First observed
harvest_get_comment_reactions - First observed
harvest_get_comment_replies - First observed
harvest_get_company - First observed
harvest_get_company_posts - First observed
harvest_get_group - First observed
harvest_get_job - First observed
harvest_get_my_api_user - First observed
harvest_get_my_private_account_pools - First observed
harvest_get_post - First observed
harvest_get_post_comments - First observed
harvest_get_post_reactions - First observed
harvest_get_profile - First observed
harvest_get_profile_comments - First observed
harvest_get_profile_posts - First observed
harvest_get_profile_reactions - First observed
harvest_search_ads - First observed
harvest_search_companies - First observed
harvest_search_geo_id - First observed
harvest_search_groups - First observed
harvest_search_jobs - First observed
harvest_search_leads - First observed
harvest_search_posts - First observed
harvest_search_profiles - First observed
harvest_search_services
TDQS
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.
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.
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.
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
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
- LinkMCPOAuthio.linkmcp
Hosted MCP server for LinkedIn: 31 tools for profiles, search, messaging, posts, enrichment.
Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.
LinkedIn API as MCP tools to retrieve profile data and publish content. Powered by HAPI MCP.
LinkedIn outreach MCP server — 19 tools for AI agents to prospect, sequence, and manage contacts.
Related MCP Servers
- AlicenseAqualityDmaintenanceFully featured MCP server that provides automation tools for LinkedIn, supporting browser-based scraping and API-based operations for content management, media uploads, and reactions.63MIT
- AlicenseAqualityAmaintenanceSelf-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.581MIT
- FlicenseNot gradedqualityCmaintenanceMCP server for LinkedIn API integration. Enables authentication, profile access, connections, search, messaging, and feed management via OAuth2.-
- FlicenseNot gradedqualityCmaintenanceA 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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