How Plugins Are Categorized in the OpenAI Marketplace: A Technical Guide

The OpenAI Marketplace groups each plugin by a single, human-readable category declared in the plugin's manifest file, aggregating these declarations into a fixed taxonomy that powers search, filtering, and UI organization.

The openai/plugins repository defines a strict categorization system that controls how plugins appear in the OpenAI Marketplace. Each plugin declares its category within a JSON manifest located in the plugin directory, and the marketplace aggregates these declarations into a central catalogue. Understanding this taxonomy is essential for developers building integrations or analyzing the plugin ecosystem.

Where Category Data Is Stored

Individual Plugin Manifests

Every plugin ships a manifest file—typically located at .codex-plugin/plugin.json or .app.json—that contains a "category" field. For example, in plugins/zoom/.codex-plugin/plugin.json, the manifest declares:

"category": "Communication"

This value is set by the plugin author and determines where the plugin appears in the marketplace taxonomy. Similarly, plugins/stripe/.codex-plugin/plugin.json uses "category": "Finance", while plugins/hugging-face/.codex-plugin/plugin.json declares "Developer Tools".

The Central Marketplace Catalogue

The marketplace aggregates all plugins into a single catalogue file located at .agents/plugins/marketplace.json. This JSON file maps each plugin name to its declared category. The entry for the Zoom plugin appears as:

"name": "zoom", "category": "Communication"

The UI reads from this central file to render category groupings and search filters.

The Fixed Category Taxonomy

The OpenAI Marketplace uses a fixed set of categories that serve as the official taxonomy. These categories are not computed dynamically but are explicitly declared by authors and validated against the marketplace schema. The current categories observed in the source tree include:

  • Communication: zoom, gmail, slack, teams, outlook-email, fireflies
  • Productivity: linear, atlassian-rovo, sharepoint, outlook-calendar, clickup
  • Developer Tools: hugging-face, vercel, netlify, coderabbit, supabase
  • Finance: stripe, alpaca, binance, quickbooks, taxdown
  • Data & Analytics: posthog, amplitude, mixpanel, omni-analytics
  • Creativity: canva, remotion, hyperframes, shutterstock
  • Education & Research: zotero, readwise, life-science-research
  • Travel: finn, weatherpromise
  • Business & Operations: zoominfo, outreach, docusign, hubspot
  • Security: codex-security
  • Other: cogedim

How to Read and Query Category Data

Developers can programmatically access category information using the marketplace catalogue or individual manifest files.

Python: Group Plugins by Category

The following script loads .agents/plugins/marketplace.json and organizes plugins by their declared categories:

import json
from collections import defaultdict
from pathlib import Path

# Load the marketplace JSON (the path is relative to the repo root)

marketplace_path = Path(" .agents/plugins/marketplace.json")
data = json.loads(marketplace_path.read_text())

# Build a dict {category: [plugin names]}

by_category = defaultdict(list)
for entry in data["plugins"]:
    cat = entry.get("category", "Uncategorized")
    by_category[cat].append(entry["name"])

# Print the categories and the first few plugins in each

for cat, plugins in by_category.items():
    print(f"{cat}: {', '.join(plugins[:5])}")

Node.js: Extract Category from a Single Plugin

To read a specific plugin's category directly from its manifest:

const fs = require('fs');
const path = require('path');

function getCategory(pluginName) {
  const manifestPath = path.join(
    __dirname,
    'plugins',
    pluginName,
    '.codex-plugin',
    'plugin.json'
  );
  const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
  return manifest.interface?.category || manifest.category;
}

// Example: get the category for the Zoom plugin
console.log('Zoom category →', getCategory('zoom'));

Shell: Filter by Category

Use jq to list all plugins in a specific category from the command line:

jq -r '.plugins[] | select(.category=="Developer Tools") | .name' \
    .agents/plugins/marketplace.json

Summary

  • Categories are declared in individual plugin manifests at .codex-plugin/plugin.json using the "category" field.
  • The central catalogue at .agents/plugins/marketplace.json aggregates all plugin-category mappings.
  • The taxonomy is fixed and includes Communication, Productivity, Developer Tools, Finance, and other human-readable labels.
  • Developers can query categories programmatically using Python, Node.js, or shell tools against the JSON files in the openai/plugins repository.

Frequently Asked Questions

Where is the category defined for an OpenAI plugin?

The category is defined in the plugin's manifest file, typically located at plugins/{name}/.codex-plugin/plugin.json. The "category" field contains a human-readable string such as "Communication" or "Developer Tools" that determines the plugin's placement in the marketplace UI.

Can a plugin belong to multiple categories?

No, each plugin is assigned to exactly one category. The marketplace schema uses a single "category" value per plugin entry in the central catalogue, and the UI groups plugins accordingly without supporting multi-category tagging.

How does the marketplace UI use the category field?

The UI reads the aggregated data from .agents/plugins/marketplace.json to generate filtered views and search facets. When a user selects a category filter, the interface displays only plugins whose manifest-declared category matches the selected value.

Is the category list extensible or fixed?

The category taxonomy is fixed and serves as the official schema for the marketplace. While plugin authors select from this predefined list, they cannot create arbitrary new categories; the marketplace validates entries against the established Communication, Productivity, Developer Tools, and other defined groups.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →