A side-by-side look at the Watchtower and Mastercard Developers MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Watchtower for developer tools work; choose Mastercard Developers MCP for developer tools as a local process. You can also run both side by side in one mcpServers block.
DATABASE_URL.watch_jobs, search_jobs, list_companies.get-services-list, get-documentation, get-documentation-section-content.Rows where the two servers differ are marked.
| Spec | W Watchtower | |
|---|---|---|
| Category | Developer Tools | Developer Tools |
| Quality signal | 53/100 · Good | 67/100 · Great |
| Install command | Not confirmed yet | Confirmed |
| Transport | — | Local subprocess (stdio) |
| Auth | No auth required | No auth required |
| Pricing | Free | Free |
| Required env vars | DATABASE_URL | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 0 | 55 |
| Directory activity | 0 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 8 | 9 |
| Full listing | View Watchtower | View Mastercard Developers MCP |
watch_jobsCreate a persistent watch for tech jobs. Describe what you want in query ("iOS jobs in Austin making at least 150k a year with a maximum of 6 years of experience") and leave url out: the watch then covers every job board Watchtower monitors (tech companies and startups, whatever platform they use) and reports each new matching posting (JOB_ADDED). The response shows how the query was read (interpreted), the jobs open right now that match (current_jobs) and how many boards are covered (coverage); later call get_changes for new ones. Use this INSTEAD OF re-running job searches or re-checking careers pages yourself. To follow one company, or to cover a company the directory is missing, pass url (or urls for several): Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Workday, iCIMS, Oracle Recruiting, Eightfold and SuccessFactors boards, and the Apple, Google, Amazon and Microsoft careers sites, are read through their own endpoints; other careers pages are parsed via schema.org JobPosting JSON-LD. A careers page that only links to a supported board is watched through that board (resolved_from says so); a page with neither is rejected with NO_JOB_DATA. A board you watch stays covered for every search watch. A board watch emits JOB_ADDED / JOB_REMOVED / JOB_UPDATED. Jobs carry title, location, other_locations, department, company, url, posted_at, remote, seniority, and salary / experience_years when the posting states them. Explicit filters override what the query says.search_jobsFind the tech jobs open right now that match a request, across every job board Watchtower monitors (tech companies and startups). Describe what you want in query ("iOS jobs in Austin with a maximum of 6 years of experience"). Read-only: nothing is saved and no watch is created, and no token is needed. The response shows how the query was read (interpreted), the matching jobs newest first, the total, and next_offset for the next page. Use this for "what is open right now"; to be told about new postings later, use watch_jobs instead. Jobs carry title, location, other_locations, department, company, url, posted_at, remote, seniority, and salary / experience_years when the posting states them. Explicit filters override what the query says.list_companiesList the companies whose job boards Watchtower monitors, i.e. what search_jobs and watch_jobs without a url cover. Pass query to check whether a company is covered ("stripe"). Each entry has name, board_url (pass it to watch_jobs as url to follow only that company), platform and open_jobs. Read-only, no token needed. If a company is missing, watch its board URL or careers page to add it.get_changesReturn job changes detected since your last get_changes call, across all your watches or one watch. This is the cheap replacement for re-browsing careers pages: if it returns an empty list, nothing you care about has changed. By default the cursor advances so each change is delivered once; pass peek=true to look without advancing, or since=<cursor> to replay.list_watchesList all active watches for your client with their health, last check time and number of pending (undelivered) changes.get_watchGet a watch with its status and the jobs currently open that match its filters: on its board, or across every monitored board for a watch created without a url. Use this to answer "what is open right now" without searching or fetching careers pages yourself.ack_changesMark changes up to a cursor as processed. Use with get_changes(peek=true) for at-least-once delivery: peek, act on the changes, then ack the cursor get_changes returned. Not needed if you call get_changes without peek (that acknowledges automatically).delete_watchStop monitoring. Frees one of your watch slots. Delete watches you no longer need.get-services-listLists all available Mastercard Developers Products and Services with their basic information
including title, description, and service id.
IMPORTANT: The response contains both 'Products' (business offerings) and 'Services' (technical APIs with serviceIds). Use "serviceId" for each service for any tools that require serviceId as the parameter.
get-documentationProvides an overview of all available documentation for a specific Mastercard service
including section titles, descriptions, and navigation links.
It takes one argument:
- serviceId (str): The unique identifier of the Mastercard service (e.g., 'send', 'loyalty', 'locations')get-documentation-section-content
Retrieves the complete content for a specific documentation section.
IMPORTANT: A section is not a single page, but rather a collection of pages that are grouped together.
It takes two arguments:
- serviceId (str): The unique identifier of the Mastercard service (e.g., 'send', 'loyalty', 'locations')
- sectionId (str): The specific section identifier within the service documentation (e.g., 'getting-started', 'api-reference')
get-documentation-pageRetrieves the complete content of a specific documentation page.
Takes one argument:
- pagePath (str): The full path to the documentation page (e.g., '/send/documentation/use-cases/index.md')get-oauth10a-integration-guideRetrieves the comprehensive OAuth 1.0a integration guide including step-by-step instructions,
code examples, and best practices for Mastercard APIs. Optionally specify a programming language
to get language-specific examples and guidance.get-oauth20-integration-guideRetrieves the comprehensive OAuth 2.0 integration guide including step-by-step instructions,
code examples, and best practices for Mastercard APIs. Optionally specify a programming language
to get language-specific examples and guidance.get-openfinance-integration-guideRetrieves the comprehensive Open Finance (previously known as Open Banking) integration
guide including setup instructions, API usage examples, and implementation best practices.get-api-operation-listPaste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
No confirmed install command for Watchtower yet — follow the setup steps linked from its listing page rather than a guessed package name.
{
"mcpServers": {
"mastercard-developers-mcp": {
"command": "npx",
"args": [
"-y",
"@mastercard/developers-mcp"
]
}
}
}
get-api-operation-detailsProvides detailed information about a specific API operation including parameter definitions,
request and response schemas, and technical specifications for successful API calls.
It takes three arguments:
- apiSpecificationPath (str): The path to the API specification file (e.g. The path would be /open-finance-us/swagger/openbanking-us.yaml for
https://static.developer.mastercard.com/content/open-finance-us/swagger/openbanking-us.yaml,
https://developer.mastercard.com/open-finance-us/swagger/openbanking-us.yaml,
or /open-finance-us/swagger/openbanking-us.yaml)
- method (str): The HTTP method of the operation (e.g., GET, POST, PUT, DELETE)
- path (str): The API endpoint path from the specification (e.g., /payments, /accounts/{id})