mcpField
P
protobuf

protobuf

github.com/bufbuildDevelopment20544 installsUpdated 19w ago
Repository

About protobuf

protobuf is a skill for creating and maintaining Protocol Buffers schemas and services. It guides developers through project conventions, validation, code generation setup, and buf-based verification.

Key features

  1. 01Create and edit .proto schemas
  2. 02Configure buf and code generation
  3. 03Add protovalidate constraints
  4. 04Design gRPC and Connect services
  5. 05Check formatting, lint, and breaking changes

Use cases

  1. 01Add fields to a production API schema
  2. 02Set up a new protobuf project
  3. 03Troubleshoot buf lint or compatibility errors

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/bufbuild/claude-plugins --skill protobuf

After installing, type/protobufin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

assets/
buf.gen.go-connect.yaml
buf.gen.go.yaml
buf.gen.java.yaml
buf.gen.python.yaml
buf.gen.ts.yaml
buf.gen.yaml
buf.lock
buf.yaml
Makefile.example
assets/proto/example/v1/
book_service.proto
book.proto
references/
best_practices.md
buf_toolchain.md
examples.md
migration.md
protoc_toolchain.md
protovalidate.md
quick_reference.md
review_checklist.md
troubleshooting.md

Details

From the project README

Protocol Buffers

When You Need This Skill

  • Creating or editing .proto files
  • Setting up buf.yaml or buf.gen.yaml
  • Designing gRPC or Connect services
  • Adding protovalidate constraints
  • Troubleshooting buf lint or breaking change errors

Core Workflow

1. Match Project Style

Before writing proto code, review existing .proto files in the project. Match conventions for naming, field ordering, structural patterns, validation, and documentation style. If none exists, ask the user what style should be used or an existing library to emulate.

2. Write Proto Code
3. Verify Changes

Always run after making changes:

buf format -w && buf lint

Check for a Makefile first—many projects use make lint or make format.

Fix all errors before considering the change complete.

Quick Reference

TaskReference
Field types, enums, oneofs, mapsquick_reference.md
Schema evolution, breaking changesbest_practices.md
Validation constraintsprotovalidate.md
Complete service examplesexamples.md, assets/
buf CLI, buf.yaml, buf.gen.yamlbuf_toolchain.md
Migrating from protocmigration.md
Lint errors, common issuestroubleshooting.md
Proto API review checklistreview_checklist.md

Project Setup

New Project
  1. Create directory structure:

    proto/
    ├── buf.yaml
    ├── buf.gen.yaml
    └── company/
        └── domain/
            └── v1/
                └── service.proto
    
  2. Use assets/buf.yaml as starting point

  3. Add buf.build/bufbuild/protovalidate as a dependency in buf.yaml and run buf dep update

  4. Use assets/buf.gen.*.yaml for code generation config

Code Generation Templates
TemplateUse For
buf.gen.go.yamlGo with gRPC
buf.gen.go-connect.yamlGo with Connect
buf.gen.ts.yamlTypeScript with Connect
buf.gen.python.yamlPython with gRPC
buf.gen.java.yamlJava with gRPC
Proto File Templates

Located in assets/proto/example/v1/:

TemplateDescription
book.protoEntity message, BookRef oneof, enum
book_service.protoFull CRUD with batch ops, pagination, ordering

Common Tasks

Add a new field
  1. Use next sequential field number
  2. Add protovalidate constraints: every field should have validation appropriate to its type (format validators, length bounds, numeric ranges, enum constraints, etc.)
  3. Document the field
  4. Run buf format -w && buf lint
Remove a field
  1. Reserve the field number AND name:
    reserved 4;
    reserved "old_field_name";
    
  2. Run buf breaking --against '.git#branch=main' to verify
Add protovalidate constraints

Every field in a production API should have appropriate validation. See protovalidate.md for the full reference.

Common constraints:

  • String formats: .string.uuid, .string.email, .string.uri, .string.pattern
  • String bounds: .string.min_len, .string.max_len
  • Numeric bounds: .int32.gte, .uint32.lte
  • Enum validation: .enum.defined_only, .enum.not_in = 0
  • Repeated bounds: .repeated.min_items, .repeated.max_items
  • Required fields: (buf.validate.field).required = true
  • Oneof required: (buf.validate.oneof).required = true

Verification Checklist

After making changes:

  • Every field has appropriate protovalidate constraints
  • buf format -w (apply formatting)
  • buf lint (check style rules)
  • buf breaking --against '.git#branch=main' (if modifying existing schemas)

Comments

Markdown supported