populi-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| POPULI_API_KEY | Yes | A Populi API key token, found in Account & Settings > API > Keys. Sent as a bearer token to POPULI_BASE_URL only. | |
| POPULI_BASE_URL | Yes | Your Populi instance URL, e.g. https://yourschool.populiweb.com. Must be https; a trailing /api2 is optional. | |
| POPULI_FILES_DIR | No | The folder downloads are saved to and uploads are read from. | ~/populi-mcp-files |
| POPULI_TIMEOUT_MS | No | How long one Populi request may take, from 1000 to 600000 milliseconds. | 120000 |
| POPULI_ALLOW_WRITES | No | Set to true to enable the populi_write tool. Default is read-only. | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| populi_statusA | Shows which Populi instance this server talks to, whether the key is a sandbox key, and whether writes are enabled. Set |
| populi_search_apiA | Search the Populi API v2 route catalog (697 routes across 180 models) by keyword, e.g. 'application', 'enrollments', 'invoice', 'course offering'. Returns route ids with method and path. Use this first to find the right route, then populi_describe_api for its parameters. |
| populi_describe_apiA | Full reference for one route: path placeholders, required/optional parameters with types, expandable properties, filter conditions, required Populi roles, and a link to the docs. Pass a route id from populi_search_api, or a concrete method and path. |
| populi_getA | GET any Populi API v2 route (read-only). Path is under /api2, e.g. /people/123, /academicterms, /people/123/leads. Lists return up to 200 records per page; use |
| populi_downloadA | GET a Populi route and save the response to a file in the files folder instead of returning it. Use it for routes that return files (PDF/XLS/CSV exports, transcripts and grade reports, Data Slicer results, file and backup downloads, images) and to keep a big list or full export out of the conversation (use all_pages). Takes the same arguments as populi_get. Never overwrites: an existing name gets -1, -2, ... appended. Returns the saved path and a short preview. |
| populi_find_peopleA | Look up people by email address and/or name. Email is an exact match; first and last name are 'contains' matches. Returns Populi's people list: ids, names and status, plus a |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 6 tools
The discovery pair (search_api then describe_api) and the GET pair (get vs download) are clearly segmented, with descriptions explicitly stating when to use download over get. The only soft overlaps are populi_find_people versus a filtered populi_get on /people, and status/verify versus a plain get, but both are framed as convenience wrappers with clear boundaries.
All tools share the populi_ prefix in snake_case, which is highly predictable. Verb style is slightly mixed (populi_get and populi_download lack a noun object while search_api/describe_api use verb_noun), but no tool breaks convention or casing.
Six tools is well-scoped for a generic API gateway: discovery, introspection, two read execution modes, an identity/status check, and one domain shortcut. Every tool earns its place and none look like filler.
Read coverage is essentially complete thanks to the generic populi_get against the whole 697-route catalog, but the surface is read-only while populi_status advertises 'whether writes are enabled', creating a dead end with no create/update/delete or bulk-mutation tool. A task needing a write operation cannot be completed with this set.