Skip to main content
Glama
Anicodeth

opportunities-circle-mcp

by Anicodeth

opportunities-circle-mcp

An MCP server that gives AI agents the full capabilities and catalog of Opportunities Circle — scholarships, fellowships, internships, grants, jobs, competitions, online courses, training, conferences and exchange programs — as searchable, well-typed tools.

It talks to Opportunities Circle's public WordPress REST API (no key, no scraping, no login), resolves human-friendly filters (opportunity type, country, funding, tags) into the right queries, and returns clean, reader-friendly text — including each opportunity's full description, eligibility, benefits, deadlines and official apply links.

Features

Tool

What it does

oppcircle_search

Search the catalog by keywords + filters (type, country, funding, tags, date range, sort). Newest-first, excludes expired by default. The main discovery tool.

oppcircle_get

Full details of one opportunity by id, slug, or url — complete description, type, tags, country/funding, deadline urgency and image.

oppcircle_latest

The most recently posted active opportunities, optionally by type.

oppcircle_list_categories

List opportunity types with counts + slugs (scholarships, phd-scholarships, fellowships, internships, jobs, grants, …).

oppcircle_list_tags

Search the 13k+ tag taxonomy to find valid country / funding / level / org slugs for filtering.

oppcircle_overview

High-level snapshot: site info, active total, and type breakdown. Good first call.

Related MCP server: opportunity-mcp

Quick start

git clone <your-repo-url> opportunities-circle-mcp
cd opportunities-circle-mcp
npm install
npm run build

Add to Claude Code

claude mcp add opportunities-circle -- node "/absolute/path/to/opportunities-circle-mcp/dist/index.js"

Or, once published to npm:

claude mcp add opportunities-circle -- npx -y opportunities-circle-mcp

Add to Claude Desktop

Edit claude_desktop_config.json:

{
  "mcpServers": {
    "opportunities-circle": {
      "command": "node",
      "args": ["/absolute/path/to/opportunities-circle-mcp/dist/index.js"]
    }
  }
}

Configuration

All env vars are optional — the server runs with zero configuration.

Variable

Default

Description

OPPCIRCLE_BASE_URL

https://www.opportunitiescircle.com

Site to query.

OPPCIRCLE_MAX_CONTENT_CHARS

8000

Max body text returned by oppcircle_get.

OPPCIRCLE_TIMEOUT_MS

20000

Per-request network timeout.

OPPCIRCLE_USER_AGENT

(built-in)

Custom User-Agent header.

Tool reference & example prompts

Discover what's available

"Give me an overview of Opportunities Circle." → oppcircle_overview

Search with filters

"Find fully funded PhD scholarships in Germany." → oppcircle_search { query: "fully funded", type: "phd-scholarships", country: "germany" }

"What internships are open in the USA right now?" → oppcircle_search { type: "internships", country: "usa" }

Find the right filter slugs

"What tags exist for the UK?" → oppcircle_list_tags { search: "uk" } "List the opportunity types." → oppcircle_list_categories

Read the full posting

"Open the FAO Volunteer Program listing." → oppcircle_get { url: "https://www.opportunitiescircle.com/fao-volunteer-program-in-italy/" }

Stay current

"What are the 10 newest fellowships?" → oppcircle_latest { type: "fellowships", limit: 10 }

Filtering model

  • Type (type) maps to the site's WordPress category — the opportunity kind. Common slugs: scholarships, masters-scholarships, phd-scholarships, undergraduate-scholarship, fellowships, phd-fellowships, internships, international-internships, research-internship, jobs, grants, competitions, conferences, online-courses, training, exchange-programs, awards.

  • country / funding / tags map to the tag taxonomy. Because there are 13k+ tags, use oppcircle_list_tags to find the exact slug (e.g. usa, europe, fully-funded, paid, un-program). Slugs and names are both accepted and fuzzy-matched.

  • Multiple tags are combined with AND.

  • Expired opportunities are excluded unless include_expired: true.

How it works

Claude / MCP client
        │  stdio (JSON-RPC)
        ▼
opportunities-circle-mcp
   ├── src/index.ts   MCP server + 6 tool definitions
   ├── src/api.ts     WordPress REST client, term (slug→id) resolution + cache
   └── src/format.ts  HTML → clean markdown/text, list & detail formatting
        │  HTTPS (GET only, public API)
        ▼
https://www.opportunitiescircle.com/wp-json/wp/v2/*

Opportunities are stored as WordPress posts organized by category (type), tags (country/funding/level/org/deadline), plus di_urgency (deadline urgency) and subject (field of study) taxonomies. The server reads only public, published content via GET — it never writes.

FAQ

Do I need an API key or account? No. The catalog is served over a public, read-only REST API.

Does it modify anything on the site? No — GET requests only.

Why are some results marked ⚠️ EXPIRED? They're archived opportunities. They are hidden by default; pass include_expired: true to include them.

Can I point it at another WordPress site? Yes — set OPPCIRCLE_BASE_URL. The type slugs and tags will differ per site.

Development

npm run dev        # tsc --watch
npm run typecheck  # no-emit type check
npm run build      # compile to dist/

License

MIT

Available Tools

6 tools
oppcircle_getGet opportunity detailsA

Fetch the full details of a single opportunity by numeric id, slug, or its public url. Returns the complete description (eligibility, benefits, how to apply, deadlines, official links) converted to readable text, plus its type, tags, country/funding tags, dates and featured image. Provide exactly one of id / slug / url.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric post id (from oppcircle_search).
urlNoFull opportunitiescircle.com URL of the opportunity page.
slugNoURL slug, e.g. 'fao-volunteer-program-in-italy'.
max_charsNoMax characters of body text to return (default 8000).

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the disclosure burden. It discloses that output is converted to readable text and lists the returned fields, which is useful. However, it does not mention max_chars truncation behavior, what happens when multiple or no identifiers are provided, or any error conditions.

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 dense sentences with no filler. It front-loads the core action, then the return contents, then the key invocation constraint. Every part 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?

For a 4-parameter tool with no output schema, the description covers the main invocation rules and return content well. It is missing explicit handling of max_chars and error cases, but an agent can correctly call the tool with the information provided.

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%, so the baseline is 3. The description adds value beyond the schema by specifying the exclusive-or relationship among id/slug/url and by noting that id comes from oppcircle_search. It does not add much for max_chars, but the schema already documents that parameter well.

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 ('Fetch'), names the resource ('a single opportunity'), and enumerates the returned content in enough detail to distinguish it from sibling list/search tools. It clearly identifies that this is the detail-getter for one known record, not a discovery tool.

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?

It gives actionable guidance: provide exactly one of id/slug/urlческое and even notes that id comes from oppcircle_search. It does not explicitly say 'use this after search for full details instead of search results', but the 'single opportunity' framing makes the intended context clear.

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

oppcircle_latestLatest opportunitiesA

Return the most recently posted (non-expired) opportunities, newest first. Optionally restrict to one type. A convenience shortcut over oppcircle_search for 'what's new'.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoOptional opportunity type (category slug/name), e.g. 'phd-scholarships'.
limitNoHow many to return, 1–50 (default 10).

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It discloses two key behaviors: filtering out expired opportunities and ordering by newest first, plus optional type filtering. However, it omits details like pagination, default limit (though the schema covers it), and what fields are returned, which would matter for an agent deciding how to interpret results.

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 with zero fluff. The core purpose and ordering are front-loaded, and the convenience-shortcut note is positioned second. Every word 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?

For a simple list tool with two optional params and no output schema, the description covers the essential semantics: what is returned (latest, non-expired), ordering, and the type filter. It names the alternative tool. Minor gaps like return format and pagination behavior are acceptable given the tool's simplicity.

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 both parameters are already documented. The description adds minimal value by restating the type restriction ('optionally restrict to one type') but doesn't elaborate on valid values or the limit parameter. Baseline 3 is appropriate when the schema fully covers parameter meaning.

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 ('return'), the resource ('opportunities'), and the scope ('most recently posted (non-expired)'), plus the ordering ('newest first'). It also explicitly names its relationship to the sibling tool oppcircle_search, distinguishing it as a convenience shortcut for the 'what's new' use case.

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?

It explicitly frames the tool as a shortcut over oppcircle_search for 'what's new', giving clear guidance on when to use it. It doesn't enumerate exclusions (e.g., when to prefer search), but the convenience-shortcut framing implies search is for more complex queries, which is sufficient guidance.

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

oppcircle_list_categoriesList opportunity types (categories)A

List the opportunity type categories with their slugs and how many opportunities each holds. Use these slugs as the type filter in oppcircle_search / oppcircle_latest. Optionally filter the list by a search term.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoOptional keyword to filter category names, e.g. 'scholar'.

TDQS

A4.3/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. The verb 'List' implies a read-only operation, which is a useful behavioral hint. However, it does not explicitly state that no side effects occur, nor does it mention authentication requirements, rate limits, or ordering of results. For a simple list tool the coverage is adequate but not exhaustive, warranting a 3.

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 primary action and output details, followed by the usage purpose and optional filtering. No wasted words; every sentence earns its place, making it 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?

For a simple tool with one optional parameter and no output schema, the description is complete. It tells the agent what will be returned (categories, slugs, counts), how to use the result (as a filter), and the optional search behavior. No critical information is missing for correct invocation.

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 a complete description for the only parameter `search`, covering its meaning and example. The tool description adds context about how the returned slugs are used as filters, which is helpful for the overall workflow but does not add new meaning to the search parameter itself. Since schema coverage is 100%, a 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 identifies the verb 'List' and the specific resource 'opportunity type categories', and distinguishes it from sibling tools like oppcircle_list_tags by focusing on categories. It also states the output includes slugs and counts, 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 Guidelines5/5

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

The description explicitly states when to use this tool: to obtain slugs for use as the `type` filter in oppcircle_search and oppcircle_latest. It also mentions the optional search filtering, giving clear context for how to use the tool without leaving the agent to infer its role.

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

