FCPとはFreenet Client Protocol（フリーネット･クライアント･プロトコル）の頭文字を取ったもので、これを使えばフリーネットのフロントエンドソフト（以下クライアントと呼ぶ）を開発することができる。なお、FCPの使用ポートは9481であるが将来変更される可能性もあるのでプログラミングの際は考慮すること。
各FCP通信の始めにクライアントから、
 00 00 00 02
 EndMessage
 Header
 [Field1=Value1]
 .
 .
 [FieldN=ValueN]
 EndMessage
上記メッセージがノードより返ってくれば通信準備完了である。
 【ノード → クライアント】
 
 FormatError
 [Reason=]
 EndMessage
または、
 【ノード → クライアント】
 
 Failed
 [Reason=]
 EndMessage
上記メッセージがノードから返ってきたり、返信が無い場合は通信準備の失敗である。
ノードとのハンドシェイクを行う。
 【クライアント → ノード】
 
 ClientHello
 EndMessage
とメッセージを送る。これを受けて、
 【ノード → クライアント】
 
 NodeHello
 Protocol=
 Node=
 [HighestSeenBuild=]
 MaxFileSize=
 EndMessage
がノードより返ってくる。
ノードステータスの収得する。
 【クライアント → ノード】
 
 ClientInfo
 EndMessage
とメッセージを送る。これを受けて、
 【ノード → クライアント】
 
 NodeInfo
 Architecture=
 OperatingSystem=
 OperatingSystemVersion=
 JavaVendor=
 JavaName=
 JavaVersion=
 AllocatedMemory=
 FreeMemory=
 DatastoreMax=
 DatastoreUsed=
 DatastoreFree=
 MaxFileSize=
 MostRecentTimestamp=
 LeastRecentTimestamp=
 RoutingTime= (0)
 AvailableThreads=
 ActiveJobs=
 NodePort=
 NodeAddress=
 EstimatedLoad=
 IsTransient=
 EndMessage
とノードステータスが返ってくる。
クライアントからノードへのダウンロード要求を行う。
 【クライアント → ノード】
 
 ClientGet
 RemoveLocalKey=
 URI=
 HopsToLive=
 EndMessage
ノードより下記のメッセージが返ってくる。
 【ノード → クライアント】
 
 DataFound
 DataLength=
 [MetadataLength=]
 [Timeout=]
 EndMessage
この後データが送られてくる。
 【ノード → クライアント】
 
 DataChunk
 Length=
 Data
 <データ>
以上でダウンロードができる。ただし、諸条件により失敗することがあり、下記のエラーメッセージがノードより返ってくる。
指定したURIが不正の為接続終了。
データが見あたらない為接続終了。
ルートが見あたらない為接続終了。
この時、再度ダウンロード要求をしなければならない。
再試行の為そのまま待機。
この時、ノードからのメッセージを待っていなければならない。
クライアントからノードへのインサート（アップロード）要求を行う。
 【クライアント → ノード】
 
 ClientPut
 RemoveLocalKey=
 HopsToLive=
 URI=
 DataLength=
 [MetadataLength=]
 Data
 <データ>
インサートに成功すると、
 【ノード → クライアント】
 
 Success
 URI=
 [PublicKey=]
 [PrivateKey=]
 EndMessage
がノードより返ってくる。
インサートに失敗すると、次のメッセージがノードより返ってくる。
指定したURIが不正の為接続終了。
再試行の為そのまま待機。
ルートが見あたらない為接続終了。
フリーネット上でキーの重複が発生した為接続終了。
データのインサートは成功したが、インサート処理が完全に終わっていない。
 【クライアント → ノード】
 
 GenerateCHK
 DataLength=number: メタデータ + データ のバイト数>
 [MetadataLength=]
 Data
 <データ>
ノードより下記のメッセージが返ってくる。
 【ノード → クライアント】
 
 Success
 URI=
 EndMessage
 【クライアント → ノード】
 
 GenerateSVKPair
 EndMessage
ノードより下記のメッセージが返ってくる。
 【ノード → クライアント】
 
 Success
 PublicKey=
 PrivateKey=
 CryptoKey=
 EndMessage
この公開鍵と秘密鍵がペアで使用できる。
 【クライアント → ノード】
 
 InvertPrivateKey
 Private=
 EndMessage
ノードより下記のメッセージが返ってくる。
 【ノード → クライアント】
 
 Success
 PublicKey=
 EndMessage
 【クライアント → ノード】
 
 GetSize
 URI=
 EndMessage
ノードより下記のメッセージが返ってくる。
 【ノード → クライアント】
 
 Success
 Length=
 EndMessage