Skip to main content
Glama

handshake-mcp

An MCP server that gives AI assistants like Claude access to Handshake — search jobs, apply, track applications, and research employers through your own browser session.

Disclaimer: This project is independent and unaffiliated with Handshake. Automated access may violate Handshake's Terms of Service. Use for personal productivity only.

Tools

Tool

Description

hs_search_jobs

Search by keyword, location, or job type

hs_get_job

Full description, requirements, salary, deadline

hs_apply

Submit an application, attach resume/cover letter

hs_save_job / hs_unsave_job

Save / unsave jobs (follow)

hs_get_applications / hs_withdraw_application

Application tracking

hs_search_employers / hs_get_employer

Company research (keyword search)

hs_get_profile

Your Handshake student profile

hs_upload_document / hs_get_documents / hs_delete_document

Manage resumes and cover letters

Related MCP server: Chrome MCP Server

Quick start

# First-time login
uvx handshake-mcp --login

# Add to Claude Code (~/.claude/.mcp.json)
{
  "mcpServers": {
    "handshake": {
      "command": "uvx",
      "args": ["handshake-mcp"]
    }
  }
}

From source

git clone https://github.com/shahparam11/handshake-mcp-server.git
cd handshake-mcp
uv sync

# First-time login
uv run handshake-mcp --login

Add to ~/.claude/.mcp.json:

{
  "mcpServers": {
    "handshake": {
      "command": "uv",
      "args": ["run", "--project", "/path/to/handshake-mcp", "handshake-mcp"]
    }
  }
}

Restart Claude Code. The hs_* tools are now available.

With Docker

docker build -t handshake-mcp .

# Login (mounts session storage)
docker run -it -v ~/.handshake-mcp:/root/.handshake-mcp handshake-mcp --login

# Run as MCP server
docker run -i -v ~/.handshake-mcp:/root/.handshake-mcp handshake-mcp

CLI

handshake-mcp --login    # authenticate via browser
handshake-mcp --status   # check session validity
handshake-mcp --logout   # clear saved session
handshake-mcp --version  # print version

How it works

On --login, a Patchright Chromium browser opens. After you log in, the full browser profile (cookies, localStorage, IndexedDB) is saved to ~/.handshake-mcp/. Subsequent tool calls use these cookies via an httpx client against Handshake's internal REST API at app.joinhandshake.com/stu/.

CSRF protection uses the double-submit cookie pattern — the CSRF-TOKEN cookie value is reflected back as the X-CSRF-Token request header.

Note: Handshake's internal API is undocumented. If a tool returns 404, open browser DevTools on Handshake → Network tab, find the matching request path, and update the relevant handshake_mcp/tools/*.py file.

Session refresh

handshake-mcp --login

Project layout

handshake_mcp/
├── cli_main.py       # Entry point — --login/--logout/--status/server
├── server.py         # FastMCP server factory
├── auth.py           # Patchright login + profile/cookie storage
├── client.py         # Authenticated httpx client
├── exceptions.py     # CredentialsNotFoundError, SessionExpiredError
└── tools/
    ├── jobs.py           # hs_search_jobs, hs_get_job, hs_apply, hs_save/unsave_job
    ├── employers.py      # hs_search_employers, hs_get_employer
    ├── applications.py   # hs_get_applications, hs_withdraw_application
    └── profile.py        # hs_get_profile, hs_upload/get/delete_document

Development

uv sync --group dev
uv run pytest --cov
uv run ruff check .

License

MIT — see LICENSE.

Available Tools

12 tools
hs_applyA

Submit a Handshake application for a job.

Call hs_get_job first to confirm the application_method field — external-apply jobs redirect to the employer's own site and cannot be submitted here.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesHandshake posting ID.
document_idsNoIDs of documents to attach (resume, cover letter). Retrieve IDs with hs_get_documents.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that external-apply jobs redirect and cannot be submitted, but does not detail post-submission behavior (e.g., success/failure response). Still, the key behavioral constraint is well communicated.

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

Conciseness5/5

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

Two concise sentences plus a clear note. No filler; every sentence earns its place. Front-loaded with the main action and immediately follows with crucial usage guidance.

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

Completeness4/5

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

Given an output schema exists (not shown), the description need not detail return values. It covers prerequisites and limitations well for a 2-parameter tool. Minor gap: no mention of what happens on successful submission.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value by explaining that document_ids are for attachments (resume/cover letter) and how to retrieve them. It reinforces job_id as mandatory and the prerequisite check.

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

Purpose5/5

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

The description clearly states 'Submit a Handshake application for a job,' specifying the verb and resource. It also distinguishes from sibling tools like hs_get_applications and hs_withdraw_application by focusing on submission.

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

Usage Guidelines5/5

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

Explicitly instructs to call hs_get_job first to check application_method, and warns that external-apply jobs cannot be submitted here. Also suggests using hs_get_documents to retrieve document_ids, providing clear when-to-use and when-not-to-use guidance.

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

hs_get_applicationsA

List all your Handshake job applications with their current status.

Statuses: pending, accepted, declined, withdrawn, interview.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (starts at 1).
per_pageNoResults per page.
statusNoFilter by status — omit to return all applications.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations provided. The description only mentions statuses and filtering, but does not disclose pagination behavior, rate limits, or whether it is read-only. Minimal disclosure beyond the obvious.

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

Conciseness5/5

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

Two sentences, front-loaded with the main purpose, then a clear list of statuses. No wasted words.

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

Completeness4/5

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

Parameters are well-described, and an output schema exists. However, could mention pagination details (e.g., ordering) for full completeness.

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

Parameters4/5

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

Schema description coverage is 100%, but the description adds specific enum values for status ('pending, accepted, declined, withdrawn, interview'), which goes beyond the schema's generic description. This adds meaningful context.

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

Purpose5/5

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

The description clearly states 'List all your Handshake job applications', using a specific verb and resource. It also lists possible statuses, distinguishing this tool from siblings like hs_apply (create) and hs_get_saved_jobs (different resource).

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

Usage Guidelines3/5

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

The description implies usage for viewing applications with optional status filtering, but no explicit guidance on when to use vs alternatives (e.g., hs_get_saved_jobs) or any exclusions.

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

hs_get_documentsA

List your uploaded resumes, cover letters, and other documents.

Use the returned document IDs when calling hs_apply to attach files.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

No annotations provided; the description carries full burden. It is simple and labels the operation as a list, but does not disclose any constraints like rate limits or authentication. However, for a read-only list with no parameters, the minimal disclosure is acceptable.

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

Conciseness5/5

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

Two concise sentences with no unnecessary words. Every sentence provides essential information.

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

Completeness5/5

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

For a simple list tool with no parameters and an output schema, the description tells what it does and how to use the output. No additional context is needed.

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

Parameters4/5

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

No parameters exist, so schema coverage is 100%. Baseline is 4. The description adds value by explaining the document types and linking the output to hs_apply, going beyond the empty schema.

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

Purpose5/5

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

The description clearly states the tool lists uploaded resumes, cover letters, and other documents, and explains how to use the returned IDs. This distinguishes it from sibling tools like hs_get_job or hs_get_applications.

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

Usage Guidelines4/5

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

The description implies when to use: to get document IDs for attaching to applications via hs_apply. It does not provide explicit exclusions, but the context is clear given the siblings.

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

hs_get_employerA

Get a company's Handshake profile.

Includes description, industry, employee count, open job count, and active postings.

ParametersJSON Schema
NameRequiredDescriptionDefault
employer_idYesEmployer ID from hs_search_employers results.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations provided, so description carries burden. It lists included fields but does not discuss read-only nature, auth, or any side effects. Adequate but not detailed.

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

Conciseness5/5

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

Two concise sentences with a clear bullet list of included data. No filler.

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

Completeness5/5

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

