get_projects
Retrieve OpenAI projects for your organization to monitor and manage API usage, with options to include archived projects.
Instructions
Fetches OpenAI projects for the current organization.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| include_archived | No | Whether to include archived projects. Defaults to False. |
Implementation Reference
- src/mcp_server_openai/server.py:77-77 (registration)The @mcp.tool decorator registers the get_projects tool with the FastMCP server.@mcp.tool(description="Fetches OpenAI projects for the current organization.")
- src/mcp_server_openai/server.py:78-116 (handler)The async handler function that fetches OpenAI projects using the Admin API, paginates results, and processes timestamps.async def get_projects( include_archived: Annotated[ bool, "Whether to include archived projects. Defaults to False." ] = False, ) -> list[dict]: """Fetches the projects for the current organization.""" base_url = "https://api.openai.com/v1/organization/projects" params: list[tuple[str, str]] = [ ("include_archived", include_archived), ("limit", 180), ] base_params = params.copy() url = f"{base_url}?{urlencode(base_params)}" results: list[dict] = [] async with httpx.AsyncClient( timeout=60, headers={"Authorization": f"Bearer {OPENAI_ADMIN_API_KEY}"}, ) as client: while url: response = await client.get(url) response.raise_for_status() data = response.json() items = data["data"] for item in items: item["created_at"] = datetime.fromtimestamp(item["created_at"]) if "archived_at" in item and item["archived_at"]: item["archived_at"] = datetime.fromtimestamp(item["archived_at"]) results.append(item) last_id = data.get("last_id") has_more = data.get("has_more") url = None if last_id and has_more: params = base_params.copy() params.append(("after", last_id)) url = f"{base_url}?{urlencode(params)}" # sleep to avoid rate limiting await asyncio.sleep(1.0) return results