Skip to main content
Glama

Upwork MCP Server

MCP (Model Context Protocol) server for Upwork via browser automation. Enables Claude Code to search jobs, manage proposals, messages, and contracts on Upwork.

Features

  • Job Search: Search and filter Upwork jobs by keywords, budget, experience level, etc.

  • Job Details: Get comprehensive information about specific job postings

  • Profile: View your freelancer profile, connects balance, and stats

  • Proposals: View, submit, and withdraw proposals

  • Messages: Read and send messages in Upwork inbox

  • Contracts: View active and past contracts, work diary entries

Related MCP server: upwork-mcp

How It Works

This MCP uses Chrome DevTools Protocol (CDP) to connect to your real Chrome browser. This approach:

  • Bypasses Cloudflare's "automated test software" detection

  • Uses your real browser profile with history and cookies

  • Requires Chrome to be running with debug port enabled

Installation

Prerequisites

  • Python 3.12+

  • uv package manager

  • Google Chrome browser

Install from source

cd upwork-mcp
uv sync

Authentication

The server connects to Chrome via CDP (Chrome DevTools Protocol).

First-time setup

# Start login flow - opens Chrome with debug port
uv run upwork-mcp --login

This will:

  1. Start Chrome with --remote-debugging-port=9222

  2. Navigate to Upwork login page

  3. Wait for you to complete login (click Cloudflare checkbox, enter credentials)

  4. Save session to ~/.upwork-mcp/chrome-profile/

Check session status

uv run upwork-mcp --check

Clear session

uv run upwork-mcp --logout

Usage

With Claude Code (local development)

Add to your MCP settings (~/.config/claude-code/settings.json or workspace settings):

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

Available Tools

Tool

Description

upwork_search_jobs

Search for jobs matching criteria

upwork_get_job_details

Get detailed job information

upwork_get_my_profile

Get your freelancer profile

upwork_get_connects_balance

Get current connects balance

upwork_get_profile_stats

Get earnings and work history stats

upwork_get_proposals

Get your submitted proposals

upwork_get_proposal_details

Get details of a specific proposal

upwork_submit_proposal

Submit a proposal to a job

upwork_withdraw_proposal

Withdraw a submitted proposal

upwork_get_messages

Get inbox conversations

upwork_get_conversation

Get messages in a conversation

upwork_send_message

Send a message

upwork_get_unread_count

Get unread message count

upwork_get_contracts

Get your contracts

upwork_get_contract_details

Get contract details

upwork_get_work_diary

Get work diary entries

upwork_check_session

Check if session is valid

upwork_close_session

Close browser and cleanup

Examples

Search for Python developer jobs

Search for Python developer jobs on Upwork with budget over $1000

Get job details

Get details for this Upwork job: https://www.upwork.com/jobs/~01234567890

Check proposals

Show my active proposals on Upwork

Read messages

Check my Upwork messages

CLI Options

upwork-mcp [OPTIONS]

Options:
  --login        Open browser for manual login
  --check        Check if session is valid
  --logout       Clear saved session
  --no-headless  Show browser window (debugging)
  --timeout MS   Page timeout in milliseconds (default: 30000)
  --transport    MCP transport type (default: stdio)

Development

Project Structure

upwork-mcp/
├── pyproject.toml
├── README.md
├── src/upwork_mcp/
│   ├── __init__.py
│   ├── server.py           # MCP server entry point
│   ├── browser/
│   │   ├── client.py       # Patchright browser wrapper
│   │   └── auth.py         # Login flow
│   ├── tools/
│   │   ├── jobs.py         # Job search and details
│   │   ├── profile.py      # Profile and connects
│   │   ├── proposals.py    # Proposal management
│   │   ├── messages.py     # Messaging
│   │   └── contracts.py    # Contract management
│   └── utils/
│       ├── config.py       # Configuration
│       └── logging.py      # Logging setup
├── tests/
└── scripts/
    └── test_all.py

Running tests

uv run python scripts/test_all.py

Session Storage

Session data is stored in ~/.upwork-mcp/profile/. This includes browser cookies and local storage that persist your Upwork login.

Troubleshooting

Session expired

# Re-authenticate
uvx upwork-mcp --login

CAPTCHA or Cloudflare challenge

Run with visible browser to solve manually:

uvx upwork-mcp --no-headless

Browser not found

# Install Chromium for Patchright
uvx patchright install chromium

License

Apache 2.0

Available Tools

18 tools
upwork_check_sessionA