Given single parameter and existence of output schema, description adequately covers purpose and key return fields. No missing context.

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

Parameters3/5

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

Schema coverage is 100% with clear parameter description. Tool description adds no extra meaning beyond the schema, so baseline 3.

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

Purpose5/5

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

Description clearly states 'Get a company's Handshake profile' and lists included fields. It distinguishes from siblings like hs_search_employers (search) and hs_get_job (specific job).

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

Usage Guidelines3/5

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

Implicitly suggests using employer ID from hs_search_employers, but no explicit when-to-use or alternatives compared to similar read tools like hs_get_job.

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

hs_get_jobA

Get full details of a Handshake job posting.

Includes description, requirements, salary, application deadline, and application_method (handshake | external).

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesHandshake posting ID (from hs_search_jobs results).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description must convey behavioral traits. It indicates a read operation (get details) without side effects, but does not explicitly state if there are any restrictions, rate limits, or auth requirements.

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

Conciseness5/5

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

The description is only two sentences, no wasted words, and front-loads the main purpose. It is efficient and easy to parse.

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

Completeness5/5

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

Given the tool has a single required parameter and an output schema (though not shown), the description covers key returned fields and expected input format. It is fully complete for this simple tool.

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

Parameters4/5

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

The schema covers 100% of parameters and describes job_id adequately. The description adds extra context by specifying that the ID comes from hs_search_jobs results, aiding correct usage.

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

Purpose5/5

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

The description clearly states 'Get full details of a Handshake job posting' and enumerates included fields (description, requirements, salary, deadline, application_method). It differentiates itself from sibling tools like hs_search_jobs which lists jobs rather than retrieving details.

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

Usage Guidelines3/5

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

The description implies usage for retrieving details after searching (by mentioning job_id from hs_search_jobs), but does not explicitly state when to use or not use this tool versus alternatives.

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

hs_get_profileA

Get your Handshake student profile.

Returns name, school, major, graduation year, and account status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses return fields but lacks details like authentication requirements or side effects. Adequate for a simple read operation.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, no wasted words. Highly concise and well-structured.

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

Completeness5/5

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

Tool has no parameters and output schema is present. Description fully explains what the tool returns, making it complete for this simple tool.

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

Parameters4/5

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

No parameters; baseline 4. Description adds value by listing return fields, though output schema already covers this. Acceptable.

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

Purpose5/5

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

Description clearly states verb 'Get' and resource 'your Handshake student profile', listing specific return fields. It distinguishes from sibling tools that handle applications, jobs, etc.

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

Usage Guidelines3/5

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

Implied usage for retrieving student profile, but no explicit guidance on when to use or alternatives. Given simplicity and no parameters, minimally adequate.

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

hs_get_saved_jobsB

List all jobs you have bookmarked on Handshake.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (starts at 1).
per_pageNoResults per page.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It does not disclose pagination behavior, auth requirements, or what happens with empty results. Very minimal.

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

Conciseness4/5

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

Single sentence, no waste. Could benefit from slight expansion but is concise and front-loaded with purpose.

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

Completeness2/5

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

Given output schema exists, description is minimally adequate but lacks context on scope (all bookmarks) and integration with sibling tools. Very brief for a tool in a complex domain.

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

Parameters3/5

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

Schema description coverage is 100% (both parameters documented with defaults). Description adds no additional meaning beyond schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states it lists saved/bookmarked jobs, using specific verb 'list' and resource 'saved jobs'. It distinguishes from siblings like hs_search_jobs (searches all jobs) and hs_save_job (saves).

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives like hs_search_jobs or hs_get_applications. No mention of preconditions or exclusions.

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

hs_save_jobA

Bookmark a job posting to your Handshake saved-jobs list.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesHandshake posting ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided; description only says 'Bookmark' without disclosing behavioral traits like idempotency, authentication needs, or state changes, leaving the agent underinformed.

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

Conciseness5/5

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

Single sentence, front-loaded verb and object, concise and efficient with no wasted words.

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

