Greenhouse Managed MCP Server
The Greenhouse managed MCP server lets agents work with your Greenhouse recruiting data. With it, an agent can list and look up jobs, candidates, and applications, and create candidates.
After reading this page, you will be able to:
-
Configure the Greenhouse managed MCP server with OAuth client credentials or per-user OAuth
-
Choose the Greenhouse user the server acts as and the credential scopes its tools need
-
Update agents written for the earlier Greenhouse tools to the cursor-paged tools
What this MCP server does
The server calls the Greenhouse Harvest v3 API. It authenticates in one of two ways:
-
OAuth client credentials: A Harvest V3 (OAuth) API credential that you create in Greenhouse. Every caller of the server shares it. Use this method unless you have a Greenhouse partner OAuth client.
-
User OAuth: Each user connects their own Greenhouse account through an OAuth provider. Greenhouse issues the OAuth clients this flow needs only to its partners. See Use per-user OAuth instead.
Greenhouse attributes every read and write to the user that the token represents, and applies that user’s permissions.
Prerequisites
Before you create the server, make sure you have:
-
Permission in Greenhouse to create API credentials.
-
The numeric user ID of a Greenhouse Site Admin, if the server should act as that user instead of the credential’s integration user. See Choose the user the server acts as.
-
Access to the Agentic Data Plane secret store, which holds the credential’s client secret. See Manage Secrets.
Get Greenhouse credentials
Create a Harvest V3 (OAuth) API credential in Greenhouse:
-
In Greenhouse, open API Credentials and click Create new API credentials.
-
Select Harvest V3 (OAuth) and save the credential.
-
Note the client ID and client secret.
-
Configure these scopes on the credential:
-
harvest:jobs:list -
harvest:candidates:list -
harvest:applications:list -
harvest:candidates:create, only if agents should create candidates
-
-
Store the client secret in the Agentic Data Plane secret store under an
UPPER_SNAKE_CASEname, for exampleGREENHOUSE_CLIENT_SECRET.
You manage the scopes on the credential in Greenhouse. The server doesn’t request scopes of its own. Leave out a scope, and the tools that need it fail.
Choose the user the server acts as
On Behalf Of User ID decides which Greenhouse user the server acts as:
-
0(the default): The integration user that Greenhouse created with the credential. It has access across your Greenhouse organization. -
A Site Admin’s numeric user ID: Requests run as that Site Admin and see only what that user can see in Greenhouse. Candidates the server creates are attributed to that user. Greenhouse requires a Site Admin for list requests, so don’t enter the ID of a user who isn’t one.
Some private data, such as private fields, needs an advanced permission in Greenhouse. If the user the server acts as doesn’t have it, Greenhouse leaves that data out of results.
Use per-user OAuth instead
Greenhouse issues OAuth clients for per-user authorization only to Greenhouse partners with a signed partnership agreement. If you have one, set it up this way:
-
Ask Greenhouse partner support to register your AI Gateway OAuth callback as a redirect URI (typically
https://aigw.<cluster-id>.clusters.rdpa.co/oauth/v1/callback). -
In Agentic Data Plane, create a custom OAuth provider with:
-
Authorization endpoint:
https://auth.greenhouse.io/authorize -
Token endpoint:
https://auth.greenhouse.io/token -
Scopes: The scopes from Get Greenhouse credentials
-
The client ID and a secret-store reference for the client secret that Greenhouse issued
-
With per-user OAuth, the server ignores On Behalf Of User ID. Each call runs as the user who connected.
Configure
Create a new Greenhouse MCP server in Agentic Data Plane:
-
Open MCP servers in the sidebar.
-
Click Add MCP server.
-
Click the Greenhouse card in the marketplace picker.
-
Replace the suggested
Name, and optionally add aDescription. -
In the Greenhouse configuration form:
Field Notes On Behalf Of User ID0to act as the credential’s integration user, or a Site Admin’s numeric user ID. See Choose the user the server acts as. Ignored withUser OAuth.Max Results Per PageThe largest page any list tool returns, from 1 to 500. A tool call can ask for a smaller page but not a larger one. The slider starts at 1, so set it to the page size you want, for example
100. Left at 1, every list tool returns one result per call.AuthOAuthfor client credentials, orUser OAuthfor per-user OAuth.Client ID(OAuth)The client ID of your Harvest V3 (OAuth) credential.
Client Secret Ref(OAuth)The secret-store name that holds the client secret, for example
GREENHOUSE_CLIENT_SECRET.Token URL(OAuth)https://auth.greenhouse.io/token. Saving fails with any other URL.Scopes(OAuth)Leave empty. The server ignores this field and uses the scopes on the Greenhouse credential.
OAuth Provider (
User OAuth)The Greenhouse OAuth provider you configured.
Required scopes (
User OAuth)The scopes your agents need, from Get Greenhouse credentials. Every required scope must also be in the provider’s scopes. A required scope the provider doesn’t request makes tool calls fail with
scope_upgrade_requireduntil each user reconnects and grants it. -
Click Create server.
Configure from the CLI
Set the authentication method inside the --managed.config JSON. One of oauth or userOauth is required.
-
OAuth client credentials
-
User OAuth
rpk ai mcp-server create my-greenhouse --enabled --managed.config '{
"@type": "type.googleapis.com/redpanda.mcps.greenhouse.v1.GreenhouseMCPConfig",
"onBehalfOfUserId": "0",
"maxResultsPerPage": 100,
"oauth": {
"clientId": "<greenhouse-client-id>",
"clientSecretRef": "GREENHOUSE_CLIENT_SECRET",
"tokenUrl": "https://auth.greenhouse.io/token"
}
}'
rpk ai mcp-server create my-greenhouse --enabled --managed.config '{
"@type": "type.googleapis.com/redpanda.mcps.greenhouse.v1.GreenhouseMCPConfig",
"maxResultsPerPage": 100,
"userOauth": {
"providerName": "greenhouse",
"requiredScopes": ["harvest:jobs:list", "harvest:candidates:list", "harvest:applications:list"]
}
}'
userOauth.providerName is the resource name of the Greenhouse OAuth provider you created.
Tools
The Greenhouse MCP server exposes these tools:
| Tool | Description |
|---|---|
|
List jobs, optionally filtered by |
|
Retrieve one job by |
|
List candidates, optionally filtered by |
|
Retrieve one candidate by |
|
List applications, optionally filtered by |
|
Create a candidate from |
The list tools page with a cursor and return the newest records first. Each response includes next_cursor, which is empty on the last page. To read the next page, call the tool again with only cursor set to that value. The filters and page_size from the first call carry over, and a later call can’t change them. page_size can’t exceed the server’s Max Results Per Page.
Example: List a candidate’s applications
curl -s https://aigw.<cluster-id>.clusters.rdpa.co/mcp/v1/my-greenhouse \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_applications",
"arguments": {
"candidate_id": 12345678,
"status": "in_process"
}
}
}'
Update agents written for the earlier tools
The Greenhouse tools now use Greenhouse’s Harvest v3 API, and some tool arguments and results changed. Update agents and prompts written for the earlier tools:
-
The list tools no longer take
page. Page withcursorandnext_cursorinstead. -
list_candidatesno longer filters byjob_id. To find the candidates for a job, calllist_applicationswithjob_idand read each application’scandidate_id. -
Jobs carry
department_idandoffice_idsinstead of embedded offices and departments, and no longer include the hiring team. -
Candidates no longer include
application_ids. Calllist_applicationswithcandidate_idinstead. -
Applications carry
job_idandsource_idinstead of the job name and source, and addstage_id. A prospect application hasjob_id0.
Troubleshooting
| Symptom | What to check |
|---|---|
Saving the server fails with a |
Set |
Every tool call fails with an authentication error |
Check the client ID, and that the secret-store entry holds the credential’s current client secret. Confirm the credential is a Harvest V3 (OAuth) credential. |
One tool fails while the others work |
The credential is missing that tool’s scope. Add it in Greenhouse. See Get Greenhouse credentials. |
List tools return one result per call |
|
List tools return nothing, or |
|
|
The user hasn’t connected Greenhouse yet. The failed tool result carries the authorization URL. After the user consents, later calls reuse the stored token. |