Check if the current Upwork session is valid.

Returns session status and whether re-login is needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses that the tool returns session status and re-login need, but does not elaborate on authentication requirements, side effects (none expected), or behavior when session is invalid. Adequate but minimal.

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, no redundant information. The action is front-loaded with 'Check if the current Upwork session is valid' directly conveys the purpose. Every sentence earns its place.

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 no output schema, the description briefly mentions return values but could provide more detail (e.g., possible statuses or how to interpret the result). For a simple check tool, it is minimally adequate but leaves some unknowns.

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

Parameters4/5

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

The tool has no parameters, and schema coverage is 100%. The description adds value by explaining what the output contains (session status and re-login need), which is beyond the empty schema. Baseline for 0 parameters is 4.

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 checks if the Upwork session is valid and returns session status and re-login need. It uses specific verb 'check' and resource 'session', distinguishing it from siblings like upwork_close_session.

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 verifying session validity but does not explicitly state when to use or alternatives. It lacks guidance on when not to use or context comparing to other session-related tools.

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

upwork_close_sessionA

Close browser session and cleanup resources.

Call this when you're done using Upwork tools to free up resources.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior4/5

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

Describes the side effect of closing the session and cleaning up resources. No annotations provided, but the description adequately covers behavior for a session close 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 short sentences, front-loaded with the purpose, followed by usage guidance. No fluff.

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, no output schema, and a simple action. The description covers purpose and usage completely.

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

Parameters5/5

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

No parameters exist, so the description adds no further semantic meaning. The schema coverage is 100%, making additional detail unnecessary.

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?

Explicitly states 'Close browser session and cleanup resources', clearly identifying the action and resource. Differentiates from sibling 'upwork_check_session'.

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?

Provides explicit guidance: 'Call this when you're done using Upwork tools to free up resources.' Clearly states when to use.

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

upwork_get_connects_balanceA

Get current Upwork Connects balance.

Returns the number of available connects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

The description discloses the core behavior: it returns the number of available connects. However, it does not mention authentication requirements, rate limits, or any potential side effects. Given no annotations exist, the description carries the full burden, but the tool is simple and read-only, so a score of 3 is adequate.

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 extremely concise: two short sentences with no redundant information. Every word contributes to understanding the tool's purpose.

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 this simple tool, the description is largely complete. It states what it does and what it returns. However, it could be improved by mentioning that it requires an active Upwork session or that the balance is updated in real-time, but the current description is sufficient.

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

Parameters4/5

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

The tool has no parameters, and the schema coverage is 100%. Per guidelines, 0 parameters yields a baseline of 4. The description adds no parameter semantics because none are needed.

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

Purpose5/5

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

The description clearly states the tool retrieves the current Upwork Connects balance and returns the number of available connects. It uses a specific verb ('get') and resource ('Connects balance'), and the purpose is distinct from sibling tools that deal with sessions, contracts, 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 Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., when to check balance before submitting a proposal). While the tool's simplicity makes it self-explanatory, there is no explicit context or exclusion criteria.

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

upwork_get_contract_detailsA

Get detailed information about a specific contract.

Returns full contract details including milestones, hours logged, and feedback.

ParametersJSON Schema
NameRequiredDescriptionDefault
contract_urlYesURL to the contract

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description must convey behavioral traits. It hints at a read operation ('Get detailed information') but does not explicitly state it is read-only or disclose any side effects, permissions, or limits. The description adds context about return content but lacks full transparency.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the purpose, and contains no extraneous information. Every word adds value.

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

Completeness4/5

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

For a simple, single-parameter read tool, the description adequately explains the return content. However, it lacks details on error handling, required permissions, or what happens if the URL is invalid. Given no output schema, slightly more context would be beneficial.

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 single parameter 'contract_url' is fully described in the schema ('URL to the contract'), so the base is 3. The tool description adds no additional semantic meaning for the parameter beyond what the schema already provides.

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 'get detailed information about a specific contract' and lists specific return fields (milestones, hours logged, feedback). This distinguishes it from sibling 'upwork_get_contracts', which likely retrieves a list of contracts.

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

Usage Guidelines4/5

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

The description implies usage by focusing on 'detailed information' for a single contract, suggesting it should be used when full details are needed. However, it does not explicitly state when not to use it or mention alternatives like upwork_get_contracts for listing.

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

upwork_get_contractsA

Get your Upwork contracts.