Completeness4/5

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

Given simple tool with one parameter and output schema, description covers core purpose; lacks mention of return value or error cases but adequate for straightforward bookmarking.

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

Parameters3/5

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

Schema covers the single parameter (job_id) at 100% with a description 'Handshake posting ID.' Description adds no additional meaning beyond the schema, achieving baseline.

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

Purpose5/5

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

Description clearly states verb 'Bookmark' and resource 'job posting to your Handshake saved-jobs list,' distinguishing it from siblings like hs_unsave_job and hs_get_saved_jobs.

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

Usage Guidelines3/5

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

Implies usage for bookmarking but lacks explicit guidance on when to use this vs alternatives like hs_unsave_job or prerequisites like login.

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

hs_search_employersC

Search for companies/employers on Handshake.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesCompany name or industry keyword.
pageNoPage number (starts at 1).
per_pageNoResults per page.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

No annotations provided, and the description lacks behavioral details such as pagination behavior, rate limits, or authentication requirements. It only restates the basic search function without adding beyond the schema.

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

Conciseness3/5

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

The description is concise but overly brief. It is a single sentence, which is efficient, but lacks critical details that could be added without verbosity.

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

Completeness2/5

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

Despite having an output schema, the description is insufficient for a tool with 3 parameters (1 required) and no usage guidance. It fails to provide enough context for an agent to use it effectively.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already describes all parameters. The description does not add meaningful context beyond the schema, but the baseline is 3 due to high coverage.

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

Purpose4/5

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

The description clearly states it searches for companies/employers on Handshake, distinguishing it from sibling tools like hs_search_jobs (jobs search) and hs_get_employer (specific employer). The verb 'search' and resource 'companies/employers' are specific.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. The description does not mention when not to use it or provide context for sibling tools like hs_get_employer for detailed employer info.

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

hs_search_jobsA

Search for jobs and internships on Handshake.

