Guides

What Is the ChatGPT Plugin Manifest?

Sean Moriarity
#openai#chatgpt#plugins#ai-plugin.json

ChatGPT plugins supercharge ChatGPT’s abilities by allowing developers to hook OpenAI’s powerful large language model with additional tools. Plugins give ChatGPT the ability to interact with the outside world to execute code, search information sources, browose the web, and more. There are 3 primary components to a ChatGPT plugin:

  1. A REST API
  2. An OpenAPI Specification
  3. The plugin manifest (ai-plugin.json)

In this post, you’ll learn about #3 - the plugin manifest. This post is a deep dive on all things plugin manifest. For more information about the end-to-end process of actually creating a plugin, see our series of posts on how to make your first ChatGPT plugin:

The Basics

Every ChatGPT plugin must have a plugin manifest hosted on the API’s domain. When installing a plugin, ChatGPT looks for a file in the root path of the domain at .well-known/ai-plugin.json. For example, when installing a plugin for the domain example.com, ChatGPT will look for a plugin manifest at example.com/.well-known/ai-plugin.json. If the plugin manifest is not available or cannot be retrieved, then ChatGPT cannot move forward with installing the plugin.

The Manifest Structure

The plugin manifest is a JSON description of your plugin with specific schema. It essentially outlines the configuration of your plugin, and is used to:

ChatGPT uses the plugin manifest and OpenAPI specification to generate Typescript pseudocode as a part of the prompt. The simplest plugin manifest looks something like this:

{
  "schema_version": "v1",
  "name_for_human": "TODO Plugin",
  "name_for_model": "todo",
  "description_for_human": "Plugin for managing a TODO list. You can add, remove and view your TODOs.",
  "description_for_model": "Plugin for managing a TODO list. You can add, remove and view your TODOs.",
  "auth": {
    "type": "none"
  },
  "api": {
    "type": "openapi",
    "url": "http://localhost:3333/openapi.yaml",
    "is_user_authenticated": false
  },
  "logo_url": "http://localhost:3333/logo.png",
  "contact_email": "support@example.com",
  "legal_info_url": "http://www.example.com/legal"
}

Let’s break each of these fields down a bit further.

schema_version

The schema version indicates what version of the plugin manifest is in use. This is for backwards compatibility. If and when the plugin manifest schema is changed, this version will change and users can specify the specific version they want to use. At the time of this writing, the only schema version available is v1.

name_for_human

This field represents the human readable name of the plugin presented in the plugin store. This is typically the full company or application name such as Kayak, Zapier, or Redfin.

name_for_model

This field defines the namespace for the ChatGPT plugin. When your plugin is converted into a prompt for ChatGPT, the name_for_model will be used to define the plugin namespace. For example todo will appear as:

// plugin which says hello.
namespace todo {
  // Says hello from the plugin
  type sayHello = () => any;
} // namespace todo

The name_for_model cannot contain any spaces, only letters or numbers.

description_for_human

This is the human readable description of your plugin. The description will be presented in the plugin store alongside the human readable name. This description is not included anywhere in the prompt, but it should still be concise.

description_for_model

This field is perhaps the most important in your plugin manifest. The description_for_model is essentially the “prompt” for your plugin. This description is included as a part of the prompt, and essentially provides context to ChatGPT as to what your plugin is capable of.

The description_for_model field has a maximum length of 8,000 characters. You should make as much use of it as possible. Designing a good prompt for your plugin takes some trial and error. OpenAI has some recommendations in their plugin documentation. One important consideration is that you should not prompt the model to run your plugin when the user hasn’t requested it. The description should also not attempt to control the personality or mood of ChatGPT.

I’ve found that simple descriptions which enumerate the purpose and available tools of the plugin are best. GPT-4 is often very good at reading between the lines of a request and determining when using your plugin is appropriate.

api

The API specification provides basic information about the API. It must include:

At the time of this writing, only OpenAPI is supported as a specification type.

auth

This field is used to describe how user’s should authenticate through your plugin. At the time of this writing, the following authentication methods are supproted:

  1. No authentication (auth “type”: “none”)
  2. User-level authentication
  3. Service-level authentication
  4. Oauth authentication

You can read more about each of these types of authentication strategies in our ChatGPT Plugin Authentication Guide.

logo_url

The logo URL is used to render an icon for your plugin in the plugin store. It supports transparent backgrounds and any web-image type. OpenAI recommends logos have a size of 512x512.

contact_email

The contact email is used internally by OpenAI for moderation, safety, and plugin deactivation.

The legal URL is provided to users for viewing basic plugin legal information.

Conclusion

The plugin manifest is a simple, but important part of plugin development. It’s important to understand each field and the impact it has on how your plugin is presented to ChatGPT and to users.

Enjoyed this post?
Subscribe for more!

Get updates on new content, exclusive offers, and exclusive materials by subscribing to our newsletter.

← Back to Blog