metu-course-info-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@metu-course-info-mcplist computer engineering courses for 2025 fall semester"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
METU Course Info MCP Server
A Model Context Protocol (MCP) server for querying Middle East Technical University (METU / ODTÜ) course details, curriculum requirements, prerequisites, equivalents, and student course categories from the METU Student Portal (SAIS at https://student.metu.edu.tr).
Features
This MCP server integrates with:
View Program Course Details (64):
Search across 200+ METU departments and academic semesters.
List offered courses for any department and semester with credits, ECTS, level, and status.
View detailed course sections, instructor assignments, schedules, and critical announcements.
Query course prerequisites and required minimum passing grades.
Query course replacement / equivalence (Denk Dersler) rules.
View thesis work courses for graduate departments.
View Student Course Categories (178):
View the authenticated student's curriculum program types (e.g. Major / Minor).
View course requirements and elective categories (Must Courses, Departmental Electives, Non-Departmental Electives, Free Electives).
List specific courses required or permitted under each category for the student.
Note regarding View Course Capacity (158): Program 158 uses image CAPTCHA verification on each lookup, and is omitted per current automated requirements.
Related MCP server: cmucourses-connector
Installation
Using uv:
# Clone or navigate to the repository
cd /path/to/metu-course-info-mcp
# Create virtual environment and install
uv venv
uv pip install -e .Configuration
Create or update a .env file in the root directory:
SAIS_USERNAME=your_metu_username # e.g. e123456
SAIS_PASSWORD=your_sais_password # your METU password
LOCALE=tr # tr or en
PORT=8300 # optional port for SSE transportAvailable MCP Tools
Tool Name | Description |
| Lists all METU departments (code & name) and available semesters (e.g. |
| Search department code by name keyword (e.g. |
| Lists all courses offered by a department in a semester with Code, Name, ECTS, Credit, Level, and Type. |
| Retrieves section numbers, instructor names, syllabus link, and critical announcements for a course. |
| Retrieves prerequisite courses, set group numbers, and minimum passing grades (e.g. |
| Retrieves auto-replacement and equivalent courses (Denk Dersler). |
| Retrieves thesis work courses for a department. |
| Retrieves current student's program types and curriculum categories. |
| Retrieves courses listed under a category (Must Courses, Departmental Electives, etc.). |
Running the Server
Stdio Transport (Default for MCP Clients)
# Run using uv
uv run metu-course-info-mcp
# Or directly with Python
.venv/bin/python -m metu_course_info_mcpSSE Transport (HTTP Server)
uv run metu-course-info-mcp --transport sse --port 8300MCP Client Configuration
Claude Desktop / Antigravity / Cursor Configuration
Add this to your MCP configuration file (mcp_config.json or claude_desktop_config.json):
{
"mcpServers": {
"metu-course-info": {
"command": "/Users/ates/Documents/projects/metu-course-info-mcp/.venv/bin/python",
"args": ["-m", "metu_course_info_mcp"],
"env": {
"SAIS_USERNAME": "your_metu_username",
"SAIS_PASSWORD": "your_sais_password",
"LOCALE": "tr"
}
}
}
}Running Tests
uv run pytest -vAvailable Tools
9 toolsget_course_infoB
Retrieve detailed course information for a specific METU course, including sections, instructors, syllabus status, announcements, and lecture schedules.
| Name | Required | Description | Default |
|---|---|---|---|
| course_code | Yes | ||
| semester_code | Yes | ||
| department_code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| sections | No | |
| semester | Yes | |
| department | Yes | |
| course_code | Yes | |
| course_name | Yes | |
| credit_info | No | Credit breakdown e.g. '4.00(3.00,2.00,0.00)' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden and does disclose the type of content returned (sections, instructors, syllabus status, etc.). However, it does not mention edge-case behavior, auth needs, or what happens when the course is not found, leaving those as gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with a clear verb and resource, followed by a list of informative return components. There is no redundant phrasing or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return-value details, and the required parameter flags handle input specification. However, without usage guidance or parameter descriptions, an agent may not know how to format semester_code or where to obtain the codes; sibling tools like get_departments_and_semesters exist but are not pointed to.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not compensate by explaining the parameter formats, relationships, or usage of department_code, semester_code, and course_code. The parameter names are somewhat self-explanatory, but the description itself adds no semantic value beyond calling the target a 'specific METU course'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Retrieve' and identifies the resource as detailed course information for a specific METU course, listing included components (sections, instructors, syllabus status, announcements, lecture schedules). This clearly distinguishes it from sibling tools like get_course_prerequisites or list_program_courses, but it does not explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to choose this tool over alternatives. An agent must infer from the name and sibling list that get_course_info is for broad course details, while get_course_prerequisites or get_course_replacements serve narrower needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_course_prerequisitesA
Retrieve all prerequisite course requirements, prerequisite set groups, and minimum required letter grades (e.g., DD) for a specific METU course.
| Name | Required | Description | Default |
|---|---|---|---|
| course_code | Yes | ||
| semester_code | Yes | ||
| department_code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden of behavioral disclosure. It correctly conveys a read-only retrieval and enumerates the data returned, but does not address error behavior, input format expectations, authentication requirements, or effects for missing courses. The verb 'Retrieve' implies no side effects, but the description is otherwise on the minimal side.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence. It front-loads the verb and object, lists the specific data types retrieved, and ends with the scope ('for a specific METU course'). There is no unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the return values do not need to be explained. However, with no annotations and minimal parameter semantics, the description leaves input format and edge-case behavior unspecified. It is adequate for a simple retrieval tool but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only says 'for a specific METU course' without explaining the role or format of any individual parameter. department_code, semester_code, and course_code are self-explanatory in name, but no additional meaning is added to help an agent construct valid arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and names a clear resource: prerequisite course requirements, prerequisite set groups, and minimum required letter grades such as DD. It also scopes the operation to a specific METU course, making it easy to distinguish from siblings like get_course_info or list_program_courses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: whenever prerequisite details for a METU course are needed. It does not explicitly exclude alternatives or mention when not to use it, but the purpose is specific enough that an agent can infer the appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_course_replacementsB
Retrieve equivalent and auto-replacement courses (Denk Dersler) for a specific METU course.
| Name | Required | Description | Default |
|---|---|---|---|
| course_code | Yes | ||
| semester_code | Yes | ||
| department_code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden of behavioral disclosure. 'Retrieve' implies a read-only operation and the parenthetical clarifies the domain concept, but the description does not address what happens when a course has no replacements, edge cases, auth requirements, or rate limits. The burden is only partially met.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler — the verb and resource appear first and the parenthetical adds useful domain context efficiently. It is concise without being tautological.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the core purpose is adequately stated. Yet with 0% parameter coverage, no usage exclusions, and no annotations, an agent still lacks guidance on parameter formats and sibling selection — clear gaps for a tool with three required parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description barely compensates: it only hints that the three codes jointly identify a course. It does not explain formats, constraints, or relationships between department_code, semester_code, and course_code (e.g., how a semester code is formatted or whether department_code is an abbreviation). The self-explanatory parameter names carry most of the weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and a specific resource ('equivalent and auto-replacement courses (Denk Dersler) for a specific METU course'). The domain term 'Denk Dersler' gives it a distinct identity from siblings like get_course_prerequisites and get_course_info, though it does not explicitly name or contrast any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'For a specific METU course' implies the usage context — an agent can infer this applies when a concrete course is identified rather than a whole program or department. However, there is no explicit guidance about when not to use it or which sibling (e.g., list_program_courses, get_course_prerequisites) to prefer instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_departments_and_semestersA
Retrieve all available METU academic departments (code and name) and semester terms (e.g., '20251' for 2025-2026 Fall) from Program Course Details (64).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| semesters | Yes | |
| departments | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with no annotations provided, the description clearly signals a read-only retrieval operation with the verb 'Retrieve' and the scope 'all available'. It does not add richer behavioral context such as authentication requirements, rate limits, or what happens if the source is empty, so the description carries only partial behavioral burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler and includes a helpful example of the semester format. The parenthetical '64' in 'Program Course Details (64)' is unexplained but does not create significant bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description sufficiently covers what the tool returns: department codes/names and semester terms. It could be more complete by explaining the 'Program Course Details (64)' reference and when to call this versus a sibling search tool, but nothing essential to invoking it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the input schema is empty, so there is no parameter documentation burden on the description. The description appropriately focuses on what the response will contain rather than input details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Retrieve all available...') and a clear resource: METU academic departments and semester terms. It also distinguishes itself from search_departments by emphasizing 'all available' rather than filtered search, and it provides a concrete semester format example.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'all available' implies this is the tool to use when you need the complete unfiltered enumeration of departments and semesters. However, it does not explicitly mention alternatives or state when not to use it, such as preferring search_departments for targeted lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_student_course_categoriesA
Retrieve the logged-in student's program types (e.g. MAJOR) and curriculum course categories (MUST COURSE, DEPARTMENTAL ELECTIVE, NONDEPARTMENTAL ELECTIVE, FREE ELECTIVE) from Service 178.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| program_types | Yes | |
| course_categories | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing safety and side effects. It accurately describes this as a retrieval operation ('Retrieve') scoped to the logged-in student's data, making it clear that no mutation occurs. It also names the data source (Service 178) and enumerates the content returned, which adds useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states the action, the scope, the key result types, and examples, with no filler or redundancy. Every element contributes to an agent's understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficiently complete for a parameterless read-only tool with an output schema present. It specifies the scope (logged-in student), the data categories, and the source service. It could slightly improve by mentioning that the returned categories are intended as inputs for category-based queries, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to explain. The schema coverage is trivially 100% and the description correctly avoids inventing parameters. This matches the baseline for parameterless tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb ('Retrieve'), the resource ('logged-in student's program types and curriculum course categories'), and provides concrete examples of the values returned (MAJOR, MUST COURSE, etc.). This distinguishes it from the sibling get_student_courses_by_category, which retrieves courses rather than the categories themselves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is a lookup/context tool that returns the set of categories available to the logged-in student, likely to be used before filtering courses by category. However, it does not explicitly state when to use this tool versus alternatives such as get_student_courses_by_category or list_program_courses, leaving the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_student_courses_by_categoryB
Retrieve the list of courses belonging to a student's category (e.g. MUST COURSES or DEPARTMENTAL ELECTIVES with category_id like '1-236' or '2-236').
| Name | Required | Description | Default |
|---|---|---|---|
| category_id | No | 1-236 | |
| program_type | No | 1 |
Output Schema
| Name | Required | Description |
|---|---|---|
| courses | No | |
| message | No | |
| category_id | Yes | |
| category_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It clearly indicates a read-only retrieval operation and gives helpful category_id examples. However, it does not disclose whether both parameters are expected together, what happens when optional parameters are omitted, or any hidden constraints, so behavioral transparency is only partially fulfilled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence that front-loads the core action and resource. The parenthetical examples are useful and not redundant. There is no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no annotations, 0% schema description coverage, and one entirely unexplained parameter. Even though an output schema exists, the description is not complete enough for an agent to confidently call the tool with correct semantics, especially regarding how program_type interacts with category_id and when each parameter is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains category_id through examples ('1-236' or '2-236'), but program_type is not mentioned at all. With two parameters and no schema descriptions, leaving one parameter completely unexplained is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a resource ('list of courses'), and a clear filtering criterion (student's category). It includes concrete examples of category_id formats, making the purpose understandable. It does not explicitly contrast with sibling tools like list_program_courses or get_student_course_categories, so it misses full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this when you need courses for a student's category. However, there is no explicit guidance on when not to use it, nor any mention of alternative sibling tools such as get_student_course_categories or list_program_courses. The usage context is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_thesis_coursesC
Retrieve all thesis work courses for a department and semester term.
| Name | Required | Description | Default |
|---|---|---|---|
| semester_code | Yes | ||
| department_code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries full behavioral burden. It reveals the tool is a read operation ('Retrieve') but gives no details on pagination, result limits, error conditions, authentication needs, or what 'all' means in practice. The low effort of simply saying 'retrieve all' does little to disclose nontrivial behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no filler. The core action and scope are immediately understandable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema covers return values, and the simple 2-parameter read operation is moderately self-explanatory. However, the lack of usage guidance, sibling differentiation, and any behavioral caveats leaves an agent with important gaps when deciding when to call this tool and what to expect for edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description must compensate. It maps 'department' and 'semester term' to the two parameters, but does not explain expected formats, allowed values, or how they combine to filter results. The description adds only minimal meaning beyond the parameter names themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Retrieve') and resource ('all thesis work courses'), scoped by department and semester term. However, it does not explicitly differentiate from sibling tools like list_program_courses, leaving some ambiguity about what distinguishes a 'thesis work course' from other course types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. It does not mention siblings, prerequisites, or any conditions that would make this tool the right choice over list_program_courses or other course retrieval tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_program_coursesA
List all offered courses for a given METU department code and semester code. Returns Course Code, Course Name, ECTS Credits, Credits, Level, and Type.
| Name | Required | Description | Default |
|---|---|---|---|
| semester_code | Yes | ||
| department_code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description owns the behavioral disclosure. It communicates a read-only listing intent and the returned columns, which is useful, but it is silent on expected code formats, error behavior for unknown department or semester codes, and whether very large catalogs are truncated or paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action and scope, with no filler or repetition of the tool name. The second sentence's field list gives the agent quick expectations even though an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with an output schema, the core purpose and inputs are covered. The gaps are missing code-format conventions and routing guidance against eight siblings, both of which could cause first-try invocation errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description must compensate, and it does partially by confirming that both parameters are METU-specific codes and jointly select the course list. It stops short of format hints (e.g., 'CENG' vs '571' for department_code, or how semester_code is encoded), so the agent may guess the wrong shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb plus resource: 'List all offered courses for a given METU department code and semester code,' and enumerates the exact return fields (Course Code, Course Name, ECTS Credits, Credits, Level, and Type). This scope inherently separates it from siblings such as get_thesis_courses, get_course_prerequisite, and get_student_courses_by_category, which target different course subsets or detail levels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
When to use the tool is inferable from the stated purpose — anytime an agent needs the full course catalog for one department in one semester — but nothing in the text states when not to use it or names alternatives like get_course_info for single-course lookups. An agent must infer the boundary from sibling names rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_departmentsA
Search for METU department codes by keyword (e.g. 'Computer', 'Economics', 'Aerospace', '571').
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does convey that the tool performs a keyword-based search and returns department codes, and the examples indicate partial text and numeric codes are accepted. However, it does not explain matching semantics such as case sensitivity, substring vs exact match, result limits, or empty-result behavior, so the behavioral picture is incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence that leads with the core purpose and immediately supplies illustrative examples. No words are wasted, and the structure makes the tool's function easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one required parameter and an output schema available, so the description does not need to detail return values. The description covers the core purpose and parameter usage sufficiently. It lacks only explicit guidance on when to prefer alternatives, which is a minor gap for a single-purpose search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the schema's bare 'query' string property. The description does add meaning by explaining that the query is a keyword for METU department codes and supplies examples, but it leaves the exact expected syntax and matching rules unspecified. It is helpful but not fully detailed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Search'), a resource ('METU department codes'), and a mechanism ('by keyword'). Concrete examples ('Computer', 'Economics', 'Aerospace', '571') clarify that both textual names and numeric codes are valid. It is distinguishable from sibling tools like get_departments_and_semesters because it focuses on searching codes by keyword rather than listing all departments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when the agent needs to find a department code from a partial name or code keyword, but it does not explicitly state when not to use it. It also does not mention alternatives such as get_departments_and_semesters for obtaining the full department list. Usage context is present but left to inference.
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. Dates show when Glama detected each change.
9 tool updates
v0.1.0- First observed
get_course_info - First observed
get_course_prerequisites - First observed
get_course_replacements - First observed
get_departments_and_semesters - First observed
get_student_course_categories - First observed
get_student_courses_by_category - First observed
get_thesis_courses - First observed
list_program_courses - First observed
search_departments
TDQS
Each tool targets a distinct task: department discovery, course listing, course details, prerequisites, replacements, and student category queries. Even the closely related list_program_courses and get_thesis_courses are clearly separated by their filtered scope.
The majority of tools follow a get_<entity> pattern, with search_departments and list_program_courses as understandable discovery-action variants. The mix of get/list/search is minor and predictable, so the naming remains coherent.
Nine tools is a well-scoped size for this domain, covering catalog browsing, course details, and student-specific curriculum queries without unnecessary overlap or bloat. Each tool earns its place.
The surface covers department lookup, course listings, detailed course information, prerequisites, replacements, and student course categories. Minor gaps like a keyword course search or section-level enrollment details exist, but the core workflows are complete.
Maintenance
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
Access U.S. congressional data - bills, votes, members, committees - via MCP.
The Cortex MCP server provides read-only access to real-time engineering context from the Cortex developer portal, allowing AI coding assistants to answer natural language questions about your organization's catalog (microservices, libraries, domains, teams, infrastructure), scorecards (engineering standards and best practices), initiatives (goals and deadlines), and Engineering Intelligence metrics. It includes tools for querying documentation, tracking personal entities, and accessing AI-assisted insights across the entire Cortex ecosystem.
Query any docs site via MCP. Submit a URL, ask questions, get cited answers.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for querying a university course catalog. Enables searching courses, checking prerequisites, and looking up instructors via natural language.-
- FlicenseNot gradedqualityCmaintenanceRemote MCP connector providing live, structured access to CMU Courses public data including courses, prerequisites, schedules, instructors, gen-eds, and final-exam times to help students plan schedules.-
- FlicenseNot gradedqualityCmaintenanceEnables querying student information such as marks, attendance, pending assignments, and timetables from a MySQL database through MCP tools.-
- AlicenseNot gradedqualityBmaintenanceEnables browsing your Coursera courses, viewing library maps and course outlines, and downloading transcripts and readings as text via MCP tools.24MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/atesahmet0/metu-course-info-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server