Returns posting ID, title, employer, location, type, and deadline. Pass the posting ID to hs_get_job for the full description.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoKeywords, job title, or company name.
locationNoCity/state or 'Remote'.
job_typesNoFilter by type — full_time, part_time, internship, co_op, fellowship, volunteer. Omit for all types.
pageNoPage number (starts at 1).
per_pageNoResults per page (max 50).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so the description carries full burden. It lists returned fields but does not disclose behavioral aspects like authentication requirements, rate limits, or side effects (though it's read-only). The schema covers parameters well, but the description could add more about pagination behavior or result ordering.

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

Conciseness5/5

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

Exemplary conciseness: 3 sentences with zero wasted words. First sentence states purpose; second lists key outputs; third gives next step. No redundancy with schema.

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

Completeness4/5

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

For a search tool with 5 optional parameters and an output schema, the description is nearly complete. It covers purpose, key outputs, and linkage to a related tool. Minor gap: no mention of pagination behavior beyond schema (e.g., default page size). Output schema exists, so return values are documented elsewhere.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds no extra meaning beyond the schema; it merely summarizes returned fields which are already in the output schema. No parameter usage examples or constraints beyond schema are provided.

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

Purpose5/5

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

Clear verb-resource combination - 'Search for jobs and internships on Handshake' explicitly states what it does. Distinguishes from sibling tools by listing returned fields and directing to hs_get_job for details, which contrasts with hs_search_employers or hs_get_job.

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

Usage Guidelines4/5

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

Provides a clear workflow hint: 'Pass the posting ID to hs_get_job for the full description.' However, it does not specify when to prefer this tool over alternatives like hs_search_employers or when not to use it.

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

hs_unsave_jobA

Remove a job from your Handshake saved-jobs list.

ParametersJSON Schema
NameRequiredDescriptionDefault
saved_job_idYesSaved-job record ID from hs_get_saved_jobs. This is different from the posting ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided; the description states a destructive action ('Remove') but lacks details on prerequisites, consequences, or error states.

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

Conciseness5/5

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

One concise sentence clearly states the function, with no wasted words.

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

Completeness4/5

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

The description is sufficient for a simple single-parameter tool with an output schema, though it could mention the prerequisite of having saved the job.

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

Parameters3/5

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

Schema coverage is 100% and the schema explains the parameter's source and distinction from posting ID; the description adds no further meaning beyond the schema.

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

Purpose5/5

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

The description uses a specific verb ('Remove') and resource ('saved-jobs list'), clearly distinguishing from sibling tools like 'hs_save_job' and 'hs_get_saved_jobs'.

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

Usage Guidelines3/5

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

No explicit when-to-use or alternatives are given, but the simple nature and sibling context imply it is the inverse of 'hs_save_job'.

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

hs_withdraw_applicationA

Withdraw a submitted Handshake job application.

ParametersJSON Schema
NameRequiredDescriptionDefault
application_idYesApplication ID from hs_get_applications.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, and the description lacks critical behavioral details. It does not disclose whether the action is destructive, reversible, or has side effects. For a mutation tool like withdrawal, this is a significant gap.

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

Conciseness5/5

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

The description is a single, concise sentence with no extraneous words. It efficiently conveys the tool's purpose without redundancy.

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

Completeness3/5

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

Given the presence of an output schema, the description need not detail return values. However, it omits prerequisites, status requirements for the application, and potential results. It is sufficient for simple use but lacks depth for complex scenarios.

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

Parameters3/5

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

The input schema covers 100% of parameters, including a description for 'application_id' that references its origin from hs_get_applications. The main description adds no additional parameter insights, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Withdraw' and the resource 'submitted Handshake job application'. It effectively distinguishes the tool from its siblings, such as hs_apply (submission) and hs_get_applications (listing), making the tool's purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies usage when one needs to withdraw an application, but it does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention prerequisites or conditions. A score of 3 reflects adequate but minimal guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 12 tool updatesv0.1.0
    • First observedhs_apply
    • First observedhs_get_applications
    • First observedhs_get_documents
    • First observedhs_get_employer
    • First observedhs_get_job
    • First observedhs_get_profile
    • First observedhs_get_saved_jobs
    • First observedhs_save_job
    • First observedhs_search_employers
    • First observedhs_search_jobs
    • First observedhs_unsave_job
    • First observedhs_withdraw_application

TDQS

A3.8/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: searching, retrieving details, applying, managing saved jobs, and handling applications. No two tools overlap in functionality; even similar actions like get_job and search_jobs are well-differentiated (detail vs. list) with clear guidance in descriptions.

Naming Consistency5/5

All tools follow a consistent pattern: 'hs_' prefix + verb_noun (e.g., hs_get_job, hs_save_job, hs_search_jobs). Verbs are operational (get, search, save, unsave, apply, withdraw) and nouns are the target resources. No mixing of styles or irregularities.

Tool Count5/5

12 tools is an appropriate number for a Handshake student client. It covers the essential operations (search, retrieve, apply, manage saved jobs and applications, view profile and documents) without being overwhelming or sparse.

Completeness4/5

The tool set covers the core student workflow comprehensively: search jobs/employers, get details, save/unsave, apply, withdraw, view applications, and manage documents. Minor gaps like updating profile or uploading documents are absent but likely outside the MCP's scope.

Maintenance

ActivityStale
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI-driven job application automation for LinkedIn and SEEK platforms with intelligent cover letter generation, automated application submission, and application tracking management. Supports anti-detection measures and complies with platform usage policies for safe job hunting automation.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to control and automate your Chrome browser directly, leveraging existing login states and configurations for tasks like content analysis, semantic search across tabs, screenshots, network monitoring, and interactive operations.
    10
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to interact with your personal Instaffo candidate account, allowing reading of profile, job suggestions, and conversations, as well as performing reversible write actions like bookmarking jobs and updating skills, all authenticated via your browser session and running fully locally.
    10
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/shahparam11/handshake-mcp-server'

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