oppcircle_list_tagsSearch tags (countries, funding, level, orgs)A

Search the tag taxonomy (13k+ tags) to discover valid slugs for the country, funding, and tags filters of oppcircle_search. Tags encode countries (usa, europe, uk), funding (fully-funded, paid), study level (phd-scholarship, masters-scholarship), host organizations (un-program, fao) and deadline months. Provide a search term for best results; results are ordered by popularity.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax tags to return, 1–100 (default 30).
searchNoKeyword to match tag names, e.g. 'germany', 'fully funded', 'phd'. Omit to see the most-used tags overall.

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses that results are ordered by popularity and that omitting the search term returns the most-used tags overall. However, it does not mention whether matching is prefix/substring/case-insensitive, what the response shape is, or whether the endpoint is read-only and safe to call repeatedly.

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?

Three sentences, each earning its place: the first states the primary purpose, the second enumerates the tag taxonomy content, and the third gives practical search guidance and ordering behavior. It is front-loaded, readable, and free of filler.

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 2-parameter, no-output-schema tool, the description covers purpose, usage trigger, taxonomy scope, and behavioral notes. It could add the output shape or clarify matching semantics, but the combination of schema and description is sufficient for an agent to invoke it correctly in the intended workflow.

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%, so the baseline is 3, but the description adds value beyond the schema: it explains the purpose of the `search` parameter with concrete examples ('germany', 'fully funded', 'phd'), notes that omitting it returns popular tags, and clarifies how returned tags map to filter keys. This enriches the schema's dry parameter descriptions.

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 states a specific verb ('Search the tag taxonomy') and resource ('13k+ tags'), then explicitly frames the purpose: discovering valid slugs for the `country`, `funding`, and `tags` filters of oppcircle_search. It also lists the dimensions tags encode (countries, funding, level, orgs, deadline months), making it clearly distinct from sibling tools like oppcircle_list_categories.

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 gives clear context for when to use this tool: before querying oppcircle_search with country, funding, or tags filters, to find valid slugs. It does not explicitly list exclusions or name alternatives, but the use case is specific enough to guide selection. The advice to 'Provide a search term for best results' adds practical usage direction.

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

oppcircle_overviewCatalog overviewA

High-level snapshot of the Opportunities Circle catalog: site info, total active opportunities, and the breakdown of opportunity types by count. Good first call to understand what's available and which type slugs to use.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/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 disclosure burden. It communicates a read-only, aggregate view through 'High-level snapshot' and specifies the output categories, which conveys non-mutating behavior. However, it does not explicitly state that no changes are made, nor does it mention caching, freshness, or permission 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?

Two sentences: the first fronts the value proposition and returned content, the second gives a usage cue. No filler or repetition; every clause contributes to helping an agent decide to call it.

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 parameterless overview with no output schema, the description names the key return dimensions (site info, active opportunities, type counts) and explains why that matters (selecting type slugs). It is complete enough to invoke correctly, though 'site info' remains somewhat vague.

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 input schema has zero parameters and 100% schema description coverage, so there are no parameter semantics for the description to add. Baseline 4 applies because nothing is left ambiguous for callers.

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 uses a specific verb/resource pair ('High-level snapshot of the Opportunities Circle catalog') and enumerates the exact dimensions it covers (site info, active opportunity count, type breakdown). The phrase 'Good first call' plus the sibling list distinguishes it as the catalog-level overview rather than a search, get, latest, or listing operation.

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?

It states when to call it ('Good first call to understand what's available and which type slugs to use'), giving a clear entry-point context. It does not explicitly name alternatives or exclusions, but the sibling set and the 'first call' framing make the boundary clear.

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.

  1. 6 tool updatesv0.1.0
    • First observedoppcircle_get
    • First observedoppcircle_latest
    • First observedoppcircle_list_categories
    • First observedoppcircle_list_tags
    • First observedoppcircle_overview
    • First observedoppcircle_search

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a distinct, non-overlapping purpose: search, retrieve details, latest, list categories, list tags, and overview. There is no ambiguity; even the convenience shortcut (latest) clearly references search without overlapping.

Naming Consistency5/5

All tools use the consistent 'oppcircle_' prefix followed by a clear action verb or noun, all in snake_case. The naming pattern is uniform and predictable (e.g., oppcircle_search, oppcircle_list_categories).

Tool Count5/5

Six tools is a well-scoped size for a read-only catalog server. Each tool earns its place: discovery (search, latest, overview), retrieval (get), and metadata (list categories, tags). No redundancy or excess.

Completeness5/5

The surface fully covers the apparent domain of browsing and retrieving opportunities from the catalog. Search with filters, detailed fetch, recent items, category and tag enumeration, and an overview cover all typical user workflows without missing critical operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    Provides access to OpenAlex's catalog of 240M+ scholarly works, enabling search and retrieval of research papers, authors, institutions, journals, concepts, and funders with advanced filtering and classification capabilities.
    11
    29 npm
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to search and analyze OpenAlex scholarly database for OSINT research, including works, authors, institutions, funding, citations, and collaboration networks.
    MIT