Returns a list of contracts with client name, job title, status, and earnings.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by status: active, ended, or allactive
limitNoMaximum number of results

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description partially fulfills the burden by stating the tool returns a list of contracts with specific fields. However, it omits details like read-only nature, pagination, authentication scope, or rate limits. The return fields add value beyond the input schema but depth is limited.

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 exceptionally concise: two sentences with no extraneous words. The first sentence front-loads the core purpose, and the second efficiently lists return values. Every sentence earns its place.

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

Completeness4/5

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

Given the tool's simplicity (two parameters with full schema descriptions, an output schema exists), the description reasonably covers the purpose and return content. It could mention pagination or user-specific scope, but the presence of an output schema compensates for some missing details.

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 already provides full descriptions for both parameters ('status' and 'limit'). The description adds no additional meaning or usage details for these parameters, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Get your Upwork contracts' and specifies the returned fields (client name, job title, status, earnings). It effectively distinguishes from the sibling tool 'upwork_get_contract_details' which targets a specific contract.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as 'upwork_get_contract_details' or other listing tools. The description lacks context about prerequisites or exclusion criteria.

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

upwork_get_conversationC

Get all messages in a specific conversation.

Returns conversation details with full message history.

ParametersJSON Schema
NameRequiredDescriptionDefault
room_idYesChat room ID or URL
limitNoMaximum messages to return

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are present, so the description bears full burden. It claims to return 'full message history' but the input schema includes a 'limit' parameter with a maximum of 100, implying the history may be truncated. This contradiction is not addressed, and no information about authentication, rate limits, or side effects is provided.

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

Conciseness4/5

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

The description consists of two concise sentences with no redundant information. However, the first sentence could be more precise to avoid the 'full history' contradiction with the limit parameter, which slightly detracts from clarity.

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

Completeness3/5

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

For a tool with no output schema, the description vaguely mentions returning 'conversation details with full message history', but does not specify the structure or fields of the response. Given the simplicity of the tool (listing messages), this is minimally adequate but lacks detail for complex agent reasoning.

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

Parameters2/5

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

Although schema coverage is 100% (both parameters have descriptions), the tool description adds little value beyond the schema. The phrase 'full message history' conflicts with the limit parameter, potentially misleading the agent. The description does not explain parameter relationships or provide context not already in the schema.

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

Purpose4/5

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

The description clearly states the verb 'Get' and the resource 'messages in a specific conversation', making the purpose unambiguous. It implicitly distinguishes from the sibling tool 'upwork_get_messages' by specifying 'in a specific conversation', but does not explicitly contrast them, so it falls short of a perfect score.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus the sibling 'upwork_get_messages', nor are any prerequisites or exclusions mentioned. The description simply states what it does without contextual usage advice.

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

upwork_get_job_detailsA

Get detailed information about a specific Upwork job posting.

Returns comprehensive job details including description, client history, skills required, and application requirements.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_urlYesFull Upwork job URL or job ID

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It correctly implies a read-only operation ('Get...information', 'Returns...details'), but does not disclose authentication needs, rate limits, or potential side effects (though none expected).

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 two sentences, front-loaded with the main action, and every word adds value. No unnecessary text.

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 the tool has one parameter and no output schema, the description provides a reasonable summary of return contents (description, client history, skills, application requirements). It lacks error handling or format details, but for a simple read tool it is mostly complete.

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

Parameters3/5

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

Schema coverage is 100% with one parameter. The schema description 'Full Upwork job URL or job ID' is clear. The tool description lists returned details but adds no additional meaning to the parameter beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool gets detailed information about a specific Upwork job posting. It lists the types of details returned (description, client history, skills, application requirements), which distinguishes it from sibling tools like upwork_search_jobs (for finding jobs) or upwork_get_proposals (for proposal 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 when a user needs details on a specific job, but it does not explicitly provide when-to-use or when-not-to-use guidance relative to siblings. No alternatives or prerequisites are mentioned.

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

upwork_get_messagesB

Get messages from Upwork inbox.

Returns a list of conversations with last message, sender info, and unread status.

ParametersJSON Schema
NameRequiredDescriptionDefault
room_idNoSpecific chat room ID or URL
unread_onlyNoOnly show unread messages
limitNoMaximum conversations to return

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, and the description fails to disclose important behavioral traits like authentication requirements, rate limits, or pagination behavior. For a data retrieval tool, 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 two sentences, front-loaded with purpose and return details, with no unnecessary information. Every word contributes value.

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

Completeness3/5

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

The description mentions return fields but omits mention of filtering capabilities (room_id, unread_only) and limit defaults. Given the presence of an output schema, it is adequate but not comprehensive.

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?

Input schema has 100% description coverage, so the schema already explains the parameters. The description does not add additional meaning beyond listing return fields, which is adequate per baseline.

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

Purpose4/5

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

The description clearly states the verb 'get' and resource 'messages', and specifies return contents (last message, sender info, unread status). However, it does not explicitly distinguish from sibling tools like upwork_get_conversation.

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 such as upwork_get_conversation or upwork_send_message. The description lacks context about its role in the workflow.

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

upwork_get_my_profileA

Get your Upwork freelancer profile information.

Returns profile data including name, title, hourly rate, JSS score, availability status, and skill tags.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It accurately describes the read-only nature by stating it returns profile data, but does not explicitly mention that no modifications occur or discuss any side effects.

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 extremely concise with two sentences, no wasted words, and front-loads the core purpose. Every sentence provides necessary information.

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 no output schema, the description adequately lists the main return fields (name, title, hourly rate, JSS, availability, skill tags). However, it omits details like data types or whether JSS is Job Success Score, but still sufficient for a simple read-only 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?

There are zero parameters, so the baseline is 4. The description does not need to add meaning beyond the schema, which is complete absence of parameters.

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 retrieves the user's own Upwork freelancer profile, and no sibling tool serves the same purpose. The verb 'Get' and resource 'your Upwork freelancer profile' 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 is provided on when to use this tool versus alternatives like upwork_get_profile_stats or upwork_get_contracts. The description does not clarify whether this is the preferred method for obtaining profile information.

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

upwork_get_profile_statsB

Get profile statistics including earnings and work history.

Returns stats like total earnings, hours worked, jobs completed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

No annotations provided; description implies read-only via 'Get' but does not explicitly state behavior or side effects.

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, direct and to the point, with no redundant information.

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

Completeness3/5

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

Describes return fields but lacks detail on output format, user scope (own vs. other), and does not compensate for missing output schema.

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; schema coverage is 100% trivially. Description could explicitly note no arguments needed, but absence is acceptable.

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 returns profile statistics (earnings, hours, jobs), but does not explicitly differentiate from sibling get_my_profile, which may overlap.

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 like get_my_profile or other retrieval tools.

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

upwork_get_proposal_detailsA

Get detailed information about a specific proposal.

Returns details including cover letter, bid, and any messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
proposal_urlYesURL to the proposal

TDQS

A3.8/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 carry the full burden. It states the tool returns details (cover letter, bid, messages) but does not mention whether it is read-only, any required authentication, or rate limits. For a retrieval tool, this is passable but not explicit about safety characteristics.

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 two sentences, front-loading the purpose and effectively listing key return items. No fluff or redundant information.

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 a single parameter and no output schema, the description sufficiently covers what the tool does and what it returns. However, it omits potential error conditions (e.g., invalid URL) or privacy considerations, keeping it from a perfect score.

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 already describes the single parameter 'proposal_url' with 100% coverage, so the description adds no additional semantic value. The baseline of 3 is appropriate; no extra format or constraints are provided beyond what the schema states.

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

Purpose5/5

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

The description clearly states the tool retrieves detailed information about a specific proposal, using the verb 'Get' and the resource 'proposal details.' This unequivocally distinguishes it from sibling tools like upwork_get_proposals (which lists proposals) and upwork_get_contract_details (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 does not explicitly state when to use this tool versus alternatives, such as when you need details on a single proposal vs. listing all proposals. While the purpose is clear, the lack of guidance on prerequisites (e.g., needing a valid proposal_url) or exclusions leaves room for ambiguity.

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

upwork_get_proposalsA

Get your submitted proposals on Upwork.

Returns a list of proposals with job title, status, bid amount, and dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by status: active, submitted, archived, or allactive
limitNoMaximum number of results

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations provided, so description carries burden. Indicates read operation returning list, but does not mention authentication, rate limits, pagination beyond limit parameter, or non-destructive nature. Adequate but not rich.

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, front-loaded verb 'Get', no redundant words. Efficient.

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 output schema exists, description covers key returns (job title, status, bid amount, dates). Does not mention sorting or error scenarios, but sufficient for a list tool with schema.

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 parameters are fully documented in schema. Description adds no extra meaning beyond listing returned fields.

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?

Clearly states 'Get your submitted proposals' and lists returned fields (job title, status, bid amount, dates). Differentiates from sibling tool 'upwork_get_proposal_details' which is for a single proposal.

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: list proposals. But no explicit when-to-use or alternatives. Sibling tools exist for details, submission, withdrawal, but not referenced.

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

upwork_get_unread_countA

Get count of unread messages.

Returns total unread message count.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries full burden for behavioral traits. It states the return value but does not disclose operational aspects like authentication requirements, rate limits, or whether it is a read-only operation. However, for a simple count tool, the disclosure is minimally adequate.

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 extremely concise: two short sentences that directly convey the purpose and return value. No extraneous information, well front-loaded.

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 simplicity of the tool (no parameters, no output schema, clear single function), the description covers all essential information needed for an agent to understand when to invoke it.

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

Parameters4/5

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

There are no parameters, and schema coverage is 100% (trivially). The description adds no parameter information, but since there are none, baseline of 4 is appropriate. It doesn't improve upon the schema but also doesn't miss anything.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get count of unread messages.' It specifies a concrete verb and resource, and distinguishes itself from sibling tools like 'upwork_get_messages' or 'upwork_get_conversation' which serve different functions.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or context for usage. It fails to advise when to use this over similar tools like 'upwork_get_messages' that might provide more detail.

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

upwork_get_work_diaryB

Get work diary entries for a contract.

Returns work diary with daily hours and earnings.

ParametersJSON Schema
NameRequiredDescriptionDefault
contract_urlYesURL to the contract
week_offsetNo0 for current week, 1 for last week, etc.

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are present, so the description carries full burden. It only states that the tool returns work diary with hours and earnings, but does not disclose behavioral traits like read-only nature, authorization needs, rate limits, or error handling.

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, no waste. First sentence states the action, second adds return info. Front-loaded and efficient.

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

Completeness4/5

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

For a simple retrieval tool with only two parameters (both well-described in schema) and no output schema, the description is fairly complete. It could mention that it is a read operation or note error cases, but it covers the essential return information.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters well. The description adds no extra meaning beyond what is already in the schema. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's action: 'Get work diary entries for a contract' and specifies the return data (daily hours and earnings). It is specific and distinct from sibling tools like upwork_get_contract_details or upwork_get_proposals.

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, no exclusions, and no context about prerequisites. The agent is given no help in deciding between this and other Upwork tools.

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

upwork_search_jobsA

Search for jobs on Upwork matching the specified criteria.

Returns a list of job summaries with title, budget, client info, and URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch keywords
categoryNoJob category filter
budget_minNoMinimum budget in USD
budget_maxNoMaximum budget in USD
experience_levelNoExperience level: entry, intermediate, or expert
job_typeNoJob type: hourly or fixed
limitNoMaximum number of results

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states the return type but does not disclose behavioral traits like pagination, sorting, or that it is read-only. For a search tool, lack of pagination detail is a 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 two sentences, front-loaded with the action and a brief list of return fields. No unnecessary 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?

With an output schema present and all parameters described, the tool is largely complete. However, details on pagination or sorting are missing, but limit parameter covers some of that.

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 each parameter having a description. The tool description adds no extra semantic value beyond what is in the schema, so baseline score is appropriate.

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

Purpose5/5

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

The description clearly states the tool's verb ('Search') and resource ('jobs on Upwork'), and lists the returned fields. This distinguishes it from siblings like upwork_get_job_details or upwork_submit_proposal.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives. While the tool name implies search, no guidance is given on when not to use it or which sibling to choose for specific needs.

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

upwork_send_messageB

Send a message in an Upwork conversation.

Returns send status.

ParametersJSON Schema
NameRequiredDescriptionDefault
room_idYesChat room ID or URL
messageYesMessage content to send

TDQS

B3.2/5.0
Behavior2/5

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

The description vaguely mentions 'returns send status' but does not specify the format, possible error conditions, or any behavioral side effects. No annotations to supplement, so the description carries full burden for transparency, which it fails to meet.

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 extremely concise with two sentences, front-loading the purpose and outcome. No wasted words.

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?

Without an output schema, the return value description 'Returns send status' is insufficient. Also lacks details on error handling, rate limits, or any behavioral context beyond the bare minimum. The tool is simple but the description is incomplete.

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 parameters are already documented in the schema. The description adds no additional semantic value beyond what the schema provides. 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 'send' and the resource 'message in an Upwork conversation'. It distinguishes from sibling tools like upwork_get_messages (reading) and upwork_get_conversation (retrieving conversation details). Purpose is unambiguous.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor any prerequisites (e.g., needing an active session or valid conversation). The agent has no context for appropriate usage.

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

upwork_submit_proposalA

Submit a proposal to an Upwork job.

IMPORTANT: This is a sensitive action that will spend Connects. Make sure the cover letter and rate/bid are correct before submitting.

Returns submission status and connects used.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_urlYesFull Upwork job URL
cover_letterYesCover letter content
rateNoProposed hourly rate (for hourly jobs)
bidNoBid amount (for fixed-price jobs)
answersNoAnswers to screening questions

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that the action is sensitive, spends Connects, and returns submission status and connects used. This is good behavioral context beyond the basic action.

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

Conciseness5/5

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

The description is very concise: one sentence for purpose, a warning, and expected output. No unnecessary words, front-loaded with the key action.

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 no output schema, the description mentions return values (status and connects used). It covers the essential aspects for a submission tool, though more detail on error handling could be beneficial. Still, it is reasonably complete.

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

Parameters3/5

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

The input schema has 100% description coverage, so the description adds little beyond naming 'cover letter and rate/bid'. It does not elaborate on the parameters further, meeting the baseline but not adding extra value.

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

Purpose5/5

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

The description clearly states the action 'Submit a proposal to an Upwork job' with a specific verb and resource. It distinguishes from sibling tools like upwork_get_proposals and upwork_withdraw_proposal by focusing on the submission action.

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 includes an important warning about spending Connects and ensuring correctness, which provides cautionary context but does not explicitly compare to alternatives or state when not to use this tool. It implies usage when submitting a proposal but lacks direct guidance on selecting among siblings.

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

upwork_withdraw_proposalB

Withdraw a submitted proposal.

Returns withdrawal status.

ParametersJSON Schema
NameRequiredDescriptionDefault
proposal_urlYesURL to the proposal to withdraw

TDQS

B3.2/5.0
Behavior2/5

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

The description only states it returns withdrawal status but does not disclose side effects (e.g., if withdrawal is reversible, impact on conversations or reputation) or prerequisites (e.g., ownership, proposal state). With no annotations, this is insufficient for safe invocation.

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

Conciseness4/5

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

The description is extremely concise with two sentences, no redundancy. However, it could be improved by adding a brief behavioral note without losing conciseness.

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 simple action (one required param, no output schema), the description covers the basic purpose and return value. However, it lacks details like what constitutes a valid proposal URL and any implicit constraints, making it minimally adequate.

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% for the single parameter proposal_url, which is described minimally. The description adds no further meaning (e.g., format of URL, validation rules), 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 the action (withdraw) and the resource (submitted proposal), and it explicitly distinguishes from sibling tools like submit_proposal and get_proposals by its verb and outcome.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool vs alternatives. For example, it does not mention that the proposal must be in a withdrawable state or that it should be used after submission. Siblings like upwork_submit_proposal are implied but not contrasted.

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

TDQS

A3.7/5.0
Disambiguation4/5

Most tools have distinct purposes (e.g., get_messages vs get_conversation), but a few pairs like get_proposals vs get_proposal_details could be confused without careful reading. The consistent prefix helps overall.

Naming Consistency5/5

All tools follow a uniform `upwork_verb_noun` pattern in snake_case, with clear verbs like get, search, send, submit, withdraw. No mixing of styles.

Tool Count5/5

18 tools cover the essential freelancer actions on Upwork—session, profile, finances, contracts, jobs, proposals, messages—without bloat. It's well-scoped for a single-purpose server.

Completeness4/5

Tools cover core workflows (viewing and submitting proposals, messaging, checking balance/contracts). Minor gaps like updating profile or ending contracts exist but don't severely hinder usability.

Maintenance

ActivityInactive
ResponsivenessSyncing

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
    A
    quality
    D
    maintenance
    A Model Context Protocol server that enables AI agents to search, analyze, and apply for Upwork jobs autonomously. It facilitates specialized job scoring, proposal submission, and integrated client messaging through a combination of browser automation and API access.
    11
    12
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    An MCP server for automating Upwork workflows including job search, proposal submission, client communication, and contract management. It provides tools for client vetting, template-based proposals, and session safety with audit logging.
  • F
    license
    Not graded
    quality
    F
    maintenance
    MCP server for the Upwork GraphQL API enabling job search, contract management, proposal drafting, and other Upwork automation tasks via natural language.

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/vanooo/upwork-mcp'

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