Repository navigation
Expand file tree
/
Copy pathplugin.json
More file actions
109 lines (109 loc) · 9.16 KB
/
Copy pathplugin.json
File metadata and controls
109 lines (109 loc) · 9.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "upwork-agent-plugin",
"version": "0.1.1",
"description": "Connects agents to Upwork and provides guided workflows for hiring and finding work.",
"author": {
"name": "Upwork",
"url": "https://www.upwork.com/"
},
"homepage": "https://www.upwork.com/ai/mcp",
"repository": "https://github.com/upwork/upwork-agent-plugin",
"license": "Apache-2.0",
"keywords": [
"upwork",
"freelance",
"hiring",
"jobs",
"mcp"
],
"extensions": {
"com.openai": {
"interface": {
"displayName": "Upwork",
"shortDescription": "Hire and find work on Upwork",
"longDescription": "Upwork equips AI agents with skills for the full hiring lifecycle: search and vet freelancer talent, draft clear and effective job posts, write tailored proposals, and manage hiring workflows. Powered by the official Upwork MCP server for secure, real-time access to your Upwork account.\n\nIn order to use this app, you need to have an active Upwork account. Please contact our support team (https://support.upwork.com) for more details.\n\nGet started: sign up or log in at https://www.upwork.com, then install this plugin and connect it to your Upwork account when prompted. A getting-started guide is available at https://www.upwork.com/ai/mcp.\n\nHelp and documentation: https://support.upwork.com",
"developerName": "Upwork",
"category": "Productivity",
"capabilities": [
"Interactive",
"Read",
"Write"
],
"websiteURL": "https://www.upwork.com/ai/mcp",
"supportURL": "https://support.upwork.com/hc/en-us/articles/55446516654611",
"privacyPolicyURL": "https://privacy.upwork.com/policies?name=privacy-policy",
"termsOfServiceURL": "https://www.upwork.com/legal#apimcpterms",
"defaultPrompt": [
"Help me turn this project brief into an Upwork job post.",
"Write a proposal for this Upwork job using my real work history.",
"Help me find and hire a freelancer on Upwork."
],
"brandColor": "#108A00",
"composerIcon": "./color.png",
"composerIconDark": "./outline-48x48.png",
"logo": "./color.png"
},
"review": {
"test_cases": {
"positive": [
{
"description": "Find remote hourly Python developer jobs paying at least $50 per hour.",
"prompt": "Find me remote Python developer jobs on Upwork that pay at least $50 an hour.",
"tools_triggered": "list_accounts; find_jobs (action: search). Use get_tool_help when parameter details are needed.",
"expected_behavior": "Select the freelancer account, asking which account to use if needed, and search for remote hourly Python developer jobs with a minimum hourly rate of $50. Present matching jobs with their returned titles, hourly budgets, and links. Only claim a job meets the rate and remote-work requirements when supported by the returned data. If no results are returned, report that without inventing jobs or asserting why the search was empty."
},
{
"description": "Summarize freelancer account activity and the current Connects balance.",
"prompt": "What's new on my Upwork freelancer account? Any invitations, offers or messages, and how many Connects do I have?",
"tools_triggered": "list_accounts; get_freelancer_dashboard (action: check). Use get_tool_help when parameter details are needed.",
"expected_behavior": "Select the freelancer account, asking which account to use if needed, and retrieve its dashboard. Summarize returned invitations, offers, and messages, and report the returned Connects balance. Distinguish empty activity from unavailable data and do not respond to invitations, accept offers, or send messages."
},
{
"description": "Search Upwork for WordPress developers.",
"prompt": "Find WordPress developers on Upwork.",
"tools_triggered": "list_accounts; find_freelancers (action: search). Use get_tool_help when parameter details are needed.",
"expected_behavior": "Select the client account, asking which account to use if needed, and search freelancer profiles using a short query such as WordPress developer. Present candidates using returned names, rates, relevant skills, and profile links when available. Disclose boosted placement when indicated, and do not invite or hire anyone."
},
{
"description": "Review proposals received across the client's Upwork job postings.",
"prompt": "Show me the proposals I've received on my Upwork job postings.",
"tools_triggered": "list_accounts; list_client_proposals (action: list_all). Use get_tool_help when parameter details are needed.",
"expected_behavior": "Select the client account, asking which account to use if needed, and retrieve proposals across its job postings. Present proposals grouped by job with returned applicant names, proposal details, and statuses. Report when no proposals are returned and indicate when more results are available. Do not shortlist, decline, or send offers."
},
{
"description": "List the job postings owned by the client's Upwork account.",
"prompt": "List the jobs I've posted on Upwork.",
"tools_triggered": "list_accounts; get_job_posting (action: list). Use get_tool_help when parameter details are needed.",
"expected_behavior": "Select the client account, asking which account to use if needed, and list its own job postings. Present returned job titles, statuses, and links when available. Report when no postings are returned and indicate when more results are available. Do not create, update, or publish a posting."
}
],
"negative": [
{
"description": "Local weather is outside the Upwork plugin's job, hiring, and account-management capabilities.",
"prompt": "What's the local weather today?",
"tools_triggered": "None; no Upwork tools should be called.",
"expected_behavior": "Do not activate the Upwork plugin or access the user's Upwork account. Use an appropriate weather capability if available, asking for the user's location if needed, or explain that live weather information is unavailable."
},
{
"description": "Cooking recipes are unrelated to Upwork workflows.",
"prompt": "What's a good recipe for vegetarian lasagna?",
"tools_triggered": "None; no Upwork tools should be called.",
"expected_behavior": "Answer the recipe request using general knowledge or an appropriate non-Upwork capability without activating the Upwork plugin or accessing the user's Upwork account."
},
{
"description": "World Cup results are outside the Upwork plugin's capabilities.",
"prompt": "Who won the last World Cup?",
"tools_triggered": "None; no Upwork tools should be called.",
"expected_behavior": "Do not activate the Upwork plugin or access the user's Upwork account. Clarify which sport or competition is intended if needed, and answer using an appropriate non-Upwork source or capability."
}
]
},
"demo_recording_url": "https://vimeo.com/1216255739/97b8646ff8"
},
"publication": {
"release_notes": "Version 0.1.1 updates the existing Upwork plugin with revised workflow guidance, refreshed listing metadata, and MCP review materials. The package includes version 0.3.0 of all four workflow skills.\n\n- Job posting: Updated guidance to check for saved drafts before creating a posting and to distinguish saving a draft from publishing. Publication requires separate user approval and confirmation; workflows retain the new job identifier returned after publication.\n- Preview and confirmation handling: Updated skills to use confirm_preview and get_preview, distinguish temporary previews from saved drafts, and handle expired or superseded previews. Write operations continue to require explicit user confirmation, and binding or money-moving actions direct users to Upwork for completion.\n- Hiring and proposal review: Clarified profile identifier handling, proposal-detail retrieval, invitation actions, and selection of decline reasons. Added guidance to disclose paid placement and availability signals and to explain the Business Plus requirement for Expert-Vetted filtering.\n- Freelancer and agency proposals: Clarified account-specific use of portfolio highlights and certificates, attachment upload contexts, and confirmation of proposal submissions and invitation responses.\n- Listing and packaging: Refreshed the display name, description, icons, and support, privacy, and terms links.\n- Review materials: Added five positive test cases covering job search, freelancer account activity and Connects, talent search, received proposals, and owned job postings; three negative cases for unrelated requests; and a demo recording link."
}
}
}
}