Skip to content

Conversation

@adampiispanen
Copy link
Contributor

Add Pinecone MCP Server

Vector database for embeddings, similarity search, and RAG (Retrieval Augmented Generation) applications.

Features

  • Index Management - Create, list, describe, and delete vector indexes
  • Vector Operations - Upsert, fetch, update, and delete vectors
  • Similarity Search - Query similar vectors by vector or ID
  • Metadata Filtering - Hybrid search with metadata filters
  • Namespaces - Multi-tenancy and data isolation
  • Index Statistics - Vector counts, dimensions, and usage stats
  • Collections - Backup and restore indexes
  • Sparse Vectors - Support for hybrid dense/sparse search

Configuration

  • Authentication: API key + environment name (no OAuth)
  • Transport: streamable-http
  • Resources: 256Mi memory, 250m CPU
  • Free Tier: 100K operations/month

Use Cases

  • RAG (Retrieval Augmented Generation)
  • Semantic search applications
  • Recommendation engines
  • Document similarity matching
  • Question answering systems
  • Knowledge base search
  • Embedding storage and retrieval
  • Multi-modal search (text, images)

Key Features

  • Serverless and pod-based indexes
  • Multiple distance metrics (cosine, euclidean, dotproduct)
  • Metadata filtering for hybrid search
  • Namespace support for organization
  • Integrates with OpenAI, Hugging Face, Cohere embeddings
  • High-performance vector search

Integration Examples

  • Works with OpenAI embeddings (1536 dimensions)
  • Works with Sentence Transformers (384-768 dimensions)
  • Works with Cohere embeddings (1024-4096 dimensions)

Validation

✅ All validations pass: npm run validate-servers

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds a comprehensive Pinecone MCP server for vector database operations, enabling embeddings storage, similarity search, and RAG applications.

  • Implements complete Pinecone API coverage with 13 tools for index management, vector operations, and statistics
  • Provides serverless and pod-based index support with multiple distance metrics and metadata filtering
  • Includes comprehensive documentation, Docker containerization, and test configuration

Reviewed Changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
servers/pinecone/server.py Core MCP server implementation with all Pinecone API tools and async HTTP client operations
servers/pinecone/server.json Server configuration with metadata, deployment settings, and environment variables
servers/pinecone/requirements.txt Python dependencies for FastMCP, HTTP client, and web server
servers/pinecone/README.md Comprehensive documentation with API examples, best practices, and RAG implementation guide
servers/pinecone/test.json Test configuration for validating core index and vector operations
servers/pinecone/Dockerfile Container configuration for streamable-http deployment

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Comment on lines +250 to +258
params = {
"ids": ids,
"namespace": namespace
}

response = await client.get(
f"{index_host}/vectors/fetch",
headers=get_headers(),
params=params,
Copy link

Copilot AI Oct 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The params dictionary contains a list in the ids field, but URL parameters typically expect scalar values. This may not serialize correctly for the GET request. Consider using POST with JSON body or proper URL encoding for the list parameter.

Suggested change
params = {
"ids": ids,
"namespace": namespace
}
response = await client.get(
f"{index_host}/vectors/fetch",
headers=get_headers(),
params=params,
payload = {
"ids": ids,
"namespace": namespace
}
response = await client.post(
f"{index_host}/vectors/fetch",
headers=get_headers(),
json=payload,

Copilot uses AI. Check for mistakes.
response = await client.post(
f"{index_host}/describe_index_stats",
headers=get_headers(),
json=payload if filter else None,
Copy link

Copilot AI Oct 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent payload handling: when filter is None, the request sends None as JSON body instead of an empty dict or omitting the body entirely. This could cause API issues. Consider using json=payload or {} or conditional request construction.

Suggested change
json=payload if filter else None,
json=payload